【问题标题】:Using Python telnet lib w/o logout command使用没有注销命令的 Python telnet lib
【发布时间】:2014-03-01 19:26:16
【问题描述】:

我正在尝试使用 python 的 telnetlib 模块从远程设备获取信息。不幸的是,远程设备似乎没有“注销”类型的命令。因此,您必须使用 CTRL-] 手动关闭连接(手动远程登录时)。我尝试使用 Telnet.close() 但似乎没有返回任何数据。

建议?

HOST = "172.16.7.37"
user = "Netcrypt"
password = "Netcrypt"

tn = telnetlib.Telnet(HOST)

tn.read_until("User: ")
tn.write(user + "\n")
if password:
   tn.read_until("Password: ")
   tn.write(password + "\n")

tn.write("session \n")

print tn.read_until("NC_HOST> ")

tn.close()

【问题讨论】:

  • 请通过编辑原始问题并使用那里提供的代码格式化工具来添加代码。
  • “似乎没有返回任何数据”是什么意思?你期望它在哪里返回一些东西?它必须一直执行到最后一行,否则 read_until 不会返回。

标签: python telnetlib


【解决方案1】:

您是否尝试将 CTRL+] 的 ASCII 字符写入 telnet 连接?

tn.write('\x1d')

【讨论】:

  • 我会用tn.write('quit\n') 关注它吗?
  • 'quit' 对你连接的远程登录服务器来说是一个有效的命令吗?如果您需要使用 Ctrl-] 手动关闭连接,那么编写 '\x1d'(这是 Ctrl-] 的 ASCII 值)应该可以解决问题。
  • 如果我使用tn.write('\x1d') 它会终止连接。但是如果我在它之后添加print tn.read_all(),它就会挂起。我看不到如何从我发出的“会话”命令中获取信息
  • 好吧 read_eagerread_lazy 不会挂起,但它们也不会打印任何东西
  • 嗯,这表明那时没有任何东西可以阅读。在收到您的所有数据之前,您不应该发送\x1d,因为我想它会立即关闭连接。
【解决方案2】:

我最终不需要任何这些。交易是我必须阅读提示,发出我的命令,阅读直到下一个提示。永远不需要 read_all()。

这是工作代码:

import telnetlib

HOST = "172.16.7.37"
user = "Netcrypt"
password = "Netcrypt"

tn = telnetlib.Telnet(HOST)

tn.read_until("User: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

    tn.read_until('NC_HOST>')

    tn.write("session\n")

    data = tn.read_until('NC_HOST>')

print data

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 2017-12-20
    • 2015-06-17
    • 2020-05-12
    • 2018-12-13
    • 2017-07-19
    • 2017-04-13
    • 2015-02-28
    • 1970-01-01
    相关资源
    最近更新 更多