यह निर्धारित करना कि किस प्रक्रिया ने विंडोज पर एक पोर्ट (बिना सुने) को बाध्य किया है


12

अगर मुझे यह पता लगाना है कि क्या प्रक्रिया किस सॉकेट पर सुनाई दे रही है, तो मैं 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 और फ़िल्टर करने में विफल करना चाहते हैं)


आप इस स्क्रिप्ट को 0 से 65535 तक लूप कर सकते हैं, उस पोर्ट को लॉग ऑन करें जो विफल रहता है और नेटस्टैट पोर्ट के साथ परिणाम की तुलना करें। नेटस्टैट में सूचीबद्ध नहीं होना चाहिए कि आप क्या देख रहे हैं। मैं किसी भी उपकरण या तकनीक के बारे में नहीं जानता जो आपको दिखाएगा कि उन बंदरगाहों के पीछे क्या प्रक्रिया है, जब तक कि यह नहीं सुन रहा है।
केदार

@ केदार: ठीक यही है कि मैंने यह पता लगाने के लिए कि कौन से बंदरगाह प्रभावित हैं।
जन स्कीज़बल

@ लिज़: कोड पोस्ट किया गया।
Jan Schejbal

क्या आप इसे उत्तर के रूप में पोस्ट कर सकते हैं? संदर्भ के रूप में अच्छा होगा :)
लीज़

@ लिज़: यह सवाल का जवाब नहीं है। यह दिखाता है कि कौन से पोर्ट प्रभावित हैं, लेकिन उन पर कब्जा नहीं है।
Jan Schejbal

जवाबों:


1

आपको उपयोग करना चाहिए

DWORD GetExtendedTcpTable (PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserve);

साथ में

TableClass मान = TCP_TABLE_OWNER_PID_ALL "या" TCP_TABLE_OWNER_PID_CONNECTIONS "या" TCP_TABLE_OWNER_PID_LISTENER

pTcpTable संरचना -> MIB_TCPTABLE_OWNER_PID

उस जानकारी के आधार पर जिसे आप प्राप्त करना चाहते हैं

संपादित करें:

TCP_TABLE_OWNER_PID_ALL MIB_TCPTABLE_OWNER_PID संरचना है कि प्रत्येक जहां MIB_TCPROW_OWNER_PID संरचनाओं की एक सरणी है रिटर्न dwStateहोना चाहिए MIB_TCP_STATE_CLOSEDजब बाध्य और नहीं सुन रहा है, इस संरचना भी प्रदान करता है dwLocalAddrऔरdwLocalPort

typedef struct _MIB_TCPROW_OWNER_PID {
  DWORD dwState;
  DWORD dwLocalAddr;
  DWORD dwLocalPort;
  DWORD dwRemoteAddr;
  DWORD dwRemotePort;
  DWORD dwOwningPid;
} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;

यह केवल उन सॉकेट्स को सूचीबद्ध करता है जो बाध्य और सुनने वाले दोनों हैं, लेकिन सवाल विशेष रूप से सॉकेट्स के बारे में था जो बाध्य हैं लेकिन सुन नहीं रहे हैं।
ल्यूक डंस्टन

क्या आप जोर दे रहे हैं या पूछ रहे हैं ??? संपादित देखें
पैट

जब मैं pastebin.com/vaHMVRQR चलाता हूं तो मुझे बिना सुने (Win7) बाँधने के लिए टेबल में कुछ भी नहीं मिलता है
ल्यूक डंस्टन

शामिल संरचनाओं में विशेष संरेखण हैं, आपको उन्हें फिर से परिभाषित नहीं करना चाहिए; आपको उन लोगों को संदर्भित करना चाहिए जो एमएस द्वारा परिभाषित हैं। इसके अलावा अगर आप शुरू में एमएस एपीआई पायथन का परीक्षण करना चाहते हैं, तो यह सही उपकरण नहीं है; आपको इसके बजाय C / C ++ का उपयोग करना चाहिए।
पैट

प्रदर्शित कोड, सॉकेट के बारे में जानकारी नहीं देता है जो बाध्य हैं लेकिन असंबद्ध हैं;
नेटस्टैट के

0

नेटस्टैट के हाल के संस्करणों में अब एक कमांड लाइन पैरामीटर -q है जो उन सॉकेट्स को दिखाता है।

$ netstat -?

Displays protocol statistics and current TCP/IP network connections.

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]

  -a            Displays all connections and listening ports.
  -b            Displays the executable involved in creating...
  ...
  -p proto      Shows connections for the protocol specified...
  -q            Displays all connections, listening ports, and bound
                nonlistening TCP ports. Bound nonlistening ports may or may not
                be associated with an active connection.
  -r            Displays the routing table.
  ...

उपयोग का उदाहरण:

$ netstat -nq -p tcp

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:7              0.0.0.0:0              LISTENING
  TCP    0.0.0.0:9              0.0.0.0:0              LISTENING
  TCP    0.0.0.0:13             0.0.0.0:0              LISTENING
  ...

 TCP    192.168.122.157:50059  54.213.66.195:443      ESTABLISHED
  TCP    0.0.0.0:49676          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49700          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49704          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49705          0.0.0.0:0              BOUND
  ...

ऐसा लगता है कि उस स्थिति में सॉकेट प्राप्त करने के लिए कोई सार्वजनिक एपीआई नहीं है। StackOverflow में मेरा प्रश्न देखें ।

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