Se voglio scoprire quale processo è in ascolto su quale socket, posso usare netstat / TCPview e lo vedrò immediatamente. Tuttavia, è possibile associare un indirizzo senza ascoltare. In questo caso, non viene visualizzato in netstat / TCPview, ma blocca il socket.
Esempio Python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
La porta è ora associata e il tentativo di eseguire lo stesso codice in una seconda istanza mentre la prima è ancora in esecuzione comporterà un errore. Tuttavia, a meno che tu non inizi effettivamente ad ascoltare su quella porta usando
s.listen(1)
la porta non viene visualizzata in netstat / TCPview.
La domanda è: è possibile vedere quali porte sono collegate (ma non in ascolto) e quale processo le sta vincolando?
Lo sfondo di questo è che ho ho avuto una serie commovente di 1976 porte che non possono essere legati , e voglio sapere che cosa provoca questo. Nel frattempo, ho scoperto, attraverso prove ed errori, che la Condivisione connessione Internet stava bloccando quelle porte, ma sono ancora curioso di sapere la risposta a questa domanda.
Modifica: a causa della richiesta popolare, ecco il codice che ho usato per trovare quelle porte:
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"
(potresti voler reindirizzare l'output a grep e filtrare solo per FAIL)