Столкнулся с проблемой организации telnet из python'а. Казалось бы, что
проще — подключил библиотеку telnetlib и пользуйся? Однако не все так
просто. В примерах, которые приведены на сайтах разработчиков и
официальном сайте, при вводе логина/пароля и передаче команд
используется символ \n (якобы для эмулирования нажатия клавиши enter),
однако этот пример не работает у меня и нужно использовать "\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 # выводим полученный результат.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.