2011-12-04 15 views
30

एनसी, इको, xargs, आदि जैसे टूल का उपयोग करके एक इको सर्वर बैश स्क्रिप्ट कैसे लिखें, साथ ही टिकाऊ कनेक्शन वाले प्रत्येक क्लाइंट से अनुरोधों को संसाधित करने में सक्षम?बैश के साथ इको सर्वर कैसे बनाएं?

सबसे अच्छा है कि मैं अब तक आया गया है

nc -l -p 2000 -c 'xargs -n1 echo' 

है, लेकिन यह केवल एक ही कनेक्शन की अनुमति देता है।

+2

उबंटू 12.04 के 'एनसी' में' -c' विकल्प = (('netcat-openbsd' पैकेज) नहीं है। –

उत्तर

31

यदि आप एनसी के बजाय एनकैट का उपयोग करते हैं तो आपकी कमांड लाइन एकाधिक कनेक्शन के साथ ठीक काम करती है लेकिन (जैसा कि आपने बताया है) बिना -पी।

ncat -l 2000 -k -c 'xargs -n1 echo' 

एनटी http://nmap.org/ncat/ पर उपलब्ध है।

पीएस मूल के साथ हॉबिट के नेटकैट (एनसी) -सी ध्वज समर्थित नहीं है।

अपडेट: -k (--keep-open) अब एकाधिक कनेक्शन को संभालने के लिए आवश्यक है।

+0

धन्यवाद! यह काम करता है लेकिन मामूली परिवर्तन के साथ - हमें इसे "-p" विकल्प के बिना उपयोग करना चाहिए : ncat -l 2000 -c 'xargs -n1 echo' – Roskoto

+0

आप सही हैं। उत्तर संपादित –

+0

यह मेरे पर्यावरण में एक कनेक्शन भी रखता है ... –

17

यहां कुछ उदाहरण दिए गए हैं। ncat simple services

टीसीपी गूंज सर्वर

ncat -l 2000 --keep-open --exec "/bin/cat" 

यूडीपी गूंज सर्वर

ncat -l 2000 --keep-open --udp --exec "/bin/cat" 
+0

यह मेरे लिए काम करता है। –

+0

हालांकि सावधान रहें, कि '--udp' के साथ, ncat "कनेक्शन" को खुले रखेगा और यदि आप 100 कनेक्शन की डिफ़ॉल्ट सीमा को हिट नहीं करना चाहते हैं, तो आपको अधिकतम' --मैक्स- conns' विकल्प या "कनेक्शन" को एक निष्क्रिय टाइमआउट के बाद मरने दें जिसे आप '--idle-timeout' के साथ सेट कर सकते हैं। – josch

4

मामले Ncat में एक विकल्प नहीं है, socat भी काम करेगा:

socat TCP4-LISTEN:2000,fork EXEC:cat 

fork इसलिए आवश्यक है एकाधिक कनेक्शन स्वीकार किए जा सकते हैं। reuseaddr से TCP4-LISTEN जोड़ना सुविधाजनक हो सकता है।

1

netcat समाधान Ubunutu में पहले से स्थापित

netcat पहले से स्थापित Ubuntu 16.04 में netcat-openbsd से आता है, और कोई -c का विकल्प है, लेकिन मैनुअल एक समाधान देता है: तो फिर

sudo mknod -m 777 fifo p 
cat fifo | netcat -l -k localhost 8000 > fifo 

ग्राहक उदाहरण:

echo abc | netcat localhost 8000 

TODO: इनपुट स्ट्रिंग मान को कैसे संशोधित करें? निम्नलिखित किसी भी उत्तर वापस नहीं करता है:

cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo 

दूरस्थ खोल उदाहरण हालांकि काम करता है:

cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo 

मैं बस तथापि समवर्ती अनुरोधों से निपटने के लिए कैसे पता नहीं है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^