Wenn ich herausfinden will, welcher Prozess auf welchem Socket lauscht , kann ich netstat / TCPview verwenden und sehe es sofort. Es ist jedoch möglich, eine Verbindung zu einer Adresse herzustellen, ohne sie abzuhören. In diesem Fall wird es nicht in netstat / TCPview angezeigt, sondern blockiert den Socket.
Python-Beispiel:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
Der Port ist jetzt gebunden, und der Versuch, denselben Code in einer zweiten Instanz auszuführen, während die erste noch ausgeführt wird, führt zu einem Fehler. Es sei denn, Sie lauschen tatsächlich über diesen Port
s.listen(1)
Der Port wird in netstat / TCPview nicht angezeigt.
Die Frage ist: Ist es möglich zu sehen, welche Ports gebunden sind (aber nicht abhören) und welcher Prozess sie bindet?
Der Hintergrund dafür ist , dass ich habe einen hatte Bewegungsbereich von 1976 Ports , die nicht gebunden werden können , und ich möchte wissen , was dies verursacht. In der Zwischenzeit habe ich durch Ausprobieren festgestellt, dass die gemeinsame Nutzung der Internetverbindung diese Ports blockiert, bin aber immer noch neugierig auf die Antwort auf diese Frage.
Bearbeiten: Auf vielfachen Wunsch ist hier der Code, mit dem ich diese Ports gefunden habe:
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"
(Möglicherweise möchten Sie die Ausgabe an grep leiten und nur nach FAIL filtern.)
Antworten:
du solltest benutzen
mit
TableClass-Wert = TCP_TABLE_OWNER_PID_ALL "oder" TCP_TABLE_OWNER_PID_CONNECTIONS "oder" TCP_TABLE_OWNER_PID_LISTENER "
pTcpTable-Struktur -> MIB_TCPTABLE_OWNER_PID
Abhängig von den Informationen, die Sie abrufen möchten
BEARBEITEN:
TCP_TABLE_OWNER_PID_ALL gibt MIB_TCPTABLE_OWNER_PID Struktur , die ein Array von MIB_TCPROW_OWNER_PID Strukturen ist , wo jeder
dwState
haben sollte ,MIB_TCP_STATE_CLOSED
wenn gebunden und nicht hören, diese Struktur auch AngebotedwLocalAddr
unddwLocalPort
quelle
In neueren Versionen von netstat gibt es jetzt einen Befehlszeilenparameter -q, der diese Sockets anzeigt.
Anwendungsbeispiel:
Es scheint, dass es in dieser Situation keine öffentliche API gibt, um die Sockets abzurufen. Siehe meine Frage in StackOverflow .
quelle