2012-04-03 157 views
0

我想从防火墙拉出连接表。在某些情况下,可以超过200K线捕获telnet会话 - pexpect和telnetlib太慢

“内部10.16.25.63:80外46.33.77.20:53415 TCP,空闲零点00分04秒,字节3230,标志UIOB”

等。

我试图实现pexpect和telnetlib以获取这些表。不幸的是,超时和/或死亡超过40k。

Pexpect的实现:

connect.send("sho conn\n") 
connect.expect("<--- More --->", timeout=360) 
tmp_txt = connect.before 

telnetlib实现:

telnet.write("sho conn\n") 
tmp_text = telnet.read_until("<--- More --->") 

有没有抓住这个信息的一个更强大的方法是什么?我使用寻呼机值控制一次给出的行数(在执行此操作之前)。另外 - 我正在监视防火墙上的CPU,所以我知道它正在显示连接。要么太多,要么penetpect或telnetlib跟不上。

谢谢。

+0

http://www.lag.net/paramiko/ – tMC 2012-04-03 19:09:17

+0

@tMC - 不幸的是,它必须是telnet,而不是SSH。 – BDub 2012-04-03 19:18:54

+0

听起来像这个防火墙是一台设备,而不是运行Linux的标准PC。这是什么样的机器? – tMC 2012-04-03 19:22:34

回答

0

看起来你的方法对我来说很好。我还会分页输出(以使防火墙CPU保持低电平),然后一次捕获输出屏幕。

如果你正在运行超时错误,那么为什么不修改你期望的循环,期望每一行或特定的输出行(我认为它有一个常规格式),然后只发送空间,当它得到“更多“为下一个屏幕行。我已经很多地使用这种模式来处理可能在不同地方暂停的长输出流。

您提到python进程死亡,我们无法帮到您 - 除非您更详细地说明正在引发异常。