netcat प्रतिक्रिया को प्रिंट नहीं करता है


12

मैं कमांड का उपयोग करने के लिए एक tcp पोर्ट पर कमांड भेजने की कोशिश कर रहा हूं netcatऔर
जब मैं दौड़ता हूं netcatऔर अपनी कमांड टाइप करता हूं तो यह प्रतिक्रिया को सही ढंग से टाइप करता है लेकिन जब मैं पाइप से कमांड भेजता हूं तो यह कमांड को सही तरीके से भेजता है लेकिन प्रतिक्रिया को प्रिंट नहीं करता है

तो, यह सही ढंग से काम करता है:

netcat  localhost 9009

जबकि यह सिर्फ कमांड भेजता है, लेकिन प्रतिक्रिया प्रिंट नहीं करता है:

echo 'my_command' | netcat  localhost 9009

क्यों?
मैं netcatप्रतिक्रिया पाठ कैसे प्रिंट कर सकता हूं ?


इस शायद आप के लिए हो रहा है
जेफ स्कालर

@JeffSchaller: नहीं! दुर्भाग्य से उन आदेशों का उपयोग करने में मदद नहीं करता है! इस समय यह हमेशा के लिए ब्लॉक!
आरवाईएन

आप कौन से नेटकैट का उपयोग कर रहे हैं? दुर्भाग्य से वहाँ netcat उपकरण के एक दर्जन विभिन्न रूपांतर हैं, और वे सभी एक ही व्यवहार नहीं करते हैं। इसके अलावा, दूरस्थ छोर पर क्या है?
पैट्रिक

@ पैट्रिक: मेरा नेटकैट OpenBSD netcat (Debian patchlevel 1.105-7ubuntu1)संस्करण है; और रिमोट अंत में telegram-cliएक ही मशीन पर है।
आरवाईएन

मुझे लगता है कि मुझे उस नेटकैट के लिए एक मैन पेज मिला है, लेकिन मुझे ऐसा कोई झंडे नहीं दिख रहे हैं जो मुझे संदेह हो कि क्या नियंत्रित होगा। मुझे संदेह है कि एक बार netcatएसटीडीआईएन पर ईओएफ प्राप्त होता है, कि यह तुरंत आधे बंद करने के बजाय सॉकेट के दोनों किनारों को बंद कर देता है और दूरस्थ पक्ष को इसके समापन की प्रतीक्षा करता है। यदि socatकोई विकल्प है, तो मैं इसके बजाय अत्यधिक अनुशंसा करूंगा। केवल एक ही है socat, इसलिए आपके पास पोर्टेबिलिटी के मुद्दे नहीं हैं, इसके साथ एक दर्जन से अधिक विभिन्न स्वाद हैं, यह बहुत अधिक पवित्र व्यवहार करता है, और अत्यधिक विन्यास योग्य है।
पैट्रिक

जवाबों:


8

जैसा कि @ पैट्रिक ने कहा, यह समस्या आमतौर पर netcatप्रतिक्रिया देने से पहले बाहर निकलने के कारण होती है । आप उपाय करते हैं कि -q 2कमांड लाइन में जोड़कर , यानी, netcatमानक इनपुट पर ईओएफ का पता लगाने के बाद लगभग 2 सेकंड लटकाएं। जाहिर है आप इसे कुछ सेकंड की संख्या में भी प्रतीक्षा कर सकते हैं।


धन्यवाद; -q 2काम किया है लेकिन क्या यह भरोसेमंद है? यह वेब अनुरोध कर रहा है मुझे यकीन नहीं हो रहा है कि 2s हमेशा पर्याप्त होता है! क्या मैं ?
RYN

1
इसे अधिक समय तक प्रतीक्षा करने के लिए एक बड़ी संख्या का उपयोग करें, या इसे नकारात्मक रूप से प्रतीक्षा करने के लिए कुछ नकारात्मक संख्या। -wसाथ खेलने का विकल्प भी है । यह सब man ncपाठ्यक्रम के पृष्ठ में है।
राल्फ रौनकवादी

5
यह कहता हैinvalid option -- 'q'
फिल्प २

मुझे लगता है कि एक अच्छा अनुवर्ती प्रश्न यह है: ncप्रतिक्रिया की प्रतीक्षा करने के बजाय तुरंत क्यों बाहर निकल रहा है? यदि कनेक्शन अभी भी खुला है, तो ncइसे बंद करने के लिए इंतजार करने के लिए एक विकल्प होना चाहिए , न कि केवल
स्टिन के

6

इसे इस्तेमाल करो:

cat <(echo command) - | nc host port

