我需要获取机器上所有已打开端口的列表以及打开它们的应用程序。 我需要以编程方式获取此信息。
感谢。
答案 0 :(得分:2)
您必须实施以下内容:
插座= ls -l /proc/<pid>/fd | grep socket | sed 's/.*socket:\[//' | sed 's/\]//'
grep $ socket / proc / net / tcp
解析上一个命令的输出(第二个条目包含端口信息)
答案 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
编辑:抱歉,不是程序化的。但如果你想分叉一个进程,这会很有帮助。
没有必要每次重新发明轮子。