मैं एक नेटकैट पर कैसे कमांड कर सकता हूं जो जीवित रहेगा?


32
echo command | netcat host port

इसके परिणामस्वरूप कमांड को दूरस्थ होस्ट पर भेजा जा रहा है और कुछ डेटा वापस पढ़ा जा रहा है। लेकिन कुछ सेकंड के बाद, कनेक्शन बंद हो जाता है। -W पैरामीटर कुछ भी नहीं बदला। मैं SuSE 10.1 पर netcat v1.10 का उपयोग कर रहा हूं।


क्या आप सुनिश्चित हैं कि यह दूरस्थ होस्ट नहीं है जो कनेक्शन बंद करता है?
ग्रैविटी

हाँ। नेटकैट करना और फिर मैन्युअल रूप से नेटकाट में कमांड परिणाम टाइप करना अनिश्चित काल तक जीवित रहना।
क्रिस

यह जिंदा क्यों रहेगा? यह सिर्फ प्रतिध्वनि मापदंडों को मुद्रित करता है और फिर मर जाता है?
मवि

1
मैं चाहता हूं कि यह जीवित रहे ताकि दूरस्थ सर्वर से आने वाले डेटा को प्राप्त करना जारी रहे।
क्रिस

2
यह सच नहीं है। "netcat <host> <port>" एक द्विदिश टीसीपी सॉकेट खोलता है।
क्रिस

जवाबों:


33

यह ncOS X पर कमांड के साथ काम करता है (आप जिस कमांड को भेजना चाहते हैं, वह फाइल में है):

cat file - | nc host port

(अनिवार्य रूप से, catफ़ाइल की सामग्री को स्टडआउट पर डंप करें और फिर स्टड पर आपका इंतजार करें)।

विस्तार से, यदि आप शेल से कमांड भेजना चाहते हैं, तो आप ऐसा कर सकते हैं:

cat <(echo command) - | nc host port

यह बहुत अच्छा है क्योंकि यह बहुत नंगे हड्डियों के एम्बेडेड सिस्टम पर काम करता है, जहां नेटकैट में सभी फैंसी विकल्पों का अभाव है।
एसएफ।

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

1
जैसा कि मैं देख रहा हूं कि यह netcatकमांड सॉकेट को तब तक खुला रखेगा जब तक कि यह इनपुट के अंत को न देख ले। इन सभी उदाहरणों वास्तव में के बारे में ज्यादा कह के बिना इस का प्रदर्शन क्यों । मैं के साथ बातचीत कर रहा हूँ सर्वर का उपयोग कर एक विस्तारित अवधि के सिर्फ प्रयोग करने के लिए: । सॉकेटटेस्ट एक आसान उपकरण है जो किसी भी टीसीपी या यूडीपी पोर्ट पर सुन या सेवा कर सकता है। SocketTest netcatcat - | nc localhost 8063
होगा

14

ncउबंटू के साथ :

nc -q -1 host port

से उबंटू ncआदमी पेज :

 -q seconds
         after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.

ध्यान दें कि उपलब्ध ncविकल्प वितरण के बीच बहुत भिन्न होते हैं, इसलिए यह आपके (OpenSUSE) काम नहीं कर सकता है।


13

मुझे यह मिला:

echo command | netcat host port -

मेरे सहकर्मी इसे जानते थे। मैं उस दस्तावेज़ में बिल्कुल नहीं देखता।


2

मुझे नहीं लगता कि आप इसे netcat या socat के साथ प्रबंधित करने जा रहे हैं। मैंने अभी दोनों के साथ व्यापक छेड़छाड़ की है, और समाज सबसे आशाजनक दिख रहा है।

मैं दूरस्थ टीसीपी पोर्ट से कनेक्ट करने और एक स्थानीय यूनिक्स डोमेन सॉकेट (सिद्धांत रूप में ताकि लिंक को हर समय रखा जा सके) पर सुनने के लिए सोसाइटी स्थापित करने में कामयाब रहा, लेकिन जैसे ही स्थानीय प्रक्रिया यूनिक्स सॉकेट (एक औरat) से अलग हो गई Unix सॉकेट को stdin / out से लिंक करते हुए) इसने TCP समाज सत्र को बंद कर दिया।

