4

我有一个基本的聊天服务器,可以通过 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 会话应该从脚本启动的会话中接收消息。

有任何想法吗?

4

3 回答 3

3

Perhaps adding a newline would help?

myTel.write('login\n')

I'd also recommend using some network sniffing tool (i.e. Wireshark) to verify that you're really sending what you intended.

于 2009-12-22T09:13:04.623 回答
0

In your code, you write to the server, but in order to receive data, you'll eventually have to one of the read methods of the library. To see an example implementation of a client with a 'reading thread', see this blog post: http://hahong.org/blog/posts/261.

fn. Also try:

myTel.write('login\n')

.. with newlines.

于 2009-12-22T09:09:30.580 回答
0

我会使用 read_until 来检查服务器是否准备好接收命令这里是一个使用 telnet 与 cisco 交换机对话的示例:

from telnetlib import Telnet
PASSWD = "mypass"

t = Telnet(switch)
t.read_until("Password: ", 2)
t.write(PASSWD + "\r\n")

在这里,我在发送密码之前等待密码提示。

于 2009-12-22T09:19:14.347 回答