टीसीपी श्रोता कैसे बनाएं?


40

परिचय: मैंने एक बैश फ़ंक्शन बनाया है जो यह जांचने में सक्षम है कि क्या कोई पोर्ट उपलब्ध है और एक निश्चित अधिकतम पोर्ट संख्या तक गलत होने पर इसे 1 से बढ़ाता है। उदाहरण के लिए, यदि पोर्ट 500 अनुपलब्ध है, तो 550 तक 501 की उपलब्धता की जाँच की जाएगी।

उद्देश्य: इस बैश फ़ंक्शन का परीक्षण करने के लिए मुझे कई पोर्ट बनाने की आवश्यकता है जो लिस्टेन राज्य में हैं।

प्रयास: Windows पर इन PowerShell आदेशों का उपयोग करके एक LISTEN पोर्ट बनाना संभव है :

PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP    0.0.0.0:1234           0.0.0.0:0              LISTENING       InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>

इसके आधार पर मैं एक ऐसी कमांड के बारे में सोचने की कोशिश कर रहा था, जो CentOS पर भी ऐसा ही कर सकती थी, लेकिन मुझे नहीं पता कि मैंने इस मुद्दे को हल करने वाले समाधान को ढूंढे बिना Google को क्यों और कैसे शुरू किया।

अपेक्षित उत्तर : मैं उस उत्तर को स्वीकार करूंगा और उसे बढ़ाऊंगा जिसमें एक कमांड है जो लिस्टेन पोर्ट बनाने में सक्षम है और एक बार कमांड चलाने के बाद पोर्ट लिस्टेन स्टेट में रहना चाहिए, अर्थात:

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*

एक तरफ ध्यान दें: यह सब नृत्य के माध्यम से जाने के बिना सुनने वाले बंदरगाहों को खोजना संभव है। लिनक्स पर netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu:। पर * बीएसडी netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu:।
lcd047

जवाबों:


40

आप nc -lएक विधि के रूप में उपयोग कर सकते हैं जो आप देख रहे हैं। कुछ कार्यान्वयन में ncएक -Lविकल्प होता है जो कनेक्शन को बनाए रखने की अनुमति देता है।

यदि आपको केवल थोड़ी देर के लिए उनकी आवश्यकता है, तो आप इस आदेश को forलूप में खोल सकते हैं और इस तरह से बंदरगाहों का एक गुच्छा खोला है।

यदि आपको इन लंबे समय तक खोले जाने की आवश्यकता है तो आप डेमॉन बनाने के लिए सुपर सर्वर में से एक का उपयोग कर सकते हैं।


1
इसके बजाय -Lमेरा सुझाव है: -k, --keep-openमोड सुनने में एक से अधिक कनेक्शन स्वीकार
मैनुअल Durando

37

आप Netcat का उपयोग करके एक पोर्ट श्रोता बना सकते हैं।

root@ubuntu:~# nc -l 5000

आप यह भी देख सकते हैं कि नेटस्टैट कमांड का उपयोग करके पोर्ट खुला है या नहीं।

root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp        0      0 0.0.0.0:5000             0.0.0.0:*               LISTEN      0          710327      17533/nc

आप nc से भी देख सकते हैं:

नेटसैट सर्वर श्रोता:

nc -l localhost 5000

Netcat ग्राहक:

root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

यदि पोर्ट खुला नहीं है

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused

4
मुझे इसके साथ पोर्ट निर्दिष्ट करना पड़ा -pया यह काम नहीं कर रहा था:nc -l -p 1234
लीखिम

nc -l 12345 ने ubuntu 16.04
युएन शि

उन लोगों के लिए /bin/nc --> nc.traditional(जैसे डेबियन), -pविकल्प का उपयोग करें , जैसा कि @Lhakkim ने सलाह दी है, ऊपर।
एकॉस्टिस

6

Netcat का उपयोग करके सुनें।

# nc -l 5555

Ss का उपयोग करके जांचें

# ss -nat|grep 5555
LISTEN     0      1                         *:5555                     *:*
#

0

ध्यान दें कि डेबियन के netcatपैकेज में एक अलग कार्यान्वयन है जहां (कम से कम) आपको -pविकल्प के माध्यम से पोर्ट प्रदान करने की आवश्यकता है और -kविकल्प काम नहीं करता है। आप डॉकर का उपयोग करके इस समस्या में भाग सकते हैं।

sudo apt install -y netcat

nc -l -p 1337

openbsd-netcatजहाँ -kविकल्प काम करता है, उसके बजाय आप उपयोग करने पर विचार कर सकते हैं ।


0

एक डमी पोर्ट को खोलने के लिए अजगर कोड के नीचे सहायक है

'' 'सिंपल सॉकेट सर्वर थ्रेड्स का उपयोग करते हुए' '' आयात सॉकेट आयात sys HOST = '' # प्रतीकात्मक नाम, जिसका अर्थ है कि सभी उपलब्ध इंटरफेस PORT = 5500 # गैर-विशेषाधिकार प्राप्त पोर्ट s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) प्रिंट 'सॉकेट बनाया'

स्थानीय होस्ट और पोर्ट के लिए सॉकेट को बांधें

कोशिश करें: s.bind ((HOST, PORT)) को सॉकेट के अलावा। संदेश के रूप में: प्रिंट 'Bind विफल। त्रुटि कोड: '+ str (संदेश [0]) +' संदेश '+ संदेश [1] sys.exit () प्रिंट' सॉकेट बाइंड पूरा '

सॉकेट पर सुनना शुरू करें

s.listen (10) प्रिंट 'सॉकेट अब सुन रहा है'

अब क्लाइंट के साथ बात करते रहें

जबकि 1: # कनेक्शन को स्वीकार करने के लिए - कॉल कॉन, addr = s.accept () प्रिंट 'कनेक्टेड' + Addr [0] + ':' + str (addr [1]) s.close ()

फ़ाइल को सहेजें और इसे अजगर कमांड के साथ चलाएं जैसा कि नीचे दिखाया गया है

~] # python portlistener.py सॉकेट ने सॉकेट बाइंड को पूरा सॉकेट बनाया जो अब सुन रहा है

फिर आप आवश्यक मशीन से सत्यापित कर सकते हैं।

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