दूरस्थ होस्ट पर एक पोर्ट की स्थिति की जाँच करें [बंद]


158

मुझे एक कमांड लाइन की आवश्यकता है जो रिमोट होस्ट पर पोर्ट स्थिति की जांच कर सकती है। मैंने कोशिश की ping xxx.xxx.xxx.xxx:161लेकिन यह "होस्ट" को नहीं पहचानता। मैंने सोचा कि यह एक "अच्छा" उत्तर था जब तक कि मैंने एक मेजबान के खिलाफ एक ही कमांड नहीं किया था मुझे पता है कि पोर्ट खुला है। यह विंडोज़ पर एक बैच फ़ाइल के लिए है जो रिमोट पोर्ट की स्थिति की जांच करेगा, फिर एक कमांड चलाएगा जो उस रिमोट पोर्ट को जानकारी के लिए उपयोग करता है, फिर रिमोट पोर्ट फिर से कमांड की जांच करता है, फिर वह कमांड जो सूचना के लिए अगले सर्वर पर उस पोर्ट का उपयोग करता है , और इसी तरह। मैंने हर जगह देखा है और सोचा कि पिंग यह कर सकता है, लेकिन पिंग के विभिन्न संस्करण होने चाहिए, मुझे लगता है कि मैं जिस सर्वर पर यह कर रहा हूं वह उस विकल्प को नहीं दिखाता है।

बस चकल्स के लिए, मैंने एक वेबसाइट से वेब-आधारित रिमोट पोर्ट चेकर की कोशिश की - और परिणाम "समस्या" सर्वर और सही सर्वर दोनों के लिए सही थे। हालाँकि, मैं उस बैच में 500+ सर्वर IP के साथ चला सकते हैं।

क्या ऐसा कुछ है जो मैं कर सकता हूं वह सरल है? मेरी पर्ल स्किल्स बहुत ही रस्टी हैं (इसका इस्तेमाल करें या इसे खो दें), बैच को छोड़कर किसी भी अन्य विंडोज बेस्ड लैंग्वेज को नहीं जानते हैं। यूनिक्स मेरा कौशल है, लेकिन इसे विडो सर्वर 2003 से निष्पादित किया जाना चाहिए।


5
आप यह पूछने की कोशिश कर सकते हैं serverfault.com पर
जॉन रस

1
किसी ने पहले ही ऐसा कर लिया था: serverfault.com/questions/309357/ping-a-specific-port
Vadzim

1
जैसे ही यह प्रश्न बंद होता है, मैंने यहाँ
npocmaka


खिड़कियाँ ps> tnc xxx.xxx.xxx.xxx -port 161
मोसमल शाहस्वान

जवाबों:


151

आप एक पोर्ट स्कैनर की तलाश में हैं जैसे कि नैंप या नेटकैट , ये दोनों ही विंडोज, लिनक्स और ओएस एक्स के लिए उपलब्ध हैं।

उदाहरण के लिए, एक ज्ञात आईपी पर टेलनेट के लिए जाँच करें:

nmap -A 192.168.0.5/32 -p 23

उदाहरण के लिए, host.example.com पर 20 से 30 तक खुले पोर्ट देखें:

nc -z host.example.com 20-30

ये दोनों विंडोज के लिए उपलब्ध हैं।
ग्लेन

1
आपके nmap कमांड को स्पेस के बिना "-p23" वास्तविक होना चाहिए। नैंप प्रत्येक इकाई को तुरंत एक अलग स्कैन गंतव्य के रूप में एक ध्वज द्वारा पूर्ववर्ती नहीं मानते हैं
ब्रैंडन लेबेडेव

14
होना चाहिए nc -zv host.example.com 20-30। अन्यथा कोई आउटपुट नहीं है
आर्येह बीट्ज

1
विकल्प -zके लिए ncलिनक्स पर उपलब्ध नहीं है।
valentin_nasta

