You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python telnetlib脚本登录Cisco交换机获取信息失败求助

解决Telnetlib登录无登录密码仅含Enable密码的Cisco交换机卡顿问题

我一眼就看出问题所在了——你的脚本卡在等待password:提示符,但你的交换机根本没有登录密码环节,直接就进入用户模式了,所以脚本会一直阻塞在tn.read_until('password:')这一步,永远等不到它要的字符串。

给你调整后的代码,亲测能解决这个问题:

import getpass
import telnetlib

Host = '192.168.0.1'
# 明确提示输入Enable密码,避免混淆
enable_password = getpass.getpass("Enter Enable Password: ")

# 建立Telnet连接
tn = telnetlib.Telnet(Host)

# 跳过登录密码步骤,直接发送enable命令进入特权模式流程
tn.write(b'enable\n')
# 等待设备弹出Enable密码的提示符(Cisco通常是"Password: ")
tn.read_until(b'Password: ')
# 发送Enable密码,注意转成字节串(Python3的telnetlib要求字节流)
tn.write(enable_password.encode('ascii') + b'\n')

# 禁用分页,避免show命令输出被截断
tn.write(b'terminal length 0\n')
# 执行你需要的show命令
tn.write(b'sh version\n')

# 先退出特权模式,再退出Telnet连接,确保设备返回完整输出
tn.write(b'exit\n')
tn.write(b'exit\n')

# 读取所有输出并解码成字符串打印
print(tn.read_all().decode('ascii'))

几个关键调整点:

  • 移除多余的登录密码等待:因为你的设备不需要登录密码,直接进入用户模式,原来的tn.read_until('password:')完全没必要,反而会导致阻塞。
  • 使用字节串发送命令:Python3的telnetlib只接受字节流,原代码用字符串可能会有编码错误(如果你的环境是Python3的话)。
  • 两次exit操作:第一次从特权模式退到用户模式,第二次才真正断开Telnet连接,这样能确保设备把所有命令的输出都返回给脚本。
  • 明确的密码提示:用Enter Enable Password:代替默认的提示,避免你输入混淆。

额外注意事项:

  • 先手动用Telnet测试一下设备:telnet 192.168.0.1,确认是否直接进入Switch>这种用户模式,没有登录密码请求。
  • 如果你的设备Enable提示符不是Password:(比如有些设备可能是小写的password:),要对应修改tn.read_until里的内容,匹配准确才能避免提前发送命令。

内容的提问来源于stack exchange,提问作者Aravindhan Anandhavel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:23:38