9

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

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

如何自动阅读 telnet 消息?

4

4 回答 4

10

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

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)
于 2014-06-13T12:07:21.903 回答
6

您可以使用内部 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!

于 2012-04-16T11:14:11.913 回答
1

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

telnet [ip-address] > /tmp/tempfile.txt
于 2012-04-16T11:10:16.610 回答
0

已经回答了,但这里有另一个使用 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
于 2016-08-22T10:47:39.397 回答