首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“窥探”蟒的telnetlib

“窥探”蟒的telnetlib
EN

Stack Overflow用户
提问于 2011-04-06 20:51:23
回答 2查看 1.9K关注 0票数 2

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

我想做的是能够在我的应用程序调用telnetlib.read_until()之前轻松地窥探放置在熟食队列中的数据(希望这样可以避免影响我的应用程序的操作)。

在telnetlib.py里打探一下,我发现'buf‘就是我想要的数据:新添加的数据,而不是窥探'cookedq’造成的重复。我可以在telnetlib.process_rawq()结束之前插入一行,以打印从服务器接收到的处理过的数据。

代码语言:javascript
复制
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]

这个效果很好。我可以看到几乎完全相同的数据收到我的应用程序,而没有影响它的操作。

问题是:是否有更快捷的方法来实现这一目标?这种方法是基本的,而且可以工作,但是每次升级Python库时,我都必须记住重新修改这个方法。

我简单地扩展telnet.process_rawq()的尝试没有成功,因为buf是telnet.process_rawq()的内部

有没有一种(更多的pythonic)方法来窥探telnetlib.process_rawq()-internal值而不修改telnetlib.py?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-06 21:14:19

最简单的方法就是给图书馆打上猴子补丁。将要更改的函数复制并粘贴到源代码中(不幸的是,process_rawq是一个相当大的函数),并根据需要对其进行修改。然后,可以将类中的方法替换为自己的方法。

代码语言:javascript
复制
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_debuglevel(1)内置到telnetlib模块的调试,它会将大量信息输出到stdout。

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

票数 1
EN

Stack Overflow用户

发布于 2012-05-10 16:00:25

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

telnetlib已经内置了一个调试输出选项。打电话给set_debuglevel(1),鲍勃是你叔叔。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5572778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档