我需要获得我机器上所有打开的端口列表以及打开它们的应用程序。 我需要以编程方式获取这些信息。
谢谢。
我希望有一个更聪明的答案会出现。 我做了这个(以Python编程),试图重写一个名为NetHogs的程序。 我的版本在这里 ,具体来说这里是用于解析从/proc
的表中的Python模块 。 如果你不是Python识字(去学习它),那么看看最初的NetHogs ,它使用了C / C ++的混合(并且读取有点痛苦,因此重写)。
值得注意的是,从/proc
分析套接字信息的大量或快速反复尝试是非常耗费CPU的,因为操作系统必须处理所有系统调用,并动态地解析内部结构。 因此,您会发现一些缓存,并在我已经链接到的两个项目的源代码中进行了时间假设。
简而言之,您需要将/proc/<pid>/fd
每个进程给出的套接字inode与/proc/net/<proto>
给出的连接关联起来。 同样,示例解析,以及如何找到所有这些都出现在这两个项目中。
您必须执行以下操作:
socket = ls -l /proc/<pid>/fd | grep socket | sed 's/.*socket:\[//' | sed 's/\]//'
ls -l /proc/<pid>/fd | grep socket | sed 's/.*socket:\[//' | sed 's/\]//'
grep $ socket / proc / net / tcp
解析前一个命令的输出(第二个条目包含端口信息)
exec('netstat');
有关打开文件(包括套接字)的信息可以从/proc
目录中挖出。
这篇文章给了很多细节,让你开始。
ss -nltup netstat -ltupn lsof -iTCP -sTCP:LISTEN
编辑:对不起,不是程序化的。 但是如果你想分叉一个进程很有帮助。 每次重新发明车轮都没有意义。