1

背景:トップトーカー/リスナーリストを作成するために、ファイアウォールの接続テーブルを取得しています。

場合によっては、接続テーブルは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

ある種のバッファーにぶつかっていますか?このデータを取得するためのより良い方法は何でしょうか?

ありがとう。

4

1 に答える 1

2

最後に telnetlib を使用したのはかなり前のことですが、... 私の知る限り、使用read_untilは対話性が高く、巨大なデータ ダンプの発生が少ないセッションに最適です。特定のパターンの応答を待ってから再度通信するという考えです。

read_someローカル側で応答を構築するなど、他の読み取りオプションのいずれかを試しましたか? あなたが言ったように、それは間違いなくバッファの問題かもしれません。

またread_until、タイムアウト値を指定して、データの少なくとも一部を取得できるかどうかを確認してから、再度読み取ることもできます。

また、 python2.3 を使用していることに気付きました。そのバージョンに縛られていない場合は、telnetlib のソースで、最近の変更により特にタイムアウト処理が改善されていることに気付きました。

于 2012-03-27T20:16:47.733 に答える