在Mac OS X(10.9)上,终端中的netstat
命令打印以下内容。在这种情况下,*.*
的含义是什么?这是客户端还是服务器套接字?如何找出哪个进程打开此连接,以及出于什么原因?
$ netstat -an
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Adress Foreign Address (state)
[...]
udp4 0 0 *.* *.*
udp46 0 0 *.* *.*
[...]
答案 0 :(得分:0)
*:*
表示任何网络接口上的任何IP地址。
要找出哪个进程拥有哪个连接,请将-p
传递给netstat,例如: netstat -anp
。您可能需要sudo
。
答案 1 :(得分:0)
UDP的*.*
列中的Local Adress
表示套接字尚未绑定到特定端口。
AFAIK这样的插座无法真正用于任何事情。 如果你试图用它来接收它,它就不会听任何东西。如果您尝试使用它进行发送,它将自动绑定到端口。
所以我唯一的结论就是他们保留了用于发送数据的套接字,但是还没有数据发送到它们(因为它是第一次调用绑定端口的sendto
)
您可以使用lsof
找到拥有套接字的进程。它有很多过滤选项,但我通常发现只是grep更容易,如下:
sudo lsof -n | grep -F "UDP *:*"
-n
关闭dns分辨率,否则可能需要一段时间。
编辑:也可能是调用ioctl(..., SIOCGIFMEDIA)
或类似内容获取网络接口信息。