पहले कुछ पृष्ठभूमि
के विभिन्न संस्करण हैं nc
, जैसा कि आप nc (1) पर पा सकते हैं - लिनक्स मैन पेज या nc (1) BSD जनरल कमांड्स मैनुअल ट्रांसफर के ठीक बाद कनेक्शन बंद होना चाहिए। दोनों लिंक की गई साइटों पर एक उदाहरण दिया गया है:
किसी विशिष्ट पोर्ट पर सुनने के लिए nc का उपयोग करके प्रारंभ करें, आउटपुट फ़ाइल में कैद होने के साथ:
$ nc -l 1234 > filename.out
दूसरी मशीन का उपयोग करना, श्रवण एनसी प्रक्रिया से जुड़ना, उस फाइल को फीड करना जो हस्तांतरित की जानी है:
$ nc host.example.com 1234 < filename.in
फ़ाइल स्थानांतरित होने के बाद, कनेक्शन स्वचालित रूप से बंद हो जाएगा।
आपका netcat
स्थानांतरण के बाद कनेक्शन बंद नहीं करता है, इसलिए यह ऊपर वर्णित एक (एस) से अलग है। यह डेबियन जेसी पर मेरा, नेटकैट 1.10 की तरह व्यवहार करता है। इस व्यवहार को /usr/share/doc/netcat-traditional/README.gz
(मेरी मशीन पर) प्रलेखित किया गया है, यह साहसिक कार्य मेरा है:
सबसे सरल उपयोग में, "एनसी होस्ट पोर्ट" दिए गए लक्ष्य होस्ट पर दिए गए पोर्ट के लिए एक टीसीपी कनेक्शन बनाता है। आपका मानक इनपुट तब होस्ट को भेजा जाता है, और जो भी कनेक्शन वापस आता है वह आपके मानक आउटपुट पर भेजा जाता है। यह अनिश्चित काल तक जारी रहता है, जब तक कि कनेक्शन का नेटवर्क साइड बंद नहीं हो जाता। ध्यान दें कि यह व्यवहार अधिकांश अन्य अनुप्रयोगों से अलग है जो मानक इनपुट पर फ़ाइल के अंत के बाद सब कुछ बंद कर देते हैं और बाहर निकल जाते हैं।
यहाँ इस व्यवहार के पीछे तर्क है:
आप पूछ सकते हैं "मनमाने ढंग से बंदरगाहों से कनेक्ट करने के लिए टेलनेट का उपयोग क्यों नहीं किया जाता है?" मान्य सवाल, और यहाँ कुछ कारण हैं। टेलनेट में "मानक इनपुट ईओएफ" समस्या है, इसलिए किसी को नेटवर्क आउटपुट को खत्म करने की अनुमति देने के लिए ड्राइविंग स्क्रिप्ट में गणना में देरी का परिचय देना चाहिए। यह मुख्य कारण है जब नेटवर्क पक्ष बंद हो जाता है तब तक netcat चलता रहता है ।
विकिपीडिया में अलग-अलग क्रियान्वयनों का एक भाग है । मैं हालांकि अंतर का नाम नहीं दे सकता। शायद कोई और कर सकता है?
अब, समाधान
1
आप nc
फ़ाइल पढ़ने के बाद छोड़ने के लिए कह सकते हैं। यह विकल्प उपयोगी है:
-q seconds after EOF on stdin, wait the specified number of seconds
and then quit. If seconds is negative, wait forever.
यदि आप इस कमांड का उपयोग भेजने के अंत में करते हैं:
nc -q 0 MachineIP Port < test.txt
nc
EOF को पढ़ने के बाद 0 सेकंड छोड़ देंगे, यह फ़ाइल समाप्त होने के ठीक बाद है। यह तब से बाहर निकलेगा और इसलिए प्राप्त करने वाला अंत होगा nc
।
अगर आपको आश्चर्य होता है कि पैकेट भर जाने पर क्या होता है, तो यहाँ पर जराज की एक टिप्पणी है।
जब सभी पैकेट भर में नहीं आते हैं, तो सिस्टम इसका पता लगाएगा और उन्हें एप्लिकेशन नोटिंग (या यदि संभव नहीं है, तो एप्लिकेशन को टाइमआउट त्रुटि मिल जाएगी) के बिना उन्हें फिर से पहचानना होगा। विश्वसनीय वितरण OS कर्नेल द्वारा प्रदान टीसीपी प्रोटोकॉल का उद्देश्य है, जो nc
उपयोग करता है। आप यूडीपी प्रोटोकॉल का अनुरोध कर सकते हैं जो ऐसा नहीं करता है, nc -u
लेकिन यह ऐसा नहीं है।
2
उपर्युक्त में एक मूल उदाहरण है README.gz
, जो -w
टाइमआउट पर आधारित है और -q
इसे आपके कार्यान्वयन में मौजूद होने के विकल्प की आवश्यकता नहीं है ।
नेटकैट को एक सरल डेटा ट्रांसफर एजेंट के रूप में इस्तेमाल किया जा सकता है, और यह वास्तव में कोई फर्क नहीं पड़ता कि कौन सा अंत श्रोता है और कौन सा ग्राहक है - एक तरफ इनपुट आउटपुट के रूप में दूसरी तरफ आता है। यह श्रोता को बिना किसी समय-सीमा के प्राप्त करने वाले पक्ष में शुरू करने के लिए सहायक है, और फिर भेजने वाले पक्ष को एक छोटा सा समय प्रदान करता है। इस तरह से श्रोता तब तक सुनता रहता है जब तक आप उससे संपर्क नहीं करते हैं, और डेटा के प्रवाह के रुकने के बाद क्लाइंट को समय समाप्त हो जाएगा, बंद हो जाएगा, और श्रोता को उसके साथ ले जाएगा। जब तक हस्तक्षेप करने वाला नेटवर्क समस्याओं से भरा नहीं होता, तब तक यह पूरी तरह से विश्वसनीय होना चाहिए, और आप हमेशा टाइमआउट बढ़ा सकते हैं। कुछ "rsh" का एक विशिष्ट उदाहरण अक्सर इसके लिए उपयोग किया जाता है: एक तरफ,
nc -l -p 1234 | uncompress -c | tar xvfp -
और फिर दूसरी तरफ
tar cfp - /some/dir | compress -c | nc -w 3 othermachine 1234
किसी भी मशीन की निर्देशिका की सामग्री को दूसरे छोर पर .rhosts फ़ाइलों, उपयोगकर्ता खातों, या inetd कॉन्फ़िगरेशन के बारे में चिंता किए बिना स्थानांतरित कर देगा।