2012-03-27 9 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などの他の読み取りオプションの1つを試しましたか、ローカル側でレスポンスを作成しましたか?あなたが言ったように、間違いなくバッファーの問題かもしれません。

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

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

+0

ありがとうございます - 私はread_someで遊んで、役立つかどうか確認します。 Python 2.3.4は私たちのサーバーの標準であり、残念なことにアップグレードできるものではありません。 – BDub

関連する問題