python telnetlib回显_python telnetlib模块安装实例

python telnetlib模块安装

python中telnetlib模块的使用

python下能支持telnet的模块telnetlib是内置模块,直接import就可以了,其基本的使用方法也是比较简单的。

#encoding=utf-8

def do_telnet(Host, username, password, finish, commands):

import telnetlib

'''''Telnet远程登录:Windows客户端连接Linux服务器'''

# 连接Telnet服务器

tn = telnetlib.Telnet(Host, port=23, timeout=10)

tn.set_debuglevel(2)

# 输入登录用户名

tn.read_until('login: ')

tn.write(username + '\n')

# 输入登录密码

tn.read_until('password: ')

tn.write(password + '\n')

# 登录完毕后执行命令

tn.read_until(finish)

for command in commands:

tn.write('%s\n' % command)

#执行完毕后,终止Telnet连接(或输入exit退出)

tn.read_until(finish)

tn.close() # tn.write('exit\n')

if __name__=='__main__':

# 配置选项

Host = '10.255.254.205' # Telnet服务器IP

username = 'administrator' # 登录用户名

password = 'dell1950' # 登录密码

finish = ':~$ ' # 命令提示符

commands = ['echo "test"']

do_telnet(Host, username, password, finish, commands)

其中port和timeout是可选的参数,而timeout的只是在初始化socket连接时起作用,而一旦连接成功后如果出现等待那就不会起作用了,比如使用read_until方式获取内容时返回的内容与指定的内容没有吻合,那么就会造成提示等待的情况,这时timeout是不会起作用的,而这个socket连接会一直保持着,永生不死。

那么如何解决这个问题呢,其实还有一种比较原始的方法,就是使用sleep方法来代替read_until方法,这样就不会出现种情况,因为到点就会自己输入,最多也就是最后得不到想要的结果,但是这个方式很不稳定,兼容性也不好;另一种方法是使用线程来启动这个函数,然后对子线程进行超时设置,这样就可以达到间接控制这个telnet连接的目的了。

import threading

pars = replace_db_keyworlds(vars_dict, pars)

configs = pars.split(r'@')

host = configs[0].encode()

user = configs[1]

passwd = configs[2]

finish = configs[3]

commands = configs[4].split(r'\n')

th1 = threading.Thread(target=do_telnet, args=(host.encode('utf-8'), user.encode('utf-8'), passwd.encode('utf-8'), finish.encode('utf-8'), commands))

th1.start()

th1.join(20) ##20秒超时时间

还有一个需要注意的是,传递给Telnet方法的字符串都会被解一次码,所以如果你传递过去需要write的字符串是已经解码的unicode的话,那么就会报错的,所以在传递发送的字符串之前还是先编成utf-8为妥,

python telnet远程登录端口交互执行命令

端口交互在代码中会用到telnetlib,python sys模块

#!/usr/bin/env python

#这个usr/bin/的作用及好处,在www.iplaypy.com之前的文章中有介绍过,不清楚的朋友们可以再去温习下。

#下面开始正式的代码段

def telnetdo(HOST=None, USER=None, PASS=None, COMMAND=None): #define a function

import telnetlib, sys

if not HOST:

try:

HOST = sys.argv[1]

USER = sys.argv[2]

PASS = sys.argv[3]

COMMAND = sys.argv[4]

except:

print "Usage: telnetdo.py host user pass command"

return

msg = ['Debug messages:\n'] #

tn = telnetlib.Telnet() #

try:

tn.open(HOST)

except:

print "Cannot open host"

return

#msg.append(tn.expect(['login:'], 5)) #

tn.read_until("login:")

tn.write(USER + '\n')

if PASS:

#msg.append(tn.expect(['Password:'], 5))

tn.read_until("Password:")

tn.write(PASS + '\n')

#msg.append(tn.expect([USER], 5))

tn.write(COMMAND + '\n')

tn.write("exit\n")

#msg.append(tn.expect(['#'], 5))

tmp = tn.read_all()

tn.close()

del tn

return tmp

if __name__ == '__main__':

