我正在连接到一个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)
#!/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!
cat <&3
"是用来将STDIN重定向到RESPONSE吗? - user1336117已经有答案了,但是这里提供另一个观点,使用curl非常有用,可以进行快速检查(例如服务是否活动)。我必须努力避免使用“脚本”和“expect”解决方案。
这只是一个可能的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 [ip-address] > /tmp/tempfile.txt