Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取与打开端口的应用程序关联的端口?_C++_Linux - Fatal编程技术网

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');

提供了大量详细信息并帮助您开始。

您必须实现以下几点:

  • socket=
    ls-l/proc//fd | grep socket | sed's/*socket:\[/'| sed's/\]/'

  • grep$socket/proc/net/tcp

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


  • 我希望会有一个更聪明的答案。我就是这样做的(用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修复了,谢谢