टेलनेट को कमांड के रूप में एक टेक्स्ट फाइल की फीडिंग सामग्री


10

कमांड के साथ telnet docs.python.org 80, मैं http://docs.python.org/2/license.htmlवास्तविक अनुरोध को टाइप करके एक HTTP HTTP अनुरोध कर सकता हूं ।

अब, इसे लाइव में टाइप करने के बजाय, मैं टेक्स्ट फाइल से रिक्वेस्ट फीड करना चाहता हूं।

मैंने यह कोशिश की:

cat request.txt|telnet docs.python.org 80


request.txt :

GET /2/license.html HTTP/1.1 
Host: docs.python.org

(आपको फ़ाइल को एक रिक्त रेखा के साथ समाप्त करना होगा या आपको एक बुरा अनुरोध मिलेगा!)


लेकिन सर्वर से कनेक्शन तुरंत बंद हो जाता है।

कैसे करना चाहिए मैं ठीक से पाइप request.txt लिए telnet docs.python.org 80?


संपादित करें:

यह जानना अच्छा है; यदि आप HEADइसके बजाय का उपयोग करते हैं GET, तो आपको वही प्रतिक्रिया मिलेगी, जैसे आपने एक GETअनुरोध किया था , संदेश निकाय को छोड़कर।
इसलिए, HEADयदि आप सिर्फ HTTP हेडर की जांच करना चाहते हैं तो इसका उपयोग करें । (यानी ताकि प्रतिक्रिया की सामग्री आपके शेल आउटपुट को अव्यवस्थित न करे।)


क्या आप अपने द्वारा चलाए जाने वाले वास्तविक कमांड को शामिल कर सकते हैं ताकि हम तुलना कर सकें? जब GETआप चलाते हैं तो आपने पोस्ट किया है, मुझे एक 408 Request Time-outत्रुटि मिलती है । इसके अलावा, wget http://docs.python.org/2/license.htmlएक विकल्प नहीं है?
टेराडो

आदेश सही हैं। मुझे लगता है कि आप जिस क्षण में प्रवेश करते हैं telnet docs.python.org 80, सर्वर के साथ एक संबंध बना रहे हैं , इसलिए आपको उन दो पंक्तियों में जल्दी करना होगा और टाइप करना होगा (कुछ ही समय में कॉपी पेस्ट करें)।
बेंटले 4

ये सटीक आदेश हैं:telnet docs.python.org 80 <ENTER> GET /2/license.html HTTP/1.1 <ENTER> Host: docs.python.org <ENTER> <ENTER>
बेंटले

1
मुझे लगता है कि इस कारण से आपको <ENTER>अंत में दूसरी बार टाइप करने की आवश्यकता है क्योंकि HTTP प्रोटोकॉल अनुरोध हेडर के बाद एक अतिरिक्त खाली लाइन की आवश्यकता है। देखें अनुरोध संदेश अनुभाग का HTTP विकी लेख
Bentley4

1
दमयन्ती, सैद्धांतिक रूप से, आपको करने में सक्षम होना चाहिए, telnet < request.txtलेकिन मुझे GETकाम करने की आज्ञा नहीं मिल सकती है ।
टेराडॉन

जवाबों:


21

Netcat (nc कमांड) का उपयोग करें, बल्कि "telnet", इसलिए

cat request.txt | nc docs.python.org 80

टेलनेट एक त्वरित और आसान हैक है, लेकिन नेटकैट, जाहिरा तौर पर, नौकरी के लिए सही उपकरण है।


टेलनेट कैसे 'तेज' और 'आसान' है फिर नेटकैप? मुझे इस मामले के संबंध में कोई उपयोग अंतर दिखाई नहीं देता है।
बेंटले 4

