crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Python + telnet
Гость_Я_*
сообщение 26.9.2010, 21:54
Сообщение #1





Гости








    


Привет всем.
Хочу приконнектиться из python'а к железке по telnet'у.
Нашел полузную либу telnetlib. Нашел пример на сайте разработчика, подправил под свой, но работать не хочет. Пишет:

Цитата
Password:
^CTraceback (most recent call last):
File "./telnet.py", line 29, in <module>
print tn.read_all()
File "/usr/local/lib/python2.5/telnetlib.py", line 337, in read_all
self.fill_rawq()
File "/usr/local/lib/python2.5/telnetlib.py", line 528, in fill_rawq
buf = self.sock.recv(50)
KeyboardInterrupt


вот сам код уже исправленный:
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()


Заранее благодарен за отввет.

ЗЫ. Если не там создал - переместите, пожалуйста.
ЗЗЫ. Если тема поднималась ранее - ткните носом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_Я_*
сообщение 27.9.2010, 15:07
Сообщение #2





Гости








    


Проблему я решил. Устройство все успевает, только надо выпрямители рук подарить докописцам и людям, которые копипастят. Не знаешь что пишешь - не пиши. В общем объясняю.
В примерах, ввод команды заканчивается "\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


Вот так.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 12:15