2015-05-04 1 views
1

Network парень играет с кодировкой здесьPython telnetlib подскажет на нестандартном порту

Я очень простой сценарий, который telnets к коммутатору/маршрутизатору, работает несколько команд и заканчивается. Все делается на порте 23. Проблема заключается в том, что когда я подключаюсь к устройству через терминальный сервер или к виртуальному маршрутизатору (csr1000v) на хосте ESXi, через нестандартный порт, я не получаю приглашение, и я не могу запускать команды.

В SecureCRT Я могу подключиться к ним без проблем, но я должен нажать Enter, прежде чем мне будет предложено ввести подсказку. В обычном коммутаторе/маршрутизаторе сразу появляется подсказка. Я попытался вставить telnet.write (b "\ r \ n") после подключения, но это не имело никакого значения.

Я также установил, что если я вызову приглашение через SecureCRT, отключите и запустите скрипт, он будет успешно выполнен. Я читал telnetlib документы без чего-либо, что выглядит, как это помогло бы

telnet = telnetlib.Telnet(HOST,port) 
#telnet.write(b" \r\n") 
telnet.read_until(b"Username: ") 
telnet.write(user.encode('ascii')) 
telnet.read_until(b"Password: ") 
telnet.write(password.encode('ascii')) 
telnet.read_until(b">") 

telnet.write(b"enable\r\n") 
telnet.read_until(b"Password: ") 
telnet.write(enable_password.encode('ascii')) 
telnet.read_until(b"#") 
telnet.write(b"term length 0\r\n") 
telnet.read_until(b"#") 

response = send_command(telnet,"sh run") 
print (response) 
response = send_command(telnet," sh ip int br | ex una") 
print (response) 
+0

Интересно, не последователен ли последовательный порт. Попробуйте 'time.sleep (1)' и 'telnet.write (b '\ r \ n')', в указанном порядке, сразу после подключения. –

ответ

0

Это не регулярный телнет. Это серийный номер по telnet. Вы должны отправить спецификацию. данные telnet.

import time 
import telnetlib 
cmd_ser1 = '\xff\xfc\x25' 
cmd_ser2 = '\xff\xfb\x00' 
cmd_ser3 = '\xff\xfd\x00\xff\xfb\x03\xff\xfd \x03\xff\xfd\x01\xff\xfe\xe8' 
cmd_ser4 = '\xff\xfe\x2c' 
cmd1 = "enable" 
cmd2 = "cisco" 
cmd3 = "copy running-config flash:/test.cfg" 
cmd4 = "exit" 

promt = "%s>"%(host) 
host_disable = "%s>"%(host) 


tn = telnetlib.Telnet(addr,port, timeout=5) 
tn.set_debuglevel(100) 
tn.write(cmd_ser1) 
time.sleep(1) 
tn.write(cmd_ser2) 
time.sleep(1) 
tn.write(cmd_ser3) 
time.sleep(1) 
tn.write(cmd_ser4) 
time.sleep(1) 
tn.read_very_eager() 

if promt == "host_disable": 
    tn.write(cmd1.encode('ascii') + b"\n") 
    time.sleep(1) 
    tn.read_very_eager() 
    tn.write(cmd2.encode('ascii') + b"\n") 
    time.sleep(2) 
    tn.read_very_eager() 
    tn.write(cmd3.encode('ascii') + b"\n") 
    tn.read_very_eager() 
    tn.write(b"\n") 
    time.sleep(2) 
    tn.write(b"\n") 
    time.sleep(2) 
    tn.write(cmd4.encode('ascii') + b"\n") 
    tn.read_very_eager() 
    tn.close() 
else: 
    tn.write(cmd3.encode('ascii') + b"\n") 
    tn.read_very_eager() 
    tn.write(b"\n") 
    tn.write(b"\n") 
    time.sleep(2) 
    tn.write(cmd4.encode('ascii') + b"\n") 
    tn.read_very_eager() 
    tn.close()