Привет всем.
Хочу приконнектиться из python'а к железке по telnet'у.
Нашел полузную либу telnetlib. Нашел пример на сайте разработчика, подправил под свой, но работать не хочет. Пишет:
import getpass
import sys
import telnetlib
HOST = "10.10.1.110"
#user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("Login: ")
tn.write("admin" + "\n")
if password:
tn.read_until("Password:")
tn.write( "\n")
tn.write("\n")
tn.write("logout\n")
print tn.read_all()
import getpass
import sys
import telnetlib
HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()
Я питон не знаю, но судя по выводу ты сам нажал Ctrl+C для завершения программы. К тому же ты уверен что пароль на сервере для пользователя admin пустой? В твоем скрипте ты отправляешь только перевод строки.
Собственно другой вопрос нарисовался.
как правильно передать пароль. Такое ощущение, что пароль не передается вообще.
http://python.su/forum/viewtopic.php?id=7726
Проблему я решил. Устройство все успевает, только надо выпрямители рук подарить докописцам и людям, которые копипастят. Не знаешь что пишешь - не пиши. В общем объясняю.
В примерах, ввод команды заканчивается "\n", а надо использовать "\r".
Для незнающих поясняю:
В документации говорится, что "\n» - символ перехода на новую строку с внутренним кодом 0x0A, а "\r» - символ возврата каретки с внутренним кодом 0x0D. Получается, что устройства, к которым я пытался подключиться отлавливают именно 0x0D, а 0x0A просто добавляли вконец написанной строки.
И в итоге код получается таким:
#!/usr/bin/env python
import sys
import telnetlib
import time
tn = telnetlib.Telnet("10.10.0.1", 23) #подключаемся к узлу
tn.read_until("Router >") # отлавливаем приглашение, которое заканчивается "Router >"
tn.write("enable\r") # вводим команду (Обратить внимание на \r)
tn.read_until("Password:") #отлавливаем приглашение с вводом пароля
tn.write("my_pass\r") # вставляем пароль (Обратить внимание на \r)
tn.read_until("telnet@BigIron Router#") #отлавливаем приглашение, информирующее о входе в систему
tn.write("show chassis\r") # выполняем команду
s = tn.read_until(" C degrees") # считываем результат до определенного слова
print type(s) #навсякий случай узнаем что мы получили, а то мало ли
tn.close(); #закрываем сессию
print s
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)