【问题标题】:Having trouble with Python's telnetlib modulePython 的 telnetlib 模块遇到问题
【发布时间】:2010-12-29 00:58:56
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: python telnet


    【解决方案1】:

    在您的代码中,您写入服务器,但为了接收数据,您最终必须使用库的read methods 之一。要查看具有“读取线程”的客户端的示例实现,请参阅此博客文章:http://hahong.org/blog/posts/261

    fn。也可以试试:

    myTel.write('login\n')
    

    .. 带有换行符。

    【讨论】:

    • 下一句是:“或者,可以将主机名和可选端口和超时传递给构造函数,在这种情况下,将在构造函数返回之前建立与服务器的连接。”
    • 我在脚本中添加了一些 read_until 命令,并在每个写入命令的字符串中添加了一个 \n ,但仍然没有。还有其他想法吗?
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      也许添加换行符会有所帮助?

      myTel.write('login\n')
      

      我还建议使用一些网络嗅探工具(即 Wireshark)来验证您确实发送了您想要的内容。

      【讨论】:

        猜你喜欢
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        • 2013-06-14
        • 2011-01-17
        相关资源
        最近更新 更多