2012-04-16 41 views
6

我正在連接到telnet監聽器。 Telnet服務器每秒發送「1234」。我想閱讀消息「1234」並關閉telnet會話。下面是我的代碼,但它不起作用。解析telnet消息並退出的Linux腳本

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

如何自動讀取telnet消息?

回答

5

你可以使用內部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的),但請不要我們e telnet!

+0

謝謝!有效!但是「3」和「貓」是什麼?他們是否指導STDIN迴應? – user1336117 2012-04-16 11:35:40

+1

您可以檢查bash手冊頁上的REDIRECTION段落,以查看/ dev/tcp,exec和<>的工作方式。實質上,您正在請求bash打開以在同一個shell上讀寫文件描述符#3並將其附加到127.0.0.1端口80上的TCP流。 – dAm2K 2012-04-16 16:39:28

0

你需要使用預期,恐怕就是你需要從那裏檢查手冊中期待它實際上是它自己的語言解析應用程序的輸出,並針對結果採取行動的情況下

+0

謝謝你,我會讀到的期望,然後寫在這裏的結果。 – user1336117 2012-04-16 11:23:41

1

重定向輸出到文件,從文件中讀取

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

它正在工作,但我收到了一些不必要的字符串,如「嘗試192.168.10.24 ...」。我認爲我不能使用telnet進行設備之間的以太網通訊。我想我必須實現我自己的套接字程序。你有什麼建議嗎? – user1336117 2012-04-16 11:22:28

+0

只是試圖去掉你不需要的線。像grep -v「不需要的行」將生效,套接字程序可能比這更昂貴。但這一切都取決於你的要求。 – siva 2012-04-17 13:32:19

1

最簡單和最簡單的方法如下。

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

ñ - 等待時間,以秒自動退出了。它可能是0.5的分數。請注意,某些必需的輸出可能不會在指定的等待時間內返回。所以我們可能需要相應增加。

服務器 - 目標服務器IP或主機名。

port - 目標服務端口號。

您也可以將輸出重定向到文件這個樣子,

sleep 1 | telnet <server> <port> > output.log 
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