16

所以我正在尝试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 谢谢。

4

7 回答 7

15

好的,我找到了解决方案。在输入 ls 并退出之前,我需要先指定终端类型。添加

tn.write("vt100\n") 

在“ls”为我解决问题之前。

于 2012-06-08T16:37:04.060 回答
6

如果您使用的是 Windows,请务必\r在换行符之前添加回车 ( ):

tn.write(user.encode('ascii') + "\r\n".encode('ascii'))
于 2013-08-29T11:18:19.590 回答
5

我知道这是迟到了,但可能会帮助其他人。我也很难做到这一点,但这是我的一段代码。我的 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

于 2017-03-15T11:48:05.063 回答
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')

顺便说一句,telnetnetlib 可能很棘手,并且取决于您的 FTP 服务器和环境设置。您最好研究一下pexpect 之类的东西,以通过 telnet 自动登录和用户交互。

于 2012-06-08T16:41:57.560 回答
1

我挣扎了一段时间试图写入 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
于 2014-11-13T02:22:17.870 回答
0

使用 python 2.7 或在最后一行使用带有“(”,“)”的更高版本

于 2017-10-30T04:50:02.173 回答
0

如果这些答案都不起作用,您也可以尝试:

 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)

尽管我从未见过打印终端类型的实际请求,但这篇文章似乎有效。

于 2021-06-09T18:48:41.420 回答