如何使用empty与telnet交互

Posted

技术标签:

【中文标题】如何使用empty与telnet交互【英文标题】:How to interact with telnet using empty 【发布时间】:2016-12-31 16:55:51 【问题描述】:

我需要替换一个非常简单的expect 脚本,如下所示:

#!/usr/bin/expect
spawn telnet 192.168.1.175
expect 
    "assword" send "lamepassword\r"

interact

使用 empty 的等效 bash 脚本,如下所示:

#!/bin/bash
empty -f -i in -o out telnet 192.168.1.175
empty -w -i out -o in "assword" "lamepassword\n"

之后我需要用户使用 telnet 来interact,我不知道该怎么做。我想到的最接近的事情是将stdinstdoutnamed pipes 绑定使用socat - in 之类的东西。任何建议都非常受欢迎!

【问题讨论】:

我唯一的问题是,你为什么使用 telnet? 因为用户与之交互的主机运行的是telnet。 我试过cat out & cat /dev/stdin >in,它可以工作,但它有一个额外的换行符,制表符完成不起作用,ctr+c 终止cat 而不是正在运行的主机进程。我试图说服socat按照这些需求行事。 【参考方案1】:

我试过cat out & cat /dev/stdin >in,它有效,但它有一个额外的 换行,制表符完成不起作用,ctr+c 终止 cat 和 不是正在运行的主机进程。我试图说服socat采取行动 根据这些需求。

使用socat 将键盘输入传输到telnet 进程是个好主意。示例:

cat out & socat -u -,raw,echo=0 ./in

为了允许Ctrl-C终止socat,添加escape=3

cat out & socat -u -,raw,echo=0,escape=3 ./in

但请注意,这不会终止telnet 会话,因为它确实以守护程序模式启动,因此您可以通过再次执行socat 重新连接到telnet。要结束telnet,你可以直接logout

【讨论】:

我一直在寻找 socat 参数的正确组合,而您建议的组合可以提供我需要的确切行为(制表符完成、命令历史记录、行编辑等)。谢谢你。我刚刚用 escape=0x1a 替换了escape=3,所以我可以用ctrl+z 退出,并且仍然可以像往常一样终止任何主机进程,ctrl+c

以上是关于如何使用empty与telnet交互的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 windows 自带的 telnet 服务器服务来监听端口?

扫描到telnet弱口令,但是在dos里面telnet登陆,输入用户名,密码直接回车,出现%Password empty怎么回事

将 DKIM 与 SMTP TELNET 连接一起使用

Python - Qt。如何为 Telnet 或 ssh 服务器交互制作终端窗口

在启动的 telnet 会话中使用期望脚本

如何使用telnet测试端口号