जवाबों:
आदेश
netstat -antu
उपयोग में सभी tcp और udp पोर्ट दिखाएंगे। आउटपुट कुछ इस तरह दिखेगा:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN
स्थानीय पता क्षेत्र में कोलन के बाद की संख्या उपयोग में पोर्ट दिखाती है। यदि राज्य "लिस्टेन" है, तो इसका मतलब है कि एक पोर्ट जो आने वाले कनेक्शन के लिए उपयोग कर रहा है। यदि Local Address
फ़ील्ड में IP पता है 0.0.0.0
तो इसका मतलब है कि आने वाले कनेक्शन को किसी इंटरफ़ेस को दिए गए किसी भी IP पते पर स्वीकार किया जाएगा - इसलिए इसका मतलब है कि आपके मशीन के बाहर होने वाले कनेक्शन।
यदि यह कहा गया है localhost
या 127.0.0.1
यह केवल आपके मशीन से कनेक्शन स्वीकार करेगा।
इसके अतिरिक्त, यदि आप -p
पैरामीटर जोड़ते हैं , और इसे रूट के रूप में चलाते हैं, तो यह पोर्ट को खोलने वाली प्रक्रिया को दिखाएगा:
$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN 860/rpc.statd
उपयोग में होने के रूप में नहीं दिखाया गया कुछ भी मुफ्त है, हालांकि उपयोगकर्ता (अप्रकाशित खाते) केवल 1023 से ऊपर पोर्ट खोल सकते हैं।
-antu
-tuna
खोले गए बंदरगाहों के लिए जाँच करने का एक अच्छा और विश्वसनीय तरीका उपयोग कर रहा है ss
( पदावनत करने के लिए प्रतिस्थापन netstat
), यह एक स्क्रिप्ट में प्रयोग करने योग्य विशेषाधिकार (यानी sudo
) की आवश्यकता के बिना प्रयोग करने योग्य है ।
उपयोग: -l
सुनने के पोर्ट के लिए विकल्प , -n
DNS रिज़ॉल्यूशन को बायपास करने का विकल्प और स्रोत पोर्ट पर फ़िल्टर NN
: src :NN
( NN
उस पोर्ट द्वारा प्रतिस्थापित करें जिसे आप मॉनिटर करना चाहते हैं)। अधिक विकल्पों के लिए, देखेंman ss
ss -ln src :NN
उदाहरण:
[user@server ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[user@server ~]# ss -ln src :81
State Recv-Q Send-Q Local Address:Port Peer Address:Port
और एक स्क्रिप्ट में, grep का उपयोग करके, हम परीक्षण कर सकते हैं कि आउटपुट में हमारे द्वारा अनुरोधित पोर्ट शामिल है या नहीं। उपयोग में पोर्ट 80 के साथ उदाहरण (ऊपर देखें):
myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 80 is in use (result == 1)
पोर्ट 81 के साथ उदाहरण उपयोग में नहीं है (ऊपर देखें)
myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 81 is NOT in use (result == 0)
दूसरा रास्ता:
telnet localhost <PORT_NUMBER>
यदि पोर्ट मुफ्त है, तो आपको एक त्रुटि मिलेगी। यदि पोर्ट उपयोग में है तो टेलनेट कनेक्ट हो जाएगा।
( http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html पर पाया गया )