2012-04-16 10 views
6

से बाहर निकलने के लिए मैं एक टेलनेट श्रोता से कनेक्ट कर रहा हूं। टेलनेट सर्वर हर दूसरे के लिए "1234" भेजता है। मैं संदेश "1234" पढ़ना चाहता हूं और टेलनेट सत्र बंद करना चाहता हूं। नीचे मेरा कोड है लेकिन यह काम नहीं करता है।लिनक्स स्क्रिप्ट टेलनेट संदेश को पार्स करने और

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

मैं स्वचालित रूप से टेलनेट संदेश कैसे पढ़ सकता हूं?

उत्तर

5

आप आंतरिक टीसीपी का उपयोग कर सकते:

#!/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) इस्तेमाल कर सकते हैं, लेकिन हमें कृपया मत ई टेलनेट!

+0

धन्यवाद! इसने काम कर दिया! लेकिन "3 <>" और "बिल्ली <और 3'" के लिए क्या है। क्या वे एसडीडीआईएन को जवाब देने के लिए निर्देशित कर रहे हैं? – user1336117

+1

आप बैश मैन पेज पर रेडरेक्शन पैराग्राफ देख सकते हैं कि कैसे/dev/tcp, exec और <> काम करें। संक्षेप में आप बैश को एक ही खोल पर, फ़ाइल डिस्क्रिप्टर # 3 पढ़ने और लिखने के लिए खोलने का अनुरोध कर रहे हैं और इसे 127.0.0.1 पोर्ट 80 पर एक टीसीपी स्ट्रीम से अटैच करने के लिए अनुरोध कर रहे हैं। – dAm2K

0

आप उम्मीद, मैं डर लग रहा है कि यह एक मामले में जहां तुम वहाँ से मैनुअल की जाँच करने के रूप में यह है प्रभाव में यह आवेदन उत्पादन पार्स करने और परिणाम पर अभिनय के लिए ही भाषा है उम्मीद में की जरूरत है उपयोग करने की आवश्यकता

+0

धन्यवाद, मैं के बारे में पढ़ा होगा उम्मीद और फिर यहाँ परिणाम लिखें। – user1336117

1

पुनर्निर्देशन एक फाइल करने के लिए उत्पादन और फ़ाइल से पढ़ने

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

यह काम कर रहा है लेकिन मुझे कुछ अनावश्यक तार मिल रहे हैं जैसे "192.168.10.24 आज़माएं ..."। मुझे लगता है कि मैं उपकरणों के बीच ईथरनेट संचार के लिए टेलनेट का उपयोग नहीं कर सकता। मुझे लगता है कि मुझे अपना सॉकेट प्रोग्राम लागू करना है। क्या आपके पास कोई सुझाव है? – user1336117

+0

बस उन लाइनों को बाहर निकालने का प्रयास करें जिनकी आपको आवश्यकता नहीं है। grep -v "अवांछित रेखा" की तरह काम करेगा और सॉकेट प्रोग्राम इससे महंगा हो सकता है। लेकिन फिर यह सब आपके req पर निर्भर करता है। – siva

1

सबसे सरल और आसान तरीका नीचे दिया गया है।

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

n - ऑटो बाहर निकलने से पहले ही सेकंड में प्रतीक्षा समय। यह 0.5 की तरह fractional हो सकता है। ध्यान दें कि कुछ आवश्यक आउटपुट निर्दिष्ट प्रतीक्षा समय में वापस नहीं आ सकते हैं। तो हमें तदनुसार बढ़ने की आवश्यकता हो सकती है।

सर्वर - लक्ष्य सर्वर आईपी या होस्टनाम।

पोर्ट - लक्ष्य सेवा पोर्ट नंबर।

आप भी इस तरह दायर करने के लिए उत्पादन अनुप्रेषित कर सकते हैं,

sleep 1 | telnet <server> <port> > output.log 
0

पहले से ही उत्तर दिया, लेकिन यहाँ कर्ल का उपयोग कर देखने की एक अन्य बिंदु, त्वरित जांच (यानी सेवा सक्रिय हो या नहीं) के लिए उपयोगी है। मुझे "स्क्रिप्ट" और "उम्मीद" समाधान से बचने के लिए थोड़ा सा संघर्ष करना पड़ा।

बस संभव पॉप 3 की जांच के लिए एक ठूंठ:

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 
संबंधित मुद्दे