地址: 铜陵市岂轿之涧352号 邮箱: hallowed@mac.com 工作时间:上午9点-下午8点

公司动态

  • 首页
  • Our News
  • python使用telnetlib模块登录交换机

python使用telnetlib模块登录交换机

2025-04-01 19:54:48


telnetlib 模块提供一个实现Telnet协议的类 Telnet。

Telnet 表示到 Telnet 服务器的连接. 实例初始化后默认不连接;必须使用 open() 方法来建立连接。或者, 可选参数 host 和 port 也可以传递给构造函数,在这种情况下,服务器的连接将在构造函数返回前建立。可选参数 timeout 为阻塞操作(如连接尝试)指定一个以秒为单位的超时时间(如果没有指定,将使用全局默认设置) 。


整理了一个实例,代码如下所示:

import telnetlib

import time

import logging


if __name__ == '__main__':

host_ip = '192.168.198.23'

command = 'dis version'


username = input("Enter your remote account: ")

password = input("Enter your Password: ")


tn = telnetlib.Telnet()

tn.open(host_ip, port=23)


tn.read_until(b'login: ', timeout=10)

tn.write(username.encode('ascii') + b'\n')

tn.read_until(b'Password: ', timeout=10)

tn.write(password.encode('ascii') + b'\n')


time.sleep(2) # 延时两秒再收取返回结果,给服务端一定的响应时间


str_command = tn.read_very_eager().decode('ascii')

if 'Login incorrect' not in str_command:

logging.warning('%s登录成功'%host_ip)

else:

logging.warning('%s登录失败,用户名或密码错误'%host_ip)


tn.write(command.encode('ascii') + b'\n')

time.sleep(2)


str_command = tn.read_very_eager().decode('ascii') #得到命令结果

logging.warning('命令执行结果:\n%s' % str_command )


jbo竟博官网

执行后的结果如下图所示:



备注1:

Telnet 对象

Telnet 实例有以下几种常用方法:


Telnet.read_until(expected, timeout=None)

读取直到遇到给定字节串 expected 或 timeout 秒已经过去。


当没有找到匹配时,返回可用的内容,也可能返回空字节。如果连接已关闭且没有可用的数据,将触发 EOFError。

python使用telnetlib模块登录交换机


Telnet.read_all()

读取数据,直到遇到 EOF;连接关闭前都会保持阻塞。


Telnet.read_some()

在达到 EOF 前,读取至少一个字节的数据。如果命中 EOF,返回 b''。如果没有可用的数据,则阻塞。


Telnet.read_very_eager()

在不阻塞 I/O 的情况下读取所有的内容(eager)。


如果连接已关闭并且没有可用的数据,将会触发 EOFError 。如果没有熟数据可用返回 b'' 。除非在一个 IAC 序列的中间,否则不要进行阻塞。


Telnet.read_eager()

读取现成的数据。


如果连接已关闭并且没有可用的数悉数据,将会触发 EOFError 。如果没有熟数据可用返回 b'' 。除非在一个 IAC 序列的中间,否则不要进行阻塞。


Telnet.open(host, port=0[, timeout])

连接主机。第二个可选参数是端口号,默认为标准 Telnet 端口(23)。可选参数 timeout 指定一个以秒为单位的超时时间用于像连接尝试这样的阻塞操作(如果没有指定,将使用全局默认超时设置)。


不要尝试重新打开一个已经连接的实例。


触发 auditing event telnetlib.Telnet.open ,参数为 self,host,port。


Telnet.close()

关闭连接对象。


Telnet.write(buffer)

向套接字写入一个字节字符串,将所有 IAC 字符加倍。如果连接被阻塞,这可能也会阻塞。如果连接关闭可能会触发 OSError。


触发 auditing event telnetlib.Telnet.write ,参数为 self,buffer。


备注2:在windows下面输入telnet不是内部或外部命令的解决方案


解决方案:




现在就可以用telnet功能了


订阅我们的时事通讯并获取最新消息