使用Python3.5 telnetlib发送数据无响应问题求助
嘿,我来帮你捋捋这个问题哈!你遇到的核心问题其实是对Windows下Telnet的功能理解有点偏差,咱们一步步拆解:
1. Windows启用的Telnet是客户端,不是服务器!
这是最关键的点:你在Windows功能里开启的telnet只是客户端工具——它的作用是让你连接远程的Telnet服务器,而不是在本地启动一个监听端口的Telnet服务。
所以你在cmd里输入telnet localhost时,其实是在尝试连接本地的Telnet服务器,但根本没有这个服务在运行,所以才会卡在空白界面(本质是在等待连接);而你的Python代码尝试连接localhost:23(Telnet默认端口),大概率是连接失败,但你没加错误处理,程序直接悄悄退出了,自然看不到任何输出。
2. 先验证:本地有没有Telnet服务在跑?
你可以打开命令提示符,输入这条命令检查23端口是否被监听:
netstat -ano | findstr ":23"
如果没有任何输出,就说明确实没有Telnet服务器在运行,这就是问题根源。
方法一:开启Windows自带的Telnet服务器(需管理员权限)
Windows其实藏着Telnet服务器组件,但默认没安装。按以下步骤操作:
- 按下Win+X,选择「Windows PowerShell(管理员)」
- 输入命令安装Telnet服务器:
dism /online /enable-feature /featurename:TelnetServer - 启动Telnet服务:
net start tlntsvr
启动后再用刚才的netstat命令检查,就能看到23端口被监听了。这时候你再打开cmd输入telnet localhost,会看到登录提示,运行你的Python代码后,Telnet客户端就能收到“Hello World!”了。
方法二:用Python自己写个极简Telnet服务器测试
如果你只是想快速验证Telnetlib的发送功能,不如自己写个简单的服务器脚本,比如:
import socket HOST = 'localhost' PORT = 23 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() with conn: print(f"已连接来自 {addr} 的客户端") while True: data = conn.recv(1024) if not data: break print(f"收到数据: {data.decode('utf-8')}") # 可选:把收到的数据回显给客户端,这样Telnet窗口也能看到 conn.sendall(data)
先运行这个服务器脚本,再打开cmd输入telnet localhost,最后运行你的Telnetlib客户端代码——不仅服务器控制台能看到“Hello World!”,Telnet窗口也会收到回显哦。
方法三:检查你的Python Telnetlib代码是否正确
你的客户端代码可能缺了异常处理或者发送格式不对,给你一个标准的示例:
import telnetlib HOST = "localhost" PORT = 23 try: tn = telnetlib.Telnet(HOST, PORT, timeout=5) tn.write(b"Hello World!\n") # 注意加换行符,很多服务器需要换行才会处理数据 tn.close() except Exception as e: print(f"出错啦: {e}")
加上异常处理后,如果连接失败(比如没开服务器),你会看到类似「Connection refused」的错误提示,就能立刻定位问题了。
你用Netcat客户端也无效,原因和Telnet一样:你只打开了Netcat客户端,没启动Netcat服务器。比如在cmd里输入这条命令启动Netcat服务器监听1234端口:
nc -l -p 1234
然后修改你的Python代码连接localhost:1234发送数据,就能在Netcat窗口看到输出了。
内容的提问来源于stack exchange,提问作者ParmuTownley

