crossplatform.ru

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


  Ответ в Python + telnet
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


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


Вот так.
alex977 Дата 27.9.2010, 14:25
  Похожая тема (если кратко - устройство не успевает обрабатывать команды)
Я Дата 27.9.2010, 8:16
  Собственно другой вопрос нарисовался.
как правильно передать пароль. Такое ощущение, что пароль не передается вообще.
Я Дата 27.9.2010, 5:55
 
Цитата(Kagami @ 26.9.2010, 23:39) *
ты сам нажал Ctrl+C для завершения программы

Я полчаса ждал пока она выведет хоть что-то.
Цитата(Kagami @ 26.9.2010, 23:39) *
К тому же ты уверен что пароль на сервере для пользователя admin пустой? В твоем скрипте ты отправляешь только перевод строки.

Моя железка. :) Я уверен. В ответ на запрос пароля я отправляю ему перевод каретки, дабы эмулировать нажатие клавиши Enter.
Kagami Дата 26.9.2010, 23:39
  Я питон не знаю, но судя по выводу ты сам нажал Ctrl+C для завершения программы. К тому же ты уверен что пароль на сервере для пользователя admin пустой? В твоем скрипте ты отправляешь только перевод строки.
Я Дата 26.9.2010, 21:54
  Привет всем.
Хочу приконнектиться из 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()


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

ЗЫ. Если не там создал - переместите, пожалуйста.
ЗЗЫ. Если тема поднималась ранее - ткните носом.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 11:03