用于解析 telnet 消息并退出的 Linux 脚本

Posted

技术标签:

【中文标题】用于解析 telnet 消息并退出的 Linux 脚本【英文标题】:Linux script to parse telnet message and exit 【发布时间】:2012-04-27 16:59:54 【问题描述】:

我正在连接一个 telnet 监听器。 Telnet 服务器每秒发送“1234”。我想阅读消息“1234”并关闭远程登录会话。下面是我的代码,但它不起作用。

#!/bin/bash
telnet 192.168.10.24 1234
read $RESPONSE
echo "Response is"$RESPONSE
echo "quit"

如何自动读取 telnet 消息?

【问题讨论】:

【参考方案1】:

下面给出最简单最简单的方法。

sleep <n> | telnet <server> <port>

n - 自动退出前的等待时间(以秒为单位)。它可能是小数,如 0.5。请注意,某些必需的输出可能不会在指定的等待时间内返回。所以我们可能需要相应增加。

server - 目标服务器 IP 或主机名。

port - 目标服务端口号。

你也可以像这样将输出重定向到文件,

sleep 1 | telnet <server> <port> > output.log

更新 1#: 如果远程主机不接受也不丢弃连接请求,上述方法可能不起作用。在这种情况下,以下方法有效:

RESPONSE=$(timeout 5 telnet 192.168.10.24 1234)

【讨论】:

管道睡眠。天才。这是最好的答案。 这对我有用,因为我使用的是代理链。你今天教会了我一些新东西。【参考方案2】:

您可以使用内部 TCP 机制:

#!/bin/bash

exec 3<>/dev/tcp/127.0.0.1/80
# echo -en "eventualy send something to the server\n" >&3
RESPONSE="`cat <&3`"
echo "Response is: $RESPONSE"

或者您可以使用 nc (netcat),但请不要使用 telnet!

【讨论】:

谢谢!有效!但是“3”和“cat &lt;&amp;3”是什么?他们是为了将 STDIN 引导到 RESPONSE 吗? 您可以查看 bash 手册页上的 REDIRECTION 段落,了解 /dev/tcp、exec 和 的工作方式。实际上,您是在请求 bash 在同一个 shell 上打开文件描述符 #3 以进行读取和写入,并将其附加到 127.0.0.1 端口 80 上的 TCP 流。【参考方案3】:

将输出重定向到文件并从文件中读取

telnet [ip-address] > /tmp/tempfile.txt

【讨论】:

它正在工作,但我收到了一些不必要的字符串,例如“正在尝试 192.168.10.24...”。我想我不能使用 telnet 在设备之间进行以太网通信。我想我必须实现自己的套接字程序。你有什么建议吗? 试着去掉你不需要的行。像 grep -v "unwanted line" 会成功,并且套接字程序可能比这更昂贵。但这一切都取决于您的要求。【参考方案4】:

已经回答了,但这里是另一个使用 curl 的观点,对于快速检查(即服务是否处于活动状态)很有用。我不得不努力避免“脚本”和“预期”解决方案。

只是一个可能的 POP3 检查的存根:

echo "quit" | curl telnet://localhost:110 > /tmp/telnet_session.txt
if grep "POP3 ready" /tmp/telnet_session.txt; then
        echo "POP3 OK"
else
        echo "POP3 KO"
fi

【讨论】:

以上是关于用于解析 telnet 消息并退出的 Linux 脚本的主要内容,如果未能解决你的问题,请参考以下文章

linux 怎么退出 telnet

linux下怎么退出telnet

markdown linux - 退出telnet

CentOS下telnet退出失败如何解决?CentOS下telnet退出失败的解决方法

linuxexpect命令不能用

请问Linux 如何关闭telnet