我正在连接到 telnet 侦听器。 Telnet 服务器每秒发送“1234”。我想读取消息“1234”并关闭 telnet 会话。下面是我的代码,但它不起作用。
#!/bin/bash
telnet 192.168.10.24 1234
read $RESPONSE
echo "Response is"$RESPONSE
echo "quit"
如何自动读取telnet消息?
下面给出最简单、最容易的方法。
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)
您可以使用内部 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!
将输出重定向到文件并从文件中读取
telnet [ip-address] > /tmp/tempfile.txt
已经回答了,但这是使用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 会话:
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
备注: