如果我想找出哪个进程正在侦听哪个套接字,则可以使用netstat / TCPview并立即看到它。但是,可以不侦听而绑定到地址。如果这样做,它不会显示在netstat / TCPview中,但是会阻塞套接字。
Python示例:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
现在已绑定端口,在第一个实例仍在运行时尝试在第二个实例中执行相同的代码将导致错误。但是,除非您实际开始使用
s.listen(1)
该端口未显示在netstat / TCPview中。
问题是: 是否可以查看绑定了哪些端口(但未侦听),以及绑定了哪个进程?
这样做的背景是,我已经有一个1976个端口不能绑定移动范围,我想知道是什么原因造成这一点。同时,通过反复试验,我确定Internet连接共享正在阻止这些端口,但我仍然对该问题的答案感到好奇。
编辑:由于受欢迎的请求,这是我用来查找那些端口的代码:
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"
(您可能希望将输出通过管道传递到grep并仅针对FAIL进行过滤)