【问题标题】:Python's telnetlib "read_until()" not receiving expected stringPython 的 telnetlib“read_until()”没有收到预期的字符串
【发布时间】:2017-01-13 19:51:36
【问题描述】:

python 新手,但我正在尝试自动打开一个 telnet 会话(使用内置的“telnetlib”库)到路由器中,执行一个简单的命令(“spc”),将输出打印到本地控制台,然后离开。

#!/usr/bin/python

import sys
import telnetlib

HOST="54.18.5.0"
PORT=55555

tn=telnetlib.Telnet(HOST, PORT)

tn.read_until("Escape character is \'^]\'.")
tn.write("\u001d")
tn.read_until("telnet>")
tn.write("mode char" + "\n")

tn.write("spc\n")

print tn.read_all()

我的问题似乎在于“read_until”函数。当我运行上述脚本时,它会挂起,直到键盘中断,此时我收到以下消息:

CTraceback (most recent call last):
File "./telnetMR.py", line 11, in <module>
tn.read_until("Escape character is \'^]\'.")
File "/usr/lib64/python2.7/telnetlib.py", line 294, in read_until
return self._read_until_with_poll(match, timeout)
File "/usr/lib64/python2.7/telnetlib.py", line 318, in _read_until_with_poll
else 1000 * call_timeout)

我假设“read_until()”没有收到任何东西,因此一直等到超时,但我不明白为什么。

(我已经使用“expect”编写了同样的脚本,它工作得很好,但我想看看我是否可以让它在 python 中工作以提高效率......所以任何关于发送八进制字符串的 cmets 都值得赞赏,但那是不是这个问题的目的)。

谢谢。

【问题讨论】:

    标签: python telnet telnetlib


    【解决方案1】:

    你的“问题”是这样的

    tn.write("\u001d")
    tn.read_until("telnet>")
    

    是您可以从 shell/命令行执行的操作,这是命令行客户端的一个功能。这就是 expect 起作用的原因,因为它会启动那个客户端。

    在这种情况下,使用 telnetlib,“你”是“客户端”,所以你必须向服务器“说 telnet”,这意味着你必须发送一些 IAC + [DO|DONT|WILL|WONT] + ... 序列,同样的事情命令行在您执行mode char 时执行,还有this 其他线程在讨论序列应该/可能是什么,但您也可以使用 tcpdump(或类似工具)检查命令行客户端在调用 @ 时发送的内容987654325@,(只是为了 100% 确定)。

    发送它的问题是:

    tm.sock.send(telnetlib.IAC+telnetlib.DO+ ...) # ... whatever the sequence is
    

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多