Linux 脚本解析 telnet 消息并退出

问题描述 投票:0回答:5

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

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

如何自动读取telnet消息?

linux bash telnet
5个回答
11
投票

下面给出最简单、最容易的方法。

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)

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!


1
投票

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

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

1
投票

已经回答了,但这是使用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

0
投票

完成后,您可以使用以下脚本退出 telnet 会话:

telnet [ip-address] || true

输出将类似于:

Trying [ip-address]...
Connected to [ip-address].
Escape character is '^]'.
Connection closed by foreign host.

或者

Trying [ip-address]...
telnet: Unable to connect to remote host: Connection refused

备注:

  • 在这两种情况下,都会返回零状态代码。
© www.soinside.com 2019 - 2024. All rights reserved.