अगर मुझे यह पता लगाना है कि क्या प्रक्रिया किस सॉकेट पर सुनाई दे रही है, तो मैं netstat / TCPview का उपयोग कर सकता हूं और तुरंत इसे देखूंगा। हालांकि, सुनने के बिना किसी पते पर बांधना संभव है। यदि यह किया जाता है, तो यह netstat / TCPview में दिखाई नहीं देता है, लेकिन सॉकेट को ब्लॉक करता है।
पायथन उदाहरण:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
पोर्ट अब बाध्य है, और एक ही कोड को दूसरे उदाहरण में निष्पादित करने का प्रयास करते हुए पहले चल रहा है, जिसके परिणामस्वरूप त्रुटि होगी। हालांकि, जब तक आप वास्तव में उस पोर्ट का उपयोग करके सुनना शुरू नहीं करते हैं
s.listen(1)
पोर्ट netstat / TCPview में दिखाई नहीं देता है।
सवाल यह है कि क्या यह देखना संभव है कि बंदरगाह क्या है (लेकिन सुनना नहीं), और कौन सी प्रक्रिया उन्हें बांध रही है?
इसकी पृष्ठभूमि यह है कि मेरे पास 1976 बंदरगाहों की एक चलती रेंज है जो बाध्य नहीं हो सकती है , और मैं जानना चाहता हूं कि इसके कारण क्या हैं। इस बीच, मैंने परीक्षण और त्रुटि के माध्यम से निर्धारित किया कि इंटरनेट कनेक्शन साझा करना उन बंदरगाहों को अवरुद्ध कर रहा था, लेकिन मैं अभी भी इस प्रश्न के उत्तर के बारे में उत्सुक हूं।
संपादित करें: लोकप्रिय अनुरोध के कारण, यहां उन पोर्ट को खोजने के लिए उपयोग किया गया कोड है:
import time
import socket
for i in range(0,65536):
try:
print "Listening on port", i, '...',
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('0.0.0.0', i))
serversocket.listen(5)
#time.sleep(0.1)
serversocket.close()
print "ok"
except:
print "FAIL"
(आप आउटपुट को केवल grep और फ़िल्टर करने में विफल करना चाहते हैं)