Python Telnet连接路由器时异常终止,寻求解决方案
排查Telnet连接中途中断(WinError 10053)的建议
问题背景
开发路由器自动化配置程序,已通过GNS3的loopback接口实现Python telnetlib连接路由器。在某台路由器上运行正常,但切换到另一台后,执行少量命令就触发如下报错:
Traceback (most recent call last): File "C:\Licenta - program\test1\main.py", line 147, in <module> tn.write(b"ip add ") File "C:\Users\carme\AppData\Local\Programs\Python\Python39\lib\telnetlib.py", line 292, in write self.sock.sendall(buffer) ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
排查步骤
- 检查目标路由器的Telnet超时设置:部分路由器默认配置了Telnet会话超时,若命令执行间隔过长或单条命令处理耗时超过阈值,会主动断开连接。登录目标路由器,查看并调整
exec-timeout(IOS设备)类参数,比如设置exec-timeout 0 0可禁用超时。 - 规范命令发送格式与节奏:telnetlib发送命令时,必须在每条命令末尾添加换行符(
b"\n"),否则路由器可能无法识别命令,导致会话挂起后被中断。检查代码中tn.write的内容,比如将tn.write(b"ip add ")改为tn.write(b"ip add \n");同时避免短时间批量发送大量命令,可添加time.sleep(0.5)这类小延迟。 - 排查本地安全软件干扰:WinError 10053多数情况由本地防火墙、杀毒软件或其他网络安全工具主动中断连接导致。暂时关闭这类工具后测试连接,若恢复正常,需给Python程序或Telnet默认端口(23)添加放行规则。
- 对比两台路由器的配置差异:检查两台路由器的Telnet服务配置,比如是否开启
login/password验证、是否有ACL限制Telnet来源IP、是否启用了SSH共存时的Telnet优先级限制等。 - 添加会话心跳维护连接:若长时间无交互,本地TCP栈可能主动断开连接。可在代码中定期发送空字符或
b"\r"作为心跳包,比如每30秒发送一次,保持会话活跃。 - 查看路由器端日志:登录目标路由器,开启Telnet相关调试日志(如IOS设备执行
logging buffered debugging),查看连接中断时的系统日志,确认是路由器主动断开还是本地触发的中断。 - 更换自动化工具库:telnetlib功能较基础,可尝试
pexpect或netmiko这类专为网络设备自动化设计的库;或直接改用SSH协议,其稳定性与安全性远优于Telnet,能避免不少兼容性问题。
内容的提问来源于stack exchange,提问作者Chira Carmen
相关产品推荐
相关产品推荐

