以编程方式列出所有tcp和udp连接以及pid

时间:2018-10-04 09:46:17

标签: macos sockets tcp bsd sysctl

当前,我正在为macOS创建一个监视工具(c ++ / c可执行文件),它将收集您的所有网络信息。目前停留在我应该收集所有活动的TCP和UDP连接以及使用进程的进程ID的部分上。类似于netstat -anv -p TCP命令输出。一种方法是使用netstat实用程序本身并捕获输出,由于性能限制,我无法使用此方法。

我发现的另一种选择是将Sysctl API与net.inet.tcp.pcblist mib一起使用以获取所有活动的tcp连接。借助net stat源代码,我能够解析此命令的输出。问题是,通过使用公共定义的结构,我无法获取使用进程的进程ID。旧版本的netstat不打印PID,而新版本则打印PID。但是新版本的问题在于,它使用的私有结构不是标准头文件的一部分。我使用的mib是“ net.inet.tcp.pcblist_n”,我不想冒险使用此私有结构。是否可以使用标准结构来提取PID的其他方法?

新来源:https://opensource.apple.com/source/network_cmds/network_cmds-543.50.4/netstat.tproj/inet.c.auto.html

旧资料来源:https://opensource.apple.com/source/network_cmds/network_cmds-85/netstat.tproj/inet.c

感谢与问候, 普拉萨纳

0 个答案:

没有答案