समस्या यह है कि ncस्टड बंद होने के तुरंत बाद कनेक्शन बंद हो जाएगा, जो एक साधारण my_commandस्ट्रिंग के लिए बहुत जल्दी है , और इस तरह कभी भी प्रतिक्रिया प्राप्त करने का मौका नहीं मिलता है। (यदि आप एक बहुत बड़ी फ़ाइल को पाइप करते हैं, तो आप देखेंगे कि फ़ाइल भेजने से पहले उसे प्रतिक्रिया मिल सकती है)।

दर्ज catके साथ -दूसरा तर्क के रूप में: यह बनाता है catके बाद यह पहला तर्क की सामग्री को भेजा है के माध्यम से पाइप के लिए और अधिक सामग्री के लिए stdin पर सुनने। पहला तर्क सिर्फ echoकमांड के माध्यम से मिल रहा है cat- यह आपके कमांड के साथ एक फाइल भी हो सकता है cat < file - | ...

वैकल्पिक रूप से ऐसा करें:

(echo command; while true; do sleep 0.01; echo -n "#"; done) | nc host port

यह #इनपुट के 2 लाइन पर असीमित अक्षर भेजता है । का उपयोग करते हुए #रिमोट की तरह एक पार्टी है कि एक टिप्पणी के रूप में इस पर ध्यान न दें हैं के लिए काम करता है। मैंने यहां 10 मिलीसेकंड का एक छोटा प्रतीक्षा समय चुना, इसलिए यह कनेक्शन के अंत में तेजी से प्रतिक्रिया करता है। YMMV।

इसका नकारात्मक पहलू यह हो सकता है कि catयह whileलूप हो या ncतब तक चलता रहे जब तक आप हिट ^Cया ^Dशेल पर न चलें। यह वास्तव में रिमोट एंड पर निर्भर करता है।

-w 1(OSX netcat) या -i 1(nmap की ncat) का उपयोग करके टाइमआउट जोड़ने से यह कनेक्शन बंद कर देता है और nc1 सेकंड के बाद, लेकिन catजब तक आप किसी पात्र में प्रवेश नहीं करेंगे और पाइप टूट जाता है (मुझे लगता है)।

हालांकि, यह काम करता है यदि कमांड प्राप्त करने और संभालने के बाद रिमोट साइड स्वचालित रूप से कनेक्शन बंद कर देगा - इससे ncक्लाइंट और उस पर पाइपिंग की प्रक्रिया भी समाप्त हो जाएगी ।

यह उत्तर इस पर आधारित है एक समान सुपरसुसर प्रश्न का उत्तर


{ echo my_command; cat;}ऐसा ही होगा और समझने में आसान माना जा सकता है।
जी-मैन का कहना है कि 'मोनिका'

1

विभिन्न OpenBSD-netcat संस्करणों के विभिन्न संयोजनों की आवश्यकता होगी, विचित्र हैं -w <seconds>, -q <seconds>, -Nऔर यहां तक कि जरूरत अलग क्या कनेक्शन के दूसरे छोर पर चल रहा है पर निर्भर करता है बहस। कुछ संस्करणों या सर्वरों के साथ टाइमआउट विकल्पों का उपयोग करने में देरी होती है, और उनका उपयोग नहीं करने के परिणामस्वरूप बहुत लंबा (अनंत?) विलंब हो सकता है। और मुझे गन्नू नेटकैट के साथ अलग-अलग क्वार्क्स की उम्मीद है, लेकिन यह नहीं जानते कि क्या वे इसके संस्करणों के बीच भिन्न हैं।

जब मैं ऐसा करता हूं, उदाहरण के लिए, आर्कलिनक्स से संस्करण 1.130_3 बहुत लंबा (हमेशा के लिए?) लेता है:

$ echo response | nc -l 9999 &
[1] 15190

$ time echo request | nc localhost 9999
request
response

(wait forever possibly)

लेकिन यह सर्वर या क्लाइंट के लिए जोड़ा गया -N के साथ काम करता है।


1

मुझे पता है कि यह थोड़ा पुराना है लेकिन मेरे लिए कोई और जवाब काम नहीं किया और यह किया:

echo 'test' | netcat -N $server $port

ध्यान दें -N:

इनपुट पर ईओएफ के बाद नेटवर्क सॉकेट बंद करें। कुछ सर्वरों को अपना काम पूरा करने के लिए इसकी आवश्यकता होती है।

विंडोज और लिनक्स दोनों पर मेरे लिए काम किया।

नोट: यह मेरे द्वारा डुप्लिकेट प्रश्न के लिए पोस्ट किए गए उत्तर की कॉपी पेस्ट है ।

मैं सोच रहा हूं कि यह उपयोगी हो सकता है। अगर यह पॉलिसी या किसी चीज के खिलाफ है तो मॉड्स इसे एडिट / डिलीट करने के लिए स्वतंत्र महसूस करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.