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

时间:2010-07-22 05:57:06

标签: c++ linux

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

感谢。

5 个答案:

答案 0 :(得分:2)

您必须实施以下内容:

  1. 插座= ls -l /proc/<pid>/fd | grep socket | sed 's/.*socket:\[//' | sed 's/\]//'

  2. grep $ socket / proc / net / tcp

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

答案 1 :(得分:2)

我希望能有一个更聪明的答案。我这样做(在Python中以编程方式),试图重写一个名为NetHogs的程序。我的版本is here,特别是here is the module in Python,用于解析/proc中的表格。如果你不是Python识字(去学习它),那么看看original NetHogs,它使用了C / C ++的混合(并且读取有点痛苦,因此重写)。

值得注意的是,从/proc解析套接字信息的大量或快速重复尝试都是CPU密集型的,因为操作系统必须处理每个系统调用,并动态解析内部结构。因此,您可以找到一些缓存,并在我链接到的两个项目的源代码中做出时间假设。

缺点是,您需要将/proc/<pid>/fd中为每个进程指定的套接字inode与/proc/net/<proto>中给出的连接相关联。同样,示例解析以及如何定位所有这些都存在于两个项目中。

答案 2 :(得分:0)

exec('netstat');

答案 3 :(得分:0)

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

This article提供了很多细节,让您入门。

答案 4 :(得分:0)

ss -nltup 
netstat -ltupn
lsof  -iTCP -sTCP:LISTEN
编辑:抱歉,不是程序化的。但如果你想分叉一个进程,这会很有帮助。 没有必要每次重新发明轮子。