1
@valentin_nasta हाँ, यह है, शायद आप netcat के किस संस्करण का उपयोग कर रहे हैं (ग्नू या ओपनबेक) पर निर्भर करता है। यहाँ मेरे आर्क लाइनक्स सिस्टम पर nc (ओपनबीडीएस संस्करण) के लिए मैन पेज से प्रासंगिक लाइन है: -z निर्दिष्ट करता है कि एनसी को केवल डेमॉन को सुनने के लिए स्कैन करना चाहिए, उन्हें कोई डेटा भेजे बिना। इस विकल्प को -l विकल्प के साथ संयोजन में उपयोग करने के लिए एक त्रुटि है
pgoetz

126

कमांड प्रॉम्प्ट में, आप कमांड टेलनेट का उपयोग कर सकते हैं .. उदाहरण के लिए, पोर्ट 19 के साथ आईपी 192.168.10.1 से कनेक्ट करने के लिए,

telnet 192.168.10.1 80

विंडोज 7 में और इसके बाद के संस्करण टेलनेट सक्षम करने के लिए क्लिक करें । लिंक किए गए लेख से, नियंत्रण कक्ष के माध्यम से टेलनेट को सक्षम करें -> प्रोग्राम और विशेषताएं -> विंडोज़ विशेषताएं -> टेलनेट क्लाइंट, या बस इसे एक व्यवस्थापक प्रॉम्प्ट में चलाएं:

dism /online /Enable-Feature /FeatureName:TelnetClient

3
यह सबसे आसान तरीका है अगर टेलनेट विंडोज डिवाइस पर स्थापित है
shonky linux user

30
... और इसे विंडोज़ पर जोड़ने के लिए 2 सेकंड लगते हैं (मेरे मामले में 8.1)> कंट्रोल पैनल> ऐड
प्रोग्रेस

14
बस जानकारी के लिए: यदि पोर्ट खुला नहीं है: ##### से कनेक्ट हो रहा है ... पोर्ट #### पर होस्ट से कनेक्शन नहीं खोल सकता: कनेक्ट विफल; और अगर बंदरगाह खुला है आप (Ctrl +] फिर 'छोड़') टेलनेट में पहुंच जाएंगे
blackstrype

27

स्क्रिप्टिंग उद्देश्यों के लिए, मैंने पाया है कि curlकमांड यह कर सकता है, उदाहरण के लिए:

$ curl -s localhost:80 >/dev/null && echo Connected. || echo Fail.
Connected.
$ curl -s localhost:123 >/dev/null && echo Connected. || echo Fail.
Fail.

संभवतः यह सभी सेवाओं के लिए काम नहीं करेगा, जैसा curlकि कुछ मामलों में अलग-अलग त्रुटि कोड वापस कर सकते हैं (टिप्पणी के अनुसार), इसलिए निम्न स्थिति को जोड़ने से विश्वसनीय तरीके से काम किया जा सकता है:

[ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL

नोट: -m55 सेकंड की अधिकतम कनेक्ट टाइमआउट सेट करने के लिए जोड़ा गया ।

यदि आप यह भी जाँचना चाहते हैं कि क्या होस्ट मान्य है, तो आपको 6बाहर निकलने के लिए भी कोड की जाँच करनी होगी :

$ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL
curl: (6) Could not resolve host: foo
FAIL

लौटे त्रुटि कोड का निवारण करने के लिए, बस चलाएं: curl host:portजैसे:

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused

देखें: man curlनिकास कोड की पूरी सूची के लिए।


दुर्भाग्य से यह मेरे लिए काम नहीं करता है (कम से कम ओएस एक्स में बैश पर)।
माइक एटलस

1
एक कस्टम सेवा। FWIW यह काम करता है: curl $IP:$PORTपैदावार: curl: (52) Empty reply from server(बनाम curl: (7) Failed to connect) लेकिन बहुत पसंद है nc, मैं | grep Emptyइन आउटपुट स्टेटमेंट्स के लिए नहीं कर सकता जैसे कोई उम्मीद कर सकता है (कुछ के बारे में newlines या तत्काल आउटपुट की कमी?)। मुझे लगता है कि आपकी लाइन एग्जिट कोड के आधार पर एक सशर्त है, है ना? मैं एल कैप पर हूं; शायद अन्य संस्करणों या OSes के -1बजाय विफलता स्थिति से बाहर निकलता है 52?
माइक एटलस

हाँ, यह करना होगा। curl -s $IP:$PORT >/dev/null; if [ $? -eq 52 ]; then echo "Connected."; else echo "Fail."; fi
माइक एटलस

सवाल विंडोज, जो स्पष्ट रूप से नहीं है के बारे में था जैसे / dev / बातिल
आर्थर Tacca

@ArthurTacca आप हमेशा लिनक्स (WSL) के लिए विंडोज सबसिस्टम का उपयोग कर सकते हैं।
केनोरब

23

प्रेस Windows+ Rप्रकार cmdऔरEnter

कमांड प्रॉम्प्ट प्रकार में

telnet "machine name/ip" "port number"

यदि पोर्ट खुला नहीं है, तो यह संदेश प्रदर्शित होगा:

"Connecting To "machine name"...Could not open connection to the host, on port "port number":

अन्यथा आपको खोले गए पोर्ट में ले जाया जाएगा (खाली स्क्रीन प्रदर्शित होगी)


7
ध्यान दें कि आधुनिक विंडोज़ सिस्टम पर डिफ़ॉल्ट रूप से टेलनेट स्थापित नहीं है। आपको इसे ऐड / रिमूव विंडोज फीचर्स कंट्रोल पैनल से इंस्टॉल करना होगा।
ग्रेग

1
@Greg या ऑनलाइन टूल का उपयोग कर ऐसे telnet-online.net
oz

2
@ सही, जब तक आप आंतरिक सर्वर की स्थिति की जाँच नहीं कर रहे हैं
ग्रेग

विंडोज 10 पर काम करता है
गौरव

19

Nc कमांड का प्रयोग करें,

nc -zv <hostname/ip> <port/port range>

For example,
nc -zv localhost 27017-27019
or
nc -zv localhost 27017

आप टेलनेट कमांड का भी उपयोग कर सकते हैं

telnet <ip/host> port


2

मुझे लगता है कि आप Hping ( http://www.hping.org/ ) की तलाश कर रहे हैं , जिसमें एक विंडोज संस्करण है।

"इंटरफ़ेस पिंग (8) यूनिक्स कमांड से प्रेरित है, लेकिन हिप्पिंग केवल ICMP इको अनुरोध भेजने में सक्षम नहीं है। यह TCP, UDP, ICMP का समर्थन करता है ..."

यह बहुत उपयोगी है यदि आप यह देखना चाहते हैं कि टीसीपी पोर्ट को अवरुद्ध करने वाले मार्ग की तरह (जैसे फ़ायरवॉल द्वारा), जहां ICMP नहीं हो सकता है।


2

बैश में, आप छद्म डिवाइस फ़ाइलों का उपयोग कर सकते हैं जो संबंधित सॉकेट के लिए एक टीसीपी कनेक्शन खोल सकते हैं। वाक्य-विन्यास है /dev/$tcp_udp/$host_ip/$port

मेमेकैच्ड चल रहा है या नहीं, यह जांचने के लिए सरल उदाहरण है:

</dev/tcp/localhost/11211 && echo Port open || echo Port closed

यहां यह देखने के लिए एक और परीक्षण है कि क्या विशिष्ट वेबसाइट सुलभ है:

$ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful.
Connection successful.

अधिक जानकारी के लिए, जाँच करें: उन्नत बैश-स्क्रिप्टिंग गाइड: अध्याय 29। /devऔर/proc

संबंधित: सुपरयूजर में रिमोट सिस्टम पर एक पोर्ट (टेलनेट के बिना) उपलब्ध है , तो टेस्ट करें

अधिक उदाहरणों के लिए, देखें: कैसे एक bash शेल (लेख) में एक टीसीपी / यूडीपी सॉकेट खोलें


1
वाह, यह जीनियस है! मैं नहीं जानता कि यह सिर्फ मार के साथ संभव है। मेरे जैसे लोगों के लिए सुविधाजनक है, जिनके पास केवल विंडोज़ पर गिट बैश है और दूसरी सेवा स्थापित नहीं करना चाहते हैं।
dotslashlu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.