Si je veux savoir quel processus écoute sur quel socket, je peux utiliser netstat / TCPview et le verrai immédiatement. Cependant, il est possible de se lier à une adresse sans l'écouter. Si cela est fait, il n'apparaît pas dans netstat / TCPview, mais bloque le socket.
Exemple Python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
Le port est maintenant lié et toute tentative d'exécution du même code dans une seconde instance alors que la première est toujours en cours d'exécution entraînera une erreur. Cependant, à moins que vous ne commenciez réellement à écouter sur ce port en utilisant
s.listen(1)
le port n'apparaît pas dans netstat / TCPview.
La question est: est-il possible de voir quels ports sont liés (mais pas à l'écoute), et quel processus les lie?
L'arrière - plan de c'est que j'ai eu une gamme mobile de ports de 1976 qui ne peuvent être liés , et je veux savoir ce qui cause cela. Dans l'intervalle, j'ai déterminé par essais et erreurs que le partage de connexion Internet bloquait ces ports, mais je suis toujours curieux de savoir la réponse à cette question.
Edit: En raison de la demande populaire, voici le code que j'ai utilisé pour trouver ces ports:
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"
(vous voudrez peut-être diriger la sortie vers grep et filtrer pour FAIL uniquement)