2-2 服务器端配置telnet
Telenet协议介绍
telnet协议介绍:
Telnet在1969年开发出来,在RFC 15定义,是最早形成的互联网协议之一。
Telnet是TCP/IP协议族中的一种应用层协议,使用于互联网及局域网中,使用虚拟终端的形式,提供双向、以文字字符串为主的命令行接口交互功能。
是互联网远程登录服务的标准协议和主要方式,常用于服务器的远程控制,可供用户在本地主机执行远程主机上的工作。
优点: 简单。
缺点: 所传输的资料并未加密,账号和密码等敏感资料容易会被窃听,因此此协议逐渐被淘汰,改用更安全的SSH协议。
实验设计:
在eNSP中使用交换机设备S5700,配置vlan,配置IP,通过Cloud设备暴露通讯使之与物理机互通。
服务端设备开启telnet服务。
客户端使用Python telnetlib库进行连接验证。
确定S5700已配置IP和与物理机连通
快速重复2-1节的S5700配置IP和Cloud与物理机通讯实验。
或直接下载eNSP工程导入:
解压缩老师分发的eNSP工程zip压缩包,eNSP界面左上角/打开/选择工程文件入口文件.topo后缀的文件。
⏬下载地址: eNSP工程-unit2-S5700与物理机通讯后.zip
验证:
ping 192.168.56.100
服务器开启telnet服务
配置telnet协议和WindowsTelnet客户端测试,视频结合下面两段图文看。
设备: 已配置vlan和IP的S5700交换机。
进入配置模式
配置vty伪终端: (Virtual Teletypewriter),在Linux系统中被称为tty。服务器操作系统中直接打开的命令行是“真”终端。通过客户机上的命令行远程连到物理服务器上,叫做“伪终端”。 华为vty伪终端默认有5个,后面可能会用windows上的telnet客户端和python作为客户端连接,因此保险起见5个伪终端都要设置。参数0 4表示从第一个设置到第五个。
设置伪终端登录方式为密码登录
设置密码为Huawei@123
设备防火墙方通入方向、telnet的请求。
用户权限分为3大等级,15细分等级,数字越大权限越高。相当于linux上的root用户。这样方便执行后续命令和测试。
退出伪终端相关设置
开启telnet协议。这句话也可以放最开头。
代码主要关于设置伪终端,确保客户端的请求能正常进来。设备自带telnet软件,只需一行命令就能开启。
<Huawei> system-view
[Huawei] user-interface vty 0 4
[Huawei-ui-vty0-4] authentication-mode password
[Huawei-ui-vty0-4] set authentication password simple Huawei@123
[Huawei-ui-vty0-4] protocol inbound telnet
[Huawei-ui-vty0-4] user privilege level 15
[Huawei-ui-vty0-4] quit
[Huawei] telnet server enable
Windows自带的telnet客户端连接测试
(选做,可略过)
Windows自带telnet协议客户端。这是成熟正确的工具,如果连不上,则确定服务端网络设备配置有误;
如果直接进行Python telnetlib库测试,失败,则不能完全确定问题出在服务端还是客户端代码有误。
连接 
输入密码(输入密码时无*号提示,注意输入法英文状态,密码Huawei@123要输入正确。)

发现已经登录进设备了,可以像在"真终端"中一样输入命令
Python客户端telnetlib连接测试
实验目的:用telnetlib库进行客户端连接测试,如果连上,说明服务端S5700 IP可达、telnet协议配置正确。 连上后输入密码鉴权,输入命令,接收设备端回显信息,那么理论上就可以通过更复杂的py脚本控制多台网络设备。
import telnetlib # 内置库。3.13解释器版本移除,目前为不建议状态,但代码最简单和典型。
host = '192.168.56.100' # 服务端IP
password = 'Huawei@123' # 服务端telnet协议密码
port = 23 # telnet协议默认23端口
tn = None
try:
# 实例化客户端类,连接服务器。这行最为核心,不加try语句块的情况下写完这行就可以运行,不报错就是整章实验基本成功。
tn = telnetlib.Telnet(host=host, port=23, timeout=5)
# 根据Windows上客户端的测试,请求连接后服务端回显信息为"Password:"并等待用户输入,因此接收回显信息并查找这个特征。
tn.read_until(b'Password:')
# 输入密码
# 由于这个库比较老比较偏低层,传入的参数类型都为字节类型。\n换行表示回车。
tn.write(password.encode(encoding='ascii') + b'\n')
# 监测到"<Huawei>"即为通过telnet协议登录vty伪终端成功,可以操控服务端。
# 那么我们之前在eNSP直接双击就能登录设备用的是什么协议呢?那是"真终端",操作系统直连的显示器。
# 后面几章将通过SSH协议登录
print(tn.read_until(b'<Huawei>').decode('ascii'))
tn.write('display user-interface'.encode('ascii') + b'\n')
print(tn.read_until(b'UIs').decode('ascii'))
except TimeoutError as e:
print(e)
finally:
# 在大多数情况下,Python程序结束时会自动回收变量、关闭文件句柄。
# 但在telnet库测试中我发现如果开始几次不正确,那么5个vty伪终端被用尽并且不会自动释放,
# 即使后面代码调对了也不会运行成功。因此在finally语句块中确保执行.close()。
tn.close()
最终结果

08 三月 2025