print telnetdo()

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 答1: Pythontelnetlib模块可以用于与远程主机进行交互,包括发送命令和读取。要读取,可以使用telnetlib的read_until()方法,该方法会等待直到读取到指定的字符串或超时。例如,以下代码可以连接到远程主机并读取: ```python import telnetlib HOST = "example.com" user = "username" password = "password" tn = telnetlib.Telnet(HOST) tn.read_until(b"login: ") tn.write(user.encode('ascii') + b"\n") if password: tn.read_until(b"Password: ") tn.write(password.encode('ascii') + b"\n") tn.read_until(b"$ ") tn.write(b"ls\n") print(tn.read_until(b"$ ").decode('ascii')) ``` 在这个例子中,我们连接到主机example.com并发送用户名和密码。然后,我们等待提示符"$ ",并发送命令"ls"。最后,我们读取并将其打印出来。注意,我们使用了encode()方法将字符串转换为字节串,并使用decode()方法将字节串转换为字符串。 ### 答2: Python中的telnetlib模块是实现Telnet协议的标准库之一,可以用于连接Telnet服务器执行命令,并实现读写操作。在使用telnetlib模块进行连接操作时,通常会遇到读取问题。 是指当我们在终端上输入命令后,服务器会将该命令发送终端上进行示,以便用户确认已输入的命令是否正确。在telnetlib模块中,数据是通过read_until()函数读取的。 在使用read_until()函数读取数据之前,需要先设置telnet服务器的模式。通过set_option_negotiation_callback()函数进行设置: ``` def set_echo_mode(tn): def set_echo(option, remote): if option == telnetlib.ECHO: tn.sock.sendall(telnetlib.IAC + telnetlib.WONT + telnetlib.ECHO) tn.set_option_negotiation_callback(set_echo) ``` 上述代码中,set_echo_mode()函数会为telnet对象tn设置模式,通过set_option_negotiation_callback()函数将关闭。 在设置模式之后,可以使用read_until()函数读取数据。read_until()函数可以读取数据直到指定字符或字符串出现为止。 ``` tn.write(b"ls\r\n") output = tn.read_until(b"\n") print(output.decode()) ``` 上述代码中,write()函数向服务器发送了ls命令,read_until()函数则会等待服务器出命令输出并返数据。最后使用decode()函数将数据转换为字符串类型,并打印出来。 除了read_until()函数以外,还可以使用read_very_eager()读取所有可用的数据,或者使用read_some()读取指定数量的数据。 总体来说,在使用pythontelnetlib模块进行读取时,需要先设置模式,然后使用read_until()、read_very_eager()或者read_some()等函数读取数据。这样,就可以轻松地实现Telnet客户端的读取功能。 ### 答3: Pythontelnetlib库提供了许多使用telnet命令和交互式应用程序进行通信的功能。其中一个常见的使用是从远程设备读取数据。 在使用telnetlib库时,使用Telnet类可以与远程设备(如路由器、交换机等)建立连接。我们可以利用read_until()方法读取来自远程设备的数据。 read_until()方法提供了一个字符串参数,该参数表示方法应该读取哪个字符串作为读取操作的结束标识符。如果在读取数据时遇到该字符串,则该函数将返所有读取数据。如果读取操作超时,则函数将引发异常。以下是示例代码: import telnetlib tn = telnetlib.Telnet('192.168.1.1') # 先建立连接 tn.write(b'username\n') tn.write(b'password\n') tn.write(b'show version\n') data = tn.read_until(b'Username:') # 读取“Username:”结束标识符之前的所有数据 # 示读取到的数据 print(data.decode('utf-8')) 在示例代码中,首先使用Telnet类连接到远程设备。然后,将用户名、密码和show version命令写入设备。最后,使用read_until()方法读取所有来自远程设备的数据,直到读取到“Username:”字符串为止。使用decode('utf-8')方法将读取的数据从字节串转换为字符串,然后将其示在控制台上。 此外,还可以在Telnet类的构造函数中设置超时。如果读取操作花费的时间超过此超时时间,则函数将引发异常,否则将返所有读取数据。 总之,Pythontelnetlib库可用于从远程设备中读取数据。使用read_until()方法读取数据时,请设置适当的结束标识符,并在需要时设置超时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值