telnetlib 中各种 read 函数的意义
缘起
最近想用 Python 的 telnetlib 写个测试脚本。可是 telnetlib 里一堆的 read 函数, 又是 lazy 又是 eager 的;搞不清楚它们之间的区别。在 python 文档和 google 上搜索也没有任何结果。好在 python 是开源的,找到源码一看,还是比较简单明了。
基本原理
要明白 telnetlib 中各个 read 函数的意义,首先要了解 telnetlib 的工作原理。 telnetlib 首先通过 socket 连接从网络接收数据,把数据存储到自己的 raw queque 中,然后对其进行(telnet 协议相关的)处理(cook)。处理结果存放在 cooked queue 中供应用程序取用。整个过程如下图.
---------, ,----------, ,-----, ,--------, ,-----------,
network |=====>|socket buf|=====>|raw-q|=====>|cooked-q|=====>|application|
---------` `----------` `-----` `--------` `-----------`
| | | | |
| | | | |
| | | |---------------|
| | | read_very_lazy |
| | | |
| | |------------------------------|
| | read_lazy |
| | |
| |------------------------------------------------|
| read_very_eager/read_eager |
| |
|----------------------------------------------------------------|
| read_until/read_all/read_some/expect |
各 read 函数的意义
各种 read 函数的不同就在于它们所包涵的阶段不同。
read_very_lazy
只从 cookedq 读取已处理好的数据。
read_lazy
如果 rawq 有数据,对 rawq 里的数据进行处理,然后从cookedq 中读取处理好的数据。
read_eager
从系统的 socket buffer 接受数据(即非阻塞模式1读取数据)并处理,然后从 cookedq 中读取数据。
read_very_eager
与 read_eager 类似。不同之处在于 read_eager 只要从
cookedq 成功读取到数据就返回,而 read_very_eager 会试图读尽可能多的数据。
其它
剩下的 read 函数基本上就是阻塞式等待网络数据,直到读到所需数据。
1. 关于非阻塞的说明:本文提到的非阻塞是对接收普通数据而言的,也就是 python 文档中的“ Do not block unless in the midst of an IAC sequence.”
分享到:
相关推荐
python telnet网络设备脚本
python实现telnet登录设备,保存登录后对设备的各种操作的日志信息。
这是一个python文件,使用的是python3.2和PyQt4的开发环境,python3.2中有telnetlib模块,这个模块里有相应的登陆和读取远程主机端shell命令行返回数据的函数,这个程序是一个完整的登陆和读取相应数据到界面文本...
使用python编写的自动备份交换机配置的程序,单文件直接运行即可,目前只支持telnet方式连接交换机,支持华为、华三、锐捷交换机,通过tftp方式自动备份配置 管理信息表格为[管理信息.csv],和本程序放在同一个目录 ...
Python中的telnet功能主要用于远程控制和管理服务器,例如进行自动化运维任务。telnet协议基于TCP/IP,允许用户在本地计算机上通过网络连接到远程主机,就像直接坐在远程主机前操作一样。实现Python telnet登陆功能...
def do_telnet(Host, username, password, finish, commands): import telnetlib '''''Telnet远程登录:Windows客户端连接Linux服务器''' # 连接Telnet服务器 tn = telnetlib.Telnet(Host, port=23, timeout=10...
在提供的文件中,我们看到有针对这些领域的五个Python脚本:EasyFtp.py(FTP客户端)、EasyExcel.py(Excel数据操作)、EasyLogUtil.py(日志管理)、EasyTelnet.py(Telnet客户端)以及EasyOs.py(操作系统接口)。...
该项目实现了一个python telnet服务器,试图充当IoT恶意软件的蜜罐,它在Internet上的telnet服务器上散布了极其不安全的默认密码。 蜜罐通过模拟外壳环境来工作,就像Cowrie( )一样。 该项目的目的主要是通过将...
资源分类:Python库 所属语言:Python 资源全名:telnetserver-0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
### Python 实现 Telnet 服务器的方法 在现代网络通信中,虽然 Telnet 协议由于安全性问题已经被更安全的协议(如 SSH)所取代,但在某些特定场景下,使用 Telnet 进行简单的网络测试或者服务调试仍然非常有用。...
在本例中,我们使用的`telnetlib`模块是Python的标准库之一,用于实现Telnet协议,这是一种简单的远程登录协议,常用于与网络设备(如路由器、交换机)进行交互。 网络设备巡检的主要目标包括但不限于检查设备的...
### Python判断Telnet连接是否通畅的知识点解析 #### 一、引言 在日常网络运维工作中,时常需要检查网络设备的可访问性。除了常用的`ping`命令外,`telnet`也是验证TCP端口是否可达的有效手段。本文将详细介绍一个...
标题 "网件telnet工具(旧)" 指向的是一个用于启用Netgear设备上telnet服务的Python脚本工具。这个工具可能是为了解决某些老版本的Netgear路由器或网络设备不支持或者默认禁用telnet协议的问题。telnet是一种远程...
Python的telnetlib模块提供了一个方便的方式来实现这一点。本文将深入讲解如何使用Python的telnetlib来实现弱密码登录的方法。 首先,确保你已经安装了Python环境,并且telnetlib是Python标准库的一部分,无需额外...
usr/bin/env python # -*- coding: utf-8 -*- import telnetlib import math import time def get_param(b): 获取相应的参数,返回float型参数组 c = [] b = list(b) length = len(b) print length for x in ...
【Python-开源Telnet蜜罐Honeypot】 在网络安全领域,蜜罐(Honeypot)是一种主动防御技术,它模拟系统或网络资源来吸引并诱捕攻击者。蜜罐通常不承载真实数据,而是收集攻击者的活动信息,帮助研究攻击手段、策略...