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命令行返回数据的函数,这个程序是一个完整的登陆和读取相应数据到界面文本...
def do_telnet(Host, username, password, finish, commands): import telnetlib '''''Telnet远程登录:Windows客户端连接Linux服务器''' # 连接Telnet服务器 tn = telnetlib.Telnet(Host, port=23, timeout=10...
该项目实现了一个python telnet服务器,试图充当IoT恶意软件的蜜罐,它在Internet上的telnet服务器上散布了极其不安全的默认密码。 蜜罐通过模拟外壳环境来工作,就像Cowrie( )一样。 该项目的目的主要是通过将...
主要介绍了Python telnet登陆功能实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
资源分类:Python库 所属语言:Python 资源全名:telnetserver-0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
python文件操作,python telnet,python ftp,python excel,log日志等,直接导入就可用
主要介绍了Python实现telnet服务器的方法,涉及Python通过Telnet连接服务器的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
通过Python脚本,自动巡检网络设备,并将巡检结果输出到附件,邮件发送。使用的是Python的telnetlib模块
这个跟ping那个差不多,ping的.../usr/bin/env python # coding: utf8 import telnetlib import time import codecs import os # telnet host def telnetdo(host, statusFile): status1 = 'telnet success' status2
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方式连接交换机,支持华为、华三、锐捷交换机,通过tftp方式自动备份配置 管理信息表格为[管理信息.csv],和本程序放在同一个目录 ...
今天小编就为大家分享一篇对python使用telnet实现弱密码登录的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
华为3COM本地console及telnet、ssh认证典型配置举例
可以用VT和Telnet控件在应用程序中实现终端仿真功能。PowerTCP Emulation Tool是一个ActiveX组件,它提供了终端仿真功能,并具有screen-scraping、高级图解字体和打印功能。它的特点包括VT320、VT220、VT100、VT52...