Se eu quiser descobrir qual processo está escutando em qual soquete, posso usar o netstat / TCPview e o vejo imediatamente. No entanto, é possível vincular a um endereço sem ouvir. Se isso for feito, ele não será exibido no netstat / TCPview, mas bloqueará o soquete.
Exemplo de Python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
A porta está agora ligada e a tentativa de executar o mesmo código em uma segunda instância enquanto a primeira ainda estiver em execução resultará em um erro. No entanto, a menos que você realmente comece a ouvir nessa porta usando
s.listen(1)
a porta não aparece no netstat / TCPview.
A questão é: é possível ver quais portas estão ligadas (mas não estão escutando) e qual processo as está vinculando?
O fundo deste é que eu já tinha uma faixa de movimento de 1976 portas que não podem ser vinculados , e eu quero saber o que causa isso. Enquanto isso, determinei por tentativa e erro que o compartilhamento de conexão com a Internet estava bloqueando essas portas, mas ainda estou curioso sobre a resposta a essa pergunta.
Edit: Devido ao pedido popular, aqui está o código que eu usei para encontrar essas portas:
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"
(você pode canalizar a saída para grep e filtrar apenas FAIL)