कैसे पता चलेगा कि जब NC फाइल ट्रांसफर कर रहा है


11

क्या यह जानने का कोई तरीका है कि नेटकट को मशीनों के बीच फाइल ट्रांसफर करते समय किया जाता है?

वर्तमान आदेश:

मशीन # 2: nc -lp 5555 > test.txt

मशीन # 1: nc MachineIP Port < test.txt

स्थानांतरण होता है, लेकिन कोई भी दृश्य संकेत नहीं है जो इसे पूरा कर चुका है।

जवाबों:


19

पहले कुछ पृष्ठभूमि

के विभिन्न संस्करण हैं 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

ncEOF को पढ़ने के बाद 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 कॉन्फ़िगरेशन के बारे में चिंता किए बिना स्थानांतरित कर देगा।


मैं यह काम करने के लिए प्राप्त करने के लिए प्रतीत नहीं कर सकते। जब मैं करता हूं, तो यह कहता है कि कमांड मौजूद नहीं है। मुझे -सा दिखता है लेकिन यह कनेक्शन छोड़ने का कारण नहीं बनता है
एंथनी रसेल

आपका ncसंस्करण क्या है ? जांच करने के लिए: nc -hपहली पंक्ति।

हाँ, यह बहुत पुराना है। Linux की एक पुरानी छवि पर Im। मैं इसे अपडेट करूंगा और इसे एक और
एंथनी रसेल

मैंने अपना उत्तर अपडेट कर दिया।

1
जब सभी पैकेट भर नहीं आते हैं, तो ऑपरेटिंग सिस्टम यह पता लगाएगा और उन्हें एप्लिकेशन नोटिंग (या यदि वह अभी भी विफल रहता है, तो एप्लिकेशन टाइमआउट त्रुटि प्राप्त करेगा) के बिना उन्हें फिर से भेज देगा। विश्वसनीय वितरण ओएस कर्नेल द्वारा प्रदान की गई टीसीपी प्रोटोकॉल का उद्देश्य है, जो एनसी का उपयोग करता है। आप UDP प्रोटोकॉल का अनुरोध कर सकते हैं जो ऐसा नहीं करता है, nc -u का उपयोग करके लेकिन यह ऐसा नहीं है।
जुराज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.