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()... Не отпечатва нищо. Никога преди не съм използвал този модул, така че се опитвам да накарам този наистина основен пример да работи, преди да продължа. Между другото, използвам python 2.4 Благодаря.


person de1337ed    schedule 08.06.2012    source източник


Отговори (7)


Добре, намерих решение. Преди да въведа ls и да изляза, трябваше първо да посоча типа терминал. Добавяне

tn.write("vt100\n") 

преди "ls" да реши проблема за мен.

person de1337ed    schedule 08.06.2012
comment
Насърчаваме ви да наградите себе си за отговора, тъй като това ще помогне на другите, които прочетат този въпрос в бъдеще - person Mawg says reinstate Monica; 30.08.2016
comment
защо се изисква? - person ransh; 28.04.2018

Ако използвате Windows, не забравяйте да добавите връщане на каретка (\r) преди знака за нов ред:

tn.write(user.encode('ascii') + "\r\n".encode('ascii'))
person Kalouste    schedule 29.08.2013

Знам, че това е късно за публикуване, но може да помогне на други. Аз също се борих да разбера това правилно, но ето моята част от кода. Моят telnet следваше определен поток, сякаш искаше loginID и след това Password и след това трябва да изчакате определен низ да се покаже тук, което за моя случай беше "DB>", след което можете да продължите с командата и всичко. Изходът ми ще бъде записан в променлива "out"

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

person Anukruti    schedule 15.03.2017

Нямам 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')

между другото, telnetnetlib може да бъде труден и нещата варират в зависимост от вашия FTP сървър и настройка на средата. може би е по-добре да потърсите нещо като pexpect за автоматизиране на влизането и потребителското взаимодействие през telnet.

person Corey Goldberg    schedule 08.06.2012
comment
Можете ли да обясните защо най-накрая трябва да дадем изхода тук tn.write('exit\n') ?? - person qre0ct; 15.09.2016

Известно време се мъчих да пиша на разклонител 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
person Anonymous Cowherd    schedule 13.11.2014

използвайте python 2.7 или използвайте по-висока версия с "(" ,)" на последния ред

person Saurabh kala    schedule 30.10.2017

Ако нито един от тези отговори не работи, можете също да опитате:

 tn.read_until(b"Password: ")
 tn.write(password.encode('utf-8') + b"\n")
 tn.read_until(b"Terminal type?", 5)
 tn.write("vt100\n".encode('utf-8'))
 tn.read_until(b">", 5)

Въпреки че никога не съм виждал действителната заявка за типа на терминала да се отпечатва, това писане изглежда работи.

person Rishi Latchmepersad    schedule 09.06.2021