Пример python для telnetlib

Итак, я пробую этот простой пример, заданный документами python:

import getpass
import sys
import telnetlib

HOST = "<HOST_IP>"
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()

Моя проблема в том, что она зависает в конце read_all()... Она ничего не печатает. Я никогда раньше не использовал этот модуль, поэтому я стараюсь, чтобы этот действительно простой пример работал, прежде чем продолжить. BTW, я использую python 2.4 Спасибо.

Ответ 1

Хорошо, я нашел решение. Прежде чем я ввел ls и выходил, мне нужно было сначала указать тип терминала. Добавление

tn.write("vt100\n") 

прежде чем "ls" исправил проблему для меня.

Ответ 2

Если вы используете Windows, обязательно добавьте возврат каретки (\r) перед новым символом строки:

tn.write(user.encode('ascii') + "\r\n".encode('ascii'))

Ответ 3

У меня нет сервера telnet для тестирования, но я думаю, проблема в том, что вы не читаете ответы сервера до подсказки после каждой команды, которую вы пишете.

PROMPT = ':~$'
tn = telnetlib.Telnet(HOST)
tn.read_until('login: ')
tn.write(user + '\n')
if password:
   tn.read_until('Password: ')
   tn.write(password + '\n')
tn.read_until(PROMPT)
tn.write('ls\n')
print tn.read_until(PROMPT)
tn.write('exit\n')

btw, telnetnetlib может быть сложным, и все зависит от вашего FTP-сервера и настройки среды. вам может быть лучше изучить что-то вроде pexpect для автоматизации входа и взаимодействия с пользователем по telnet.

Ответ 4

Я знаю, что это поздно, но может помочь другим. Я также старался получить это право, но вот мой кусок кода. Мой telnet будет следовать определенному потоку, как если бы он запрашивал loginID, а затем Password, а затем вам нужно было ожидать, что определенная строка будет отображаться здесь, что для моего случая было "DB>", тогда вы можете продолжить команду и все. Мой вывод будет сохранен в "out" varible

import os,re,telnetlib
host = "10.xxx.xxx.xxx"
port = 23

telnet = telnetlib.Telnet()
telnet.open(host, port)
telnet.write('loginID\r\n')
telnet.write('Password\r\n')
out = telnet.read_until("DB>", 5)
telnet.write('show cable modem reg\r\n') #Mycommand
out = telnet.read_until("DB>", 5)
telnet.write('quit\r\n')
telnet.close()

Дополнительные варианты и помощь см. на веб-сайте nullege

Ответ 5

Я долго пытался изо всех сил пытаться писать на силовой полосе SynAccess. Вот как я это сделал:

import sys
import telnetlib
HOST = < your SynAccess switch ip address >
user = < user name >
password = < password >

tn = telnetlib.Telnet(HOST, 23, 5)
tn.write("login\r\n")
tn.write(user + "\r\n")
tn.write(password + "\r\n")
tn.write("rb 3\r\n") # this reboots plug 3
tn.write("rb 1\r\n") # this reboots plug 1
tn.write("logout\r\n")
tn.close

Ответ 6

используйте python 2.7 или используйте более высокую версию с "(", ")" в последней строке