telnetlib python示例

telnetlib python示例,python,telnetlib,python-2.4,Python,Telnetlib,Python 2.4,因此,我正在尝试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

因此,我正在尝试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()
导入getpass
导入系统
导入telnetlib
HOST=“”
用户=原始输入(“输入您的远程帐户:”)
password=getpass.getpass()
tn=telnetlib.Telnet(主机)
tn.read_直到(“登录:”)
tn.write(用户+“\n”)
如果输入密码:
tn.read_直到(“密码:”)
tn.write(密码+“\n”)
tn.write(“ls\n”)
tn.write(“退出\n”)
打印tn.read_all()
我的问题是它挂在read_all()的末尾。。。它不会打印任何内容。我以前从未使用过这个模块,所以在继续之前,我正在尝试让这个非常基本的示例工作。顺便说一句,我使用的是python 2.4
谢谢。

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

tn.write("vt100\n") 

在ls帮我解决问题之前

我没有要测试的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')

顺便说一句,telnetlib可能会很棘手,情况会因FTP服务器和环境设置的不同而有所不同。您最好通过telnet自动登录和用户交互。

如果您使用的是Windows,请确保在新行字符之前添加回车符(
\r
):

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

我挣扎了一段时间试图写入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
导入系统 导入telnetlib 主机=<您的SynAccess交换机ip地址> user= 密码= tn=telnetlib.Telnet(主机,23,5) tn.write(“登录\r\n”) tn.write(用户+“\r\n”) tn.write(密码+“\r\n”) tn.write(“rb 3\r\n”)#这将重新启动插头3 tn.write(“rb 1\r\n”)#这将重新启动插头1 tn.write(“注销\r\n”) 关闭
我知道这篇文章发得晚了,但可能会帮助其他人。我也努力做到这一点,但这是我的一段代码。我的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()

有关更多变体和帮助,请访问网站

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

如果这些答案都无效,您也可以尝试:

 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)

尽管我从未看到打印终端类型的实际请求,但这封信似乎有效。

我们鼓励您自己给出答案,因为这将有助于其他人在将来理解这个问题为什么需要它?请您解释一下为什么我们最终需要在这里给出出口tn.write('exit\n')??