2017-12-27 11 views
-1

私のプログラムでは疑わしいデバイスのリストにtelnetが必要ですが、ホスト名はすべて異なりますが、以下で囲むたびに、telnetlib read_untilは、期待するホスト名が不明なため動作しません

私の問題は、ユーザ名を入力しようとする前にtelnetlibにread_until引数が必要であることです。私のインスタンスでは、そのホスト名がわかりません。

は私が

import telnetlib 
username = 'admin' 
password = 'password' 

text = [] 
def telnet2(): 
    tn = telnetlib.Telnet('10.10.10.199') 
    tn.write(username + "\r\n") 
    if password: 
     tn.read_until('Password: ') 
     tn.write(password + '\r\n') 
     tn.write('enable \r\n') 
     tn.write('show poe status \r\n') 
     tn.write('show mac-address-table \r\n') 
     tn.write('exit \r\n') 
    text.append(tn.read_all()) 

telnet2() 

可能なホスト名

ホスト名を抽出する希望が、予想

コードなどのコマンドがハングして、変数としてread_allを保存して、それを読んでみました

Switch_100-110

0この場合

エクストラ

は、ホスト名はSwitch_109ですが、私は手動で接続されていなかったかどうかを確認することを知らないだろう。

**エラーメッセージ**

`File "connect2.py", line 18, in telnet2 
    print(tn.read_all()) 
    File "/usr/lib/python2.7/telnetlib.py", line 385, in read_all 
    self.fill_rawq() 
    File "/usr/lib/python2.7/telnetlib.py", line 576, in fill_rawq 
    buf = self.sock.recv(50)` 
+0

-1理由を説明してください。なぜなら、何らかの理由で、あなたに尋ねます。ありがとうございます。 –

+0

ユーザー名を入力する前にデバイスの出力がどのように見えるのですか?確かにそこに*いくつかの定数テキストがあり、あなたが読むまで読むことができます。 – jasonharper

+0

私は 'tn.read_until( 'switch _')'を試みましたが、役に立たない - OPにエラーメッセージを添付します –

答えて

0

私は睡眠を含めた、バッファが受信されたデータの量に対処するために、デバッグバッファサイズを増やすことになった、これは100%に動作しない場合がありますMACアドレステーブルはユーザーが接続しても一日中変わるだろうが、エンドユーザーとは別のインターフェイスにある単一のMACアドレスを探しているだけなのでOKになるだろう。

import time 
import telnetlib 
username = 'admin' 
password = 'password' 

text = [] 
my_text = '' 
def telnet2(): 
    tn = telnetlib.Telnet('10.10.10.199') 
    tn.read_until('switch_') 
    tn.write(username + "\r\n") 
    if password: 
     tn.read_until('Password: ') 
     tn.write(password + '\r\n') 
     tn.write('enable \r\n') 
     tn.write('show poe status \r\n') 
     time.sleep(1) 
     tn.write('\r\n') 
     tn.write('enable \r\n') 
     tn.write('show mac-address-table \r\n') 
     tn.write('\r\n') 
     time.sleep(2) # handy for not overloading the buffer straight away/accommodating for time delay due to latency 
     tn.write('exit \r\n') 
     tn.write('exit \r\n') 
     my_text = tn.set_debuglevel(40000) # by changing the debuglevel it will take in more data 
     my_text = tn.read_all() 
     print(my_text) 

telnet2() 
関連する問題