使用Python的telnetlib模块遇到问题
我有一个简单的聊天服务器,可以通过telnet轻松连接。只需要输入主机和端口,就可以在没有任何额外认证的情况下开始输入服务器能理解的命令。为了模拟用户的流量,我想创建一个脚本,打开telnet,连接到服务器,然后立即开始发送命令给服务器。我最开始尝试用批处理脚本来实现,但遇到了太多问题,所以我决定使用Python的telnetlib模块。现在我的脚本看起来是这样的:
import telnetlib
myTel = telnetlib.Telnet('XXX.XXX.XXX.XXX', XXXX)
myTel.write('login')
myTel.write('move room')
myTel.write('say message')
myTel.write('exit')
myTel.write('logout')
其实就是这么简单,脚本运行得也没有错误。不过,如果我已经在另一个telnet会话中手动登录到服务器,我就看不到这个脚本进入主聊天室或者发送聊天消息,这让我觉得可能出现了问题。如果我手动启动两个telnet会话,我可以很轻松地在这两个会话之间发送和接收消息,所以我认为手动的telnet会话应该能够接收到脚本启动的会话发送的消息。
有什么想法吗?
3 个回答
0
我会用read_until来检查服务器是否准备好接收命令。下面是一个用telnet与思科交换机对话的示例:
from telnetlib import Telnet
PASSWD = "mypass"
t = Telnet(switch)
t.read_until("Password: ", 2)
t.write(PASSWD + "\r\n")
在这里,我会等到出现密码提示后再发送密码。
0
在你的代码中,你是向服务器发送数据,但要接收数据,最终你得使用这个库中的一些读取方法。如果你想看看一个带有“读取线程”的客户端示例,可以参考这篇博客文章:http://hahong.org/blog/posts/261。
另外,也可以尝试:
myTel.write('login\n')
.. 还有换行符。
3
也许加个换行会有帮助?
myTel.write('login\n')
我还建议你使用一些网络嗅探工具(比如Wireshark)来确认你发送的内容是否真的是你想要的。