पोर्ट पर रीडायरेक्ट स्टड और स्टडआउट


11

मैं एक ऐसा कार्यक्रम लेना चाहता हूं Pजो पढ़ता है stdinऔर से लिखता है stdout, लेकिन इसे ncया जो कुछ भी ऐसा है कि यह एक निश्चित बंदरगाह से पढ़ता है और दूसरे बंदरगाह से आउटपुट के लिए जोड़ता है ।

# The reading is easy, here P reads from port 50505
nc -l 50505 | P

पोर्ट 60606 को वापस लिखने के लिए मुझे यह कैसे मिलेगा?


आपका प्रश्न स्पष्ट नहीं है जैसा कि कहा गया है। आपका मतलब है कि कोई व्यक्ति आपके मशीन में 2 टीसीपी कनेक्शन खोल सकता है, एक को 50505 और दूसरे को 50506 पोर्ट करने के लिए, पहले फीड किए गए डेटा को भेजने Pऔर Pदूसरे टीसीपी कनेक्शन से आउटपुट पढ़ने की उम्मीद है ? UDP टैग क्यों?
स्टीफन चेजेलस

हाँ! जहां तक UDP, मुझे लगता है कि मैं चाहता था ports, लेकिन यह एक मौजूदा कीवर्ड नहीं था, इसलिए मैंने सोचा TCP, और मुझे लगता है कि मैंने UDPरिफ्लेक्स से जोड़ा ।
यमिन रोंग

जवाबों:


12

मेरा मतलब है कि कोई आपकी मशीन से 2 टीसीपी कनेक्शन खोल सकता है, एक को 50505 और दूसरे को 60606 पोर्ट करने के लिए, पहले वाले को पी को खिलाए जाने वाले डेटा को भेजें और दूसरे टीसीपी कनेक्शन से पी के आउटपुट को पढ़ने की उम्मीद करें, तो यह होगा:

< /dev/null nc -q -1 -l 50505 | P | nc -l 60606 > /dev/null

या साथ socat:

socat -u tcp-listen:50505,reuseaddr - | P | socat -u - tcp-listen:60606,reuseaddr

Pअपना आउटपुट वापस उसी कनेक्शन पर भेजने के लिए:

socat tcp-listen:50505,reuseaddr exec:P

3

आपको ncबंदरगाहों के साथ काम करने की आवश्यकता नहीं है । bashखुद ऐसा कर सकते हैं:

बैश विशेष रूप से पुनर्निर्देशन में उपयोग किए जाने पर कई फ़ाइलनामों को संभालता है, जैसा कि निम्नलिखित तालिका में वर्णित है:

/dev/fd/fd
    If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
    File descriptor 0 is duplicated.
/dev/stdout
    File descriptor 1 is duplicated.
/dev/stderr
    File descriptor 2 is duplicated.
/dev/tcp/host/port
   If host is a valid hostname or Internet address, and port is an integer 
   port number or service name, bash attempts to open a TCP connection to
   the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer 
    port number or service name, bash attempts to open a UDP connection to
    the corresponding socket.

3
/dev/tcpअक्सर अक्षम होता है और सुनने के लिए उपयोग नहीं किया जा सकता है । आप की जरूरत है zshअगर आप एक खोल कि सुन TCP सॉकेट बना सकते हैं चाहता हूँ।
स्टीफन चेजलस 22

@ स्टीफेनचैलेज मुझे स्वीकार करना होगा कि मैंने कभी कोशिश नहीं की। यह मैन पेज में इस प्रतिबंध के बारे में कुछ नहीं कहता है, क्या यह करता है?
हौके लैजिंग

अच्छा, आप इसे कैसे करेंगे? एक श्रोता सॉकेट अधिक स्वीकार्य सॉकेट बनाने के लिए एक दरवाजा है, पुनर्निर्देशन उसके लिए भी काम नहीं करता है। zsh उस के लिए एक बिल्डिन का उपयोग करता है ( ztcp -lसुनने के लिए और ztcp -aसुनने वाले सॉकेट पर कनेक्शन स्वीकार करने के लिए)।
स्टीफन चेजेलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.