Jeśli chcę dowiedzieć się, jaki proces nasłuchuje na jakim gnieździe, mogę użyć netstat / TCPview i natychmiast go zobaczę. Możliwe jest jednak powiązanie z adresem bez odsłuchiwania. Jeśli to zrobisz, nie pojawi się w netstat / TCPview, ale zablokuje gniazdo.
Przykład w języku Python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
Port jest teraz powiązany, a próba wykonania tego samego kodu w drugiej instancji, gdy pierwsza jest nadal uruchomiona, spowoduje błąd. Jednak dopóki nie zaczniesz nasłuchiwać na tym porcie za pomocą
s.listen(1)
port nie pojawia się w netstat / TCPview.
Pytanie brzmi: czy można zobaczyć, które porty są powiązane (ale nie nasłuchują) i który proces je wiąże?
Tłem tego jest to, że miałem ruchomy zakres portów z 1976 r., Których nie można związać , i chcę wiedzieć, co to powoduje. W międzyczasie ustaliłem metodą prób i błędów, że Udostępnianie połączenia internetowego blokuje te porty, ale nadal jestem ciekawy odpowiedzi na to pytanie.
Edycja: Z powodu popularnego żądania, oto kod, którego użyłem do znalezienia tych portów:
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"
(możesz przesłać dane wyjściowe do grep i filtrować tylko dla FAIL)
Odpowiedzi:
powinieneś użyć
z
TableClass value = TCP_TABLE_OWNER_PID_ALL ”lub„ TCP_TABLE_OWNER_PID_CONNECTIONS ”lub„ TCP_TABLE_OWNER_PID_LISTENER
Struktura pTcpTable -> MIB_TCPTABLE_OWNER_PID
w zależności od informacji, które chcesz odzyskać
EDYTOWAĆ:
TCP_TABLE_OWNER_PID_ALL zwraca strukturę MIB_TCPTABLE_OWNER_PID, która jest tablicą struktur MIB_TCPROW_OWNER_PID, w których każdy
dwState
powinien mieć,MIB_TCP_STATE_CLOSED
gdy jest związany i nie nasłuchuje, ta struktura oferuje równieżdwLocalAddr
idwLocalPort
źródło
W najnowszych wersjach netstat istnieje teraz parametr wiersza polecenia -q, który pokazuje te gniazda.
Przykład zastosowania:
Wygląda na to, że nie ma publicznego interfejsu API do pobierania gniazd w takiej sytuacji. Zobacz moje pytanie w StackOverflow .
źródło