C++ 如何获取与打开端口的应用程序关联的端口?
我需要获得我的机器上所有打开的端口的列表,以及打开它们的应用程序。 我需要以编程方式获取此信息C++ 如何获取与打开端口的应用程序关联的端口?,c++,linux,C++,Linux,我需要获得我的机器上所有打开的端口的列表,以及打开它们的应用程序。 我需要以编程方式获取此信息 谢谢。有关打开的文件(包括套接字)的信息可以从/proc目录中找到 exec('netstat'); 提供了大量详细信息并帮助您开始。您必须实现以下几点: socket=ls-l/proc//fd | grep socket | sed's/*socket:\[/'| sed's/\]/' grep$socket/proc/net/tcp 解析上一个命令的输出(第二个条目包含端口信息) 我希望会有一
谢谢。有关打开的文件(包括套接字)的信息可以从
/proc
目录中找到
exec('netstat');
提供了大量详细信息并帮助您开始。您必须实现以下几点:
ls-l/proc//fd | grep socket | sed's/*socket:\[/'| sed's/\]/'
我希望会有一个更聪明的答案。我就是这样做的(用Python编程),试图重写一个名为NetHogs的程序。我的版本,专门用于解析
/proc
中的表。如果你不识字(去学吧),那么看看,它使用了C/C++的混合语言(读起来有点痛苦,因此需要重写)
值得注意的是,从/proc
解析套接字信息的大量或快速重复的尝试非常耗费CPU,因为操作系统必须处理每个系统调用,并动态解析内部结构。因此,您将在我链接到的两个项目的源代码中找到一些缓存和计时假设
简而言之,您需要将/proc//fd
中为每个进程提供的套接字inode与/proc/net/
中提供的连接相关联。同样,两个项目中都提供了示例解析以及如何定位所有这些内容
ss -nltup
netstat -ltupn
lsof -iTCP -sTCP:LISTEN
编辑:啊,对不起,不是程序性的。但是,如果你想分叉一个过程,这是很有帮助的。
没有必要每次都重新发明轮子。netstat会告诉您哪些端口打开了,而不是哪些应用程序打开了它们。lsof会这么做的。@n0rd:这么多年了,我都不知道!非常感谢你的提示,+1+感谢你在我的建议中加入了一些内容。如果我正在实施,这可能就足够了。为您的重写而断开的链接。@luizfls修复了,谢谢