【问题标题】:Telnetlib python write() not working as expectedTelnetlib python write() 没有按预期工作
【发布时间】:2014-10-11 04:48:12
【问题描述】:

我正在尝试自动化配置 linux 服务器时使用的一组 telnet 命令。我目前正在尝试为此使用 Python 2.7,并认为 telnetlib 将是要走的路。 但不幸的是,它并没有像我预期的那样工作。

tn = telnetlib.Telnet(ip, port)
print tn.read_until("SysCLI>")
tn.write("help" +"\n")
print tn.read_until("Registered components are:", 10)

这将在 10 秒后终止,只打印第一行:“SysCLI>”。 我尝试了“回车”和“换行”的不同组合,包括“\r”、“\r\n”、“\n\r”,它们似乎都没有帮助。有人对我缺少什么有建议吗?

更新:我在另一台服务器上尝试了我的代码,它似乎工作正常:

ip = "www.google.com"
port = 80

tn = telnetlib.Telnet(ip, port)
tn.write("Get / HTTP/1.1" +"\n" +"\n")

print tn.read_some()

所以我认为我的问题是服务器需要一些特殊字符来发送消息。

【问题讨论】:

  • 使用tn.read_some() 而不是tn.read_until 来确保tn.write 工作与否。 read_until 将等待,read_some 只是阅读一些内容并返回。当您不确定结果时,此方法会很有帮助。
  • 好建议。但在这种情况下,我确切地知道预期的结果,因为我仍然可以手动完成。但是我确实尝试过,但它什么也没返回,与 read_until() 一样
  • 你的服务器不使用什么操作系统?
  • 服务器正在使用自制的 Linux 发行版。
  • 我没有任何建议。也许您可以尝试找出您正在使用的外壳。是不是编码问题造成的?您也可以尝试使用 tcp dump 来检查客户端和服务器之间的传输。

标签: python telnet telnetlib


【解决方案1】:

显然我对系统有点误解了。在初始连接之后,这本身就不再是 telnet 会话,而实际上是在服务器上运行的应用程序。这就是我看到 SysCLI 提示的原因。所以这可能是我不能使用 telnetlib 的原因。

相反,我会尝试使用 subprocecss.Popen() 通过终端运行会话。

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 2012-05-09
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多