1 авг. 2012 г.

Python + telnet

Столкнулся с проблемой организации 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 # выводим полученный результат.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.