telnetlib read_until无法工作,因为不确定要使用的主机名

时间:2017-12-27 00:39:51

标签: python telnetlib

我的程序需要telnet到一个可疑设备列表,但是他们的所有主机名都不同,但他们每次都会按照一套诉讼,我将在下面附上。

我的问题是telnetlib在尝试输入用户名之前需要一个read_until参数,在我的实例中我不知道该主机名是什么。

我尝试将read_all保存为变量并读取它,希望提取主机名但命令按预期挂起

代码

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()

可能的主机名

Switch_100-110

附加

在这个例子中,主机名是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)`

1 个答案:

答案 0 :(得分:0)

我最终不得不包括一个睡眠并增加调试缓冲区大小以适应缓冲区接收的数据量,这对我自己可能无法100%工作,因为mac-address-table会在一天中发生变化用户连接,但我只是在寻找一个与最终用户分开的接口上的单个MAC地址,这样就可以了

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()