निश्चित रूप से इस मामले के लिए नहीं, लेकिन मुझे लगता है कि लोग (मुझे पढ़ें, और स्पष्ट रूप से आप !!!) टेलनेट का उपयोग करते हैं क्योंकि इसकी पहली चीज हमने सीखा है, और, निश्चित रूप से, यह विंडोज और लिनक्स पर उपलब्ध है, जहां मेरा मानना ​​है कि नेटकैट विंडोज के तहत प्री-इंस्टॉल नहीं आता है।
दाविगो

5

मेरे पास वास्तव में कोई अनुभव नहीं है telnetलेकिन यह फ़ाइल पुनर्निर्देशन से इनपुट लेता है:

telnet < abc.txt

मैं इसे सर्वर से सही तरीके से कनेक्ट करने के लिए प्राप्त कर सकता हूं:

$ cat abc.txt
open docs.python.org 80
$ telnet < abc.txt
telnet> Trying 82.94.164.162...
Connected to dinsdale.python.org.
Escape character is '^]'.
Connection closed by foreign host.

शायद आप यह समझ सकते हैं कि GETकमांड को स्वीकार करने के लिए इसे कैसे प्राप्त करें लेकिन मैं नहीं कर सका। एक expectस्क्रिप्ट का उपयोग करने के लिए एक विकल्प है :

#!/usr/bin/expect

spawn telnet docs.python.org 80
expect "Escape character is '^]'." { 
     send "GET /2/license.html HTTP/1.1\nHost: docs.python.org\n\n" 
}
interact

इसके बाद आप स्क्रिप्ट को सहेज सकते हैं telnet.exp, इसे निष्पादन योग्य बना सकते हैं और इसे चला सकते हैं:

./telnet.exp > output.html

अच्छा, मुझे नहीं पता था expect! मैंने दाविदगो का जवाब चुना क्योंकि यह इस मामले का सबसे अच्छा समाधान है। मैं जो भी हासिल करना चाहता था, उसके लिए नेटकैप और टेलनेट के बीच कोई उपयोग अंतर नहीं देखता। फिर भी इस प्रयास के लिए धन्यवाद, यदि मैं आपके उत्तर को और अधिक बढ़ा सकूं, तो मैं कर सकता हूं।
बेंटले 4

1
@ बेंटले 4 कोई समस्या नहीं है, इसका उपयोग ncकरना बेहतर उपाय है, आपको इसे स्वीकार करना चाहिए
टेराडॉन

मैं यह देखने में विफल हूं interactकि उस expectस्क्रिप्ट को समाप्त करने का सही तरीका कैसे है ।
2rs2ts

@ 2rs2ts मुझे उम्मीद के बारे में बहुत कम पता है, आप सही हो सकते हैं लेकिन मैं नहीं बता सकता क्योंकि आपकी टिप्पणी ने मुझे यह नहीं बताया कि आप इसे गलत क्यों मानते हैं। मेरी समझ यह है कि interact"उपयोगकर्ता को वर्तमान प्रक्रिया का नियंत्रण देता है, ताकि कीस्ट्रोक्स को वर्तमान प्रक्रिया में भेजा जाता है, और वर्तमान प्रक्रिया का स्टडआउट और स्टैडर वापस आ जाता है" (यही से man expect)। तो, interactउपयोगकर्ता को टेलनेट कनेक्शन का उपयोग करने का एक तरीका है।
टेराडन

चूंकि मूल प्रश्न किसी फ़ाइल की सामग्री को telnetउसके साथ इंटरैक्ट करने के बजाए फीड करने के बारे में था, इसलिए मुझे लगता है कि आपको close -i $spawn_idऐसा कुछ करना चाहिए । तब स्क्रिप्ट बाहर निकल जाएगी। साथ interactमैं वास्तव में बाहर निकलने के लिए असमर्थ था telnetसब पर, और मेरे टर्मिनल को बंद करने के लिए किया था। बहुत दुखी (हालांकि यह आंशिक रूप से मेरी गलती हो सकती है।)
2rs2ts
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.