使用迭代命令编写 Telnet 会话脚本

Script Telnet session with iterative command

我最熟悉 powershell 和 python,因此使用其中任何一个的解决方案都是理想的。

所以我遇到了这样一种情况:一台带有串口转以太网适配器的旧设备重新启动并脱离了我们的网络。我用交叉电缆连接并使用 wireshark 找到它的 IP,最后看到一个 arp 请求(206.250.11.x - 显然不是之前设置的)portscan 给了我几个选项,一个被拉起我正在寻找的 telnet 提示符。

我能够连接并尝试了我们的默认密码 - 连接后提示输入 4 位密码 - 但 none 有效。

我想编写一个 python 脚本来启动会话,稍等片刻,输入第一个 pin:0000 看看它是否显示 "Connection to host lost.",如果没有,报告它是哪个 pin用过。

我有一个前段时间写的 ping 程序,它使用 subprocess.Popen,我认为我可以调整它以启动 telnet 会话:

telneter = subprocess.Popen(["telnet", 主机名, "9999"], stdout=subprocess.PIPE).stdout.read() 我还看到有某种可以导入的 python telnet 模块。

如果我有一个名为 'pins.txt' 的文件,该文件包含 0000-9999,每行一个条目,我怎样才能最好地执行以下操作:

1) 启动 Telnet 到 address/port 2) 等到它提示输入 pin(通常少于一秒) 3) 输入 pins.txt 文件的第一行 4) 检查是否会话结束并打印 "Connection to host lost" 5) 报告哪个 pin 没有失败并且会话保持活动状态?

非常感谢您的帮助!我会做更多的工作,但这是我们希望尽快 运行 再次进行的事情,所以我还没有做足够的研究。

编辑:我试图连接另一侧的 25 针串行转换器,但被适配器击中,因此不再是一个选项。

Edit2:我也尝试过将 telnetlib 与 telnetlib.Telnet(host) 一起使用,但我无法取回数据流,也无法重新启动会话以遍历 pin 列表。

使用 pexpect for such things when one wants to use Python for something that should be interactive. pexpect is based on the concept of expect 相当普遍。

它与您习惯使用的 popen 非常相似,只是它消除了很多粗糙的边缘,并带有实用程序,让生活更轻松。

一般格式为

x = pexpect.spawn("telnet")
x.expect("Connected")
x.sendline("thing")
x.expect("Connection ended")

This example 与您想要的有些相似,只是它将永远 运行。我假设您可以根据自己的经验轻松修改它以执行您想要的操作。