&引用;“窥探”;python';s telnetlib

&引用;“窥探”;python';s telnetlib,python,debugging,telnetlib,Python,Debugging,Telnetlib,我有一个调用telnetlib.read_until()的应用程序。在大多数情况下,它运行良好。 然而,当我的应用程序的telnet连接失败时,很难调试确切的原因。是我的脚本还是服务器连接不可靠?(这是一个开发实验室,所以有很多不可靠的服务器) 我想做的是,在我的应用程序调用telnetlib.read_until()之前,能够轻松地窥探放入已煮熟队列的数据(从而有望避免影响我的应用程序的操作) 在telnetlib.py中,我发现“buf[0]”正是我想要的数据:新添加的数据没有因窥探“coo

我有一个调用telnetlib.read_until()的应用程序。在大多数情况下,它运行良好。 然而,当我的应用程序的telnet连接失败时,很难调试确切的原因。是我的脚本还是服务器连接不可靠?(这是一个开发实验室,所以有很多不可靠的服务器)

我想做的是,在我的应用程序调用telnetlib.read_until()之前,能够轻松地窥探放入已煮熟队列的数据(从而有望避免影响我的应用程序的操作)

在telnetlib.py中,我发现“buf[0]”正是我想要的数据:新添加的数据没有因窥探“cookedq”而导致的重复。 我可以在telnetlib.process_rawq()的结尾前插入一行,以便在从服务器接收到处理后的数据时打印出来

telnetlib.process_rawq ...
    ...  
    self.cookedq = self.cookedq + buf[0]
    print("Dbg: Cooked Queue contents = %r" % buf[0]  <= my added debug line
    self.sbdataq = self.sbdataq + buf[1]
telnetlib.process\u rawq。。。
...  
self.cookedq=self.cookedq+buf[0]

print(“Dbg:Cooked Queue contents=%r”%buf[0]最简单的方法是对库进行修补。将要更改的函数复制并粘贴到源代码中(不幸的是,process_rawq是一个相当大的函数),并根据需要对其进行修改。然后,您可以用自己的方法替换类中的方法

import telnetlib

def process_rawq(self):
    #existing stuff
    self.cookedq = self.cookedq + buf[0]
    print("Dbg: Cooked Queue contents = %r" % buf[0]
    self.sbdataq = self.sbdataq + buf[1]

telnetlib.Telnet.process_rawq = process_rawq
您也可以使用
set\u debuglevel(1)
尝试telnetlib模块内置的调试功能,该功能会向标准输出大量信息


在这种情况下,我倾向于抓取wireshark/tshark/tcpdump并直接检查网络会话。

我刚刚找到了一个更好的解决方案(通过阅读代码,duh!)

telnetlib已经内置了一个调试输出选项。只需调用set_debuglevel(1)和Bob的叔叔