यहां समस्या यह है कि netcat / socat के माध्यम से प्रत्येक कनेक्शन सर्वर के लिए एक नया टीसीपी स्ट्रीम कनेक्शन बनाता है, और स्थानीय अंत डिस्कनेक्ट होने पर यह टीसीपी स्ट्रीम सत्र को बंद कर देता है।

मुझे लगता है कि आप शायद इसके लिए कुछ कस्टम प्रॉक्सी सॉफ्टवेयर लिखने जा रहे हैं, जो टीसीपी कनेक्शन को दूरस्थ छोर तक खोलता है और फिर स्थानीय रूप से सॉकेट / पाइप / फेनो या जो कुछ भी सुनता है और उसके बाद बस मौजूदा टीसीपी पाइप के नीचे डेटा भेजता है और परिणाम देता है।


सब पराक्रमी मैट जेनकिंस के बारे में सुनो: D
M'vy

2

यह हो सकता है कि कनेक्शन सॉकेट के दूसरे छोर पर बंद है?

डिफ़ॉल्ट रूप से, ncपूरा होने के बाद कनेक्शन बंद कर देता है, यदि आप स्पष्ट रूप से उसे सुनते रहने के लिए नहीं कहते हैं ( -kविकल्प के साथ ):

 -k    Forces nc to stay listening for another connection after its current
       connection is completed.  It is an error to use this option without the
       -l option.

देख लो man nc.1


मैं इस तरह से दो मशीनों के बीच सफलतापूर्वक डेटा स्ट्रीमिंग कर रहा हूं:

  • प्रेषक:

    while (true); do 
      echo -n "$RANDOM " | nc <host> <port>
    done
    
  • रिसीवर:

    nc -kl <port> 
    

1

जार्ज की विधि एक संवादात्मक शेल से अच्छी तरह से काम करती है, लेकिन स्क्रिप्टिंग में मदद नहीं करेगा, जब आप उदाहरण के लिए अपनी स्क्रिप्ट को कॉल कर रहे हों nohup ./script &

मैं एक डमी पंद्रह मदद करता है के साथ स्टड की जगह पाया।

 mkfifo dummy
 cat command.txt dummy | nc host port

चूँकि फ़ाइल को आउटपुट करने के बाद, कभी भी कुछ नहीं लिखता है, उस catपर अनिश्चित काल तक लटका रहता है।


0

socatके shut-noneविकल्प यहाँ की मदद करनी चाहिए:

Changes the (address dependent) method of shutting down the write part of a connection to not do anything.

आपको संभवतः डिफ़ॉल्ट टाइमआउट अवधि का उपयोग -t <timeout>करने से भी बचना होगा, अन्यथा 0.5 के बाद सॉकेट बंद हो जाएगा। यह विकल्प डिफ़ॉल्ट व्यवहार को ओवरराइड करता है, जो है:

When one of the streams effectively reaches EOF, the closing phase begins. Socat transfers the EOF condition to the other stream, i.e. tries to shutdown only its write stream, giving it a chance to terminate gracefully. For a defined time socat continues to transfer data in the other direction, but then closes all remaining channels and terminates.

तो, एक कमांड जैसे:

echo 'blah' | socat -t 10 stdio tcp:<addr>:<port>,shut-none

'ब्ला' भेजने के बाद सॉकेट को 10 के लिए खुला रखेंगे।


0

आपकी कमांड समाप्त हो जाती है, यदि या तो रिमोट होस्ट कनेक्शन बंद कर देता है (या पहुंच योग्य नहीं है) या पाइप समाप्त होने से पहले कमांड (जबकि नेटकैट अभी भी इसकी इनपुट कतार के बाकी हिस्सों को भेजता है)।

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