我如何获得与打开它们的应用程序相关的端口?

我需要获得我机器上所有打开的端口列表以及打开它们的应用程序。 我需要以编程方式获取这些信息。

谢谢。

我希望有一个更聪明的答案会出现。 我做了这个(以Python编程),试图重写一个名为NetHogs的程序。 我的版本在这里 ,具体来说这里是用于解析从/proc的表中的Python模块 。 如果你不是Python识字(去学习它),那么看看最初的NetHogs ,它使用了C / C ++的混合(并且读取有点痛苦,因此重写)。

值得注意的是,从/proc分析套接字信息的大量或快速反复尝试是非常耗费CPU的,因为操作系统必须处理所有系统调用,并动态地解析内部结构。 因此,您会发现一些缓存,并在我已经链接到的两个项目的源代码中进行了时间假设。

简而言之,您需要将/proc/<pid>/fd每个进程给出的套接字inode与/proc/net/<proto>给出的连接关联起来。 同样,示例解析,以及如何找到所有这些都出现在这两个项目中。

您必须执行以下操作:

  1. 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/\]//'

  2. grep $ socket / proc / net / tcp

  3. 解析前一个命令的输出(第二个条目包含端口信息)

 exec('netstat'); 

有关打开文件(包括套接字)的信息可以从/proc目录中挖出。

这篇文章给了很多细节,让你开始。

 ss -nltup netstat -ltupn lsof -iTCP -sTCP:LISTEN 

编辑:对不起,不是程序化的。 但是如果你想分叉一个进程很有帮助。 每次重新发明车轮都没有意义。