Si quiero averiguar qué proceso está escuchando en qué socket, puedo usar netstat / TCPview y lo veré de inmediato. Sin embargo, es posible enlazar a una dirección sin escuchar. Si se hace esto, no aparece en netstat / TCPview, pero bloquea el socket.
Ejemplo de Python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
El puerto ahora está vinculado, e intentar ejecutar el mismo código en una segunda instancia mientras la primera aún se está ejecutando dará como resultado un error. Sin embargo, a menos que realmente comience a escuchar en ese puerto usando
s.listen(1)
el puerto no aparece en netstat / TCPview.
La pregunta es: ¿es posible ver qué puertos están vinculados (pero no están escuchando) y qué proceso los vincula?
El fondo de esto es que yo he tenido un rango de movimiento de 1976 puertos que no se pueden unir , y quiero saber lo que causa esto. Mientras tanto, determiné mediante prueba y error que la Conexión compartida a Internet estaba bloqueando esos puertos, pero todavía tengo curiosidad acerca de la respuesta a esta pregunta.
Editar: debido a una solicitud popular, aquí está el código que utilicé para encontrar esos puertos:
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"
(es posible que desee canalizar la salida a grep y filtrar solo para FAIL)