डेटा भेजे जाने के बाद नेटकैट कनेक्शन को स्वचालित रूप से कैसे बंद करें?


22

मैं एक स्क्रिप्ट से निम्नलिखित कमांड निष्पादित कर रहा हूं:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

हालाँकि, netcat क्लाइंट अनिश्चित काल तक खुला रहता है। एक बार यह डेटा भेजे जाने के बाद मैं कनेक्शन कैसे बंद कर सकता हूं?

जवाबों:


17

अन्य उत्तर -cऔर -qदिए गए दोनों सही संदर्भ में सही हैं, लेकिन यह संक्षेप में बताने में मदद कर सकता है कि क्यों कई उत्तर हैं और अधिक सामान्य समाधान देते हैं।

ये अलग-अलग विकल्प एक ही काम करते हैं लेकिन netcat के अलग-अलग कार्यान्वयन हैं:

  • -c नेटकैट का जीएनयू कार्यान्वयन
  • -q नेटबैकट का ओपनबीएसडी कार्यान्वयन।
  • -w (अन्य?) नेटबैट का ओपनबीएसडी कार्यान्वयन।

कुछ संस्करणों को -qऔर -wविकल्पों के लिए छोड़ने से पहले प्रतीक्षा करने के लिए सेकंड की संख्या निर्दिष्ट करने के लिए एक इंट की आवश्यकता होती है । यह इंट संस्करण के आधार पर होना चाहिए > 0या >= 0

यदि आप कई मशीनों में कुछ लागू कर रहे हैं और यह सुनिश्चित नहीं कर रहे हैं कि वे netcat के समान कार्यान्वयन का उपयोग करें, तो आप timeoutकुछ ही सेकंड के बाद netcat को मारने के लिए प्रोग्राम के साथ अपने netcat कॉल को रैप करने पर विचार कर सकते हैं ।

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

यह दृष्टिकोण थोड़ा अनाड़ी है क्योंकि यह नेटकैट के निष्पादन पर एक ऊपरी सीमा रखता है, भले ही वह सफलतापूर्वक डेटा भेज रहा हो या नहीं, लेकिन यदि आप कम मात्रा में डेटा भेज रहे हैं और कुछ सेकंड बचे हैं, तो यह काम करना चाहिए किसी भी netcat कार्यान्वयन के साथ।


5

आप -qपैरामीटर का उपयोग कर सकते हैं , लेकिन यह netcatसर्वर को भी बंद कर देगा।

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    

3

मेरे मामले में, मैं नेटब्रेक की प्रतिलिपि जो अपने मैक पर Homebrew (v 0.7.1) के माध्यम से स्थापित कर रहा था, में -q विकल्प नहीं था, लेकिन मैं STDIN EOF को बंद करने के लिए -c विकल्प का उपयोग करने में सक्षम था एक लूप में पूरी कमांड:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done

1

Ubuntu 18.04 सर्वर पर मुझे निम्नलिखित का उपयोग करना पड़ा: (मैन पेजों में पाया गया)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

जाहिर है -Nके समान है -qया -cअन्य distros पर

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