【问题标题】:How to give commands inside telnet session using python如何使用 python 在 telnet 会话中发出命令
【发布时间】:2019-11-06 22:20:05
【问题描述】:

我正在编写 python 脚本来自动化模拟器中的某些任务...连接到模拟器命令是telnet localhost <port>

我通过os.system(telnet localhost <port>)给出的这个命令。

它正在工作。

模拟器正在运行:

正在尝试 ::1...
已连接到本地主机。
转义字符是 '^]'。
>

现在我必须在里面通过 python 给出命令,但我不能 在 this(>) 里面我必须给..我使用 telnet 命令但它不起作用。

#!/usr/bin/env python
import os,re,telnetlib
host = "localhost"
port = "1111"

tn = telnetlib.Telnet(host, port)
tn.write("exit")

这是示例代码,但它不起作用。

【问题讨论】:

  • 您似乎提到了两种打开 telnet 会话的不同方式,os.system('telnet localhost <port>')tn = telnetlib.Telnet(host, port)。第二种方式对我来说似乎更惯用,但你是说“它不起作用”?你能解释一下如何它不起作用吗?
  • 在连接到 telnet 后,我​​的模拟器将运行...我们必须在其中给出命令 > ....但无法使用 tn.write 写入

标签: python-3.x telnet telnetlib


【解决方案1】:

写入命令需要以字节为单位提供内容。试试这个:

import os,re,telnetlib

host = "google.com"
port = "80"

telnet_client = telnetlib.Telnet(host, port)
print('Connection established')

telnet_client.write(b'exit')
print('<END/>')

【讨论】:

  • 这用于连接到本地主机..但我正在使用 telnet localhost 2222 命令运行模拟器....在此命令之后尝试 ::1... 连接到本地主机。转义字符是'^]'。 > 它必须像这样,但我不明白
  • 你检查过防火墙和杀毒软件了吗?根据配置,他们可以拒绝连接。
【解决方案2】:

您可能需要将提示符告诉telnetlibread until,然后编写您要发出的命令。

import os,re,telnetlib
host = "localhost"
port = "1111"

tn = telnetlib.Telnet(host, port)
tn.read_until(b">", timeout=10) # <- add this line
# tn.read_until(b"> ", timeout=10) # if prompt has space behind
tn.write(b"exit\n")

这个问题可能对您也有帮助:Python Telnetlib read_until '#' or '>', multiple string determination?

【讨论】:

  • 我添加了该行,但我收到错误 .................................telnet。 read_until('>', timeout=10) File "/usr/lib64/python3.7/telnetlib.py", line 302, in read_until i = self.cookedq.find(match) TypeError: argument should be integer or bytes-像对象,而不是'str'
  • @lok​​eswari 您使用的是 Python 3,telnetlib 需要字节或整数,这是您遇到的错误。我已经相应地更新了我的答案。
  • 我没有得到任何错误使用这个..但是我的模拟器没有运行并且无法给出退出命令
猜你喜欢
  • 2022-05-13
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 2015-06-13
  • 2015-09-29
相关资源
最近更新 更多