2012-03-27 242 views
1

背景: 我正在拉动防火墙的连接表,以便构建一个顶级通话人/听众列表。telnetlib read_until缓冲区大小

在某些情况下,连接表是200,000+个条目。我正在使用telnetlib远程访问防火墙并获取连接表。我使用read_until来捕获数据。但是,当表格大于40,000个条目时,它会挂起。当我杀了它,我看到以下内容:

Traceback (most recent call last): 
File "test2.py", line 152, in ? 
main() 
File "test2.py", line 120, in main 
tmp_text = telnet.read_until(pager_text) 
File "/usr/lib/python2.3/telnetlib.py", line 317, in read_until 
self.process_rawq() 
File "/usr/lib/python2.3/telnetlib.py", line 488, in process_rawq 
self.cookedq = self.cookedq + buf[0] 
KeyboardInterrupt 

我打某种缓冲区?什么是获得这些数据的更好方法?

谢谢。

回答

2

我最后一次使用telnetlib的时间很长,但是......据我所知,使用read_until最适合用于交互性更好,数据转储次数更少的会话。这个想法是你正在等待一个特定的模式响应然后再次通信。

您是否尝试过的其他读取选项,如read_some和建立在你的本地端的回应吗?这肯定可以像你说的那样缓冲。

您也可以尝试read_until,并给它一个超时值,看看你能得到的数据的至少一部分,然后再阅读。

此外,我注意到你正在使用python2.3。如果你不受该版本的约束,我注意到telnetlib的来源,最近的更改特别改善了超时处理。

+0

谢谢 - 我会玩read_some,看看它是否有帮助。 Python 2.3.4是我们服务器上的标准,不幸的是我不能升级。 – BDub 2012-03-27 21:03:22