2012-04-03 14 views
0

ファイアウォールから接続テーブルを取得したい。いくつかのケースでは、それはtelnetセッションのキャプチャが遅すぎる - pexpectとtelnetlibが遅すぎる

以上200Kラインとすることができる「10.16.25.63:80内部46.33.77.20:53415外側TCP、午後12時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を監視しているので、接続が表示されていることがわかります。あまりにも多すぎるか、またはpexpectやtelnetlibが遅すぎて追いつくことができません。

ありがとうございました。

+0

http://www.lag.net/paramiko/ – tMC

+0

@tMC - 残念ながら、SSHではなくTelnetでなければなりません。 – BDub

+0

このファイアウォールはアプライアンスであり、Linuxを実行する標準的なPCではないようです。これはどんな機械ですか? – tMC

答えて

0

あなたのアプローチが私にとってうまくいくようです。また、出力をページングして(ファイアウォールCPUを低く保つため)、出力を一度にフルスクリーンでキャプチャします。

タイムアウトエラーが発生している場合は、各行や特定の出力行が必要なループ(通常の書式があると仮定します)を期待して変更しないでください。 "次の画面の行。私は、さまざまな場所で一時停止する可能性がある出力の長いストリームに対処するために、このパターンを多く使用しました。

あなたは、例外が発生しているかどうかを詳細に説明していない限り、Pythonプロセスが終了したと言います。