在linux上,如何在不尝试连接的情况下检查端口是否处于侦听状态

Dan*_*iel 4 c linux networking

如果本地计算机上的端口(如果通过IP或接口也需要)处于侦听状态,我如何检查?我不想连接到此端口进行检查,因为我不想激怒此端口后面的服务.

我想用它来将缺少的net.tcp.listen项添加到Zabbix.

编辑 - 这是真正的答案:

正确的方法是读取套接字表:

/ proc/net/tcp/proc/net/tcp6

它们包含如下行:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
0: 00000000:1F40 00000000:0000 0A 00000000:00000000 00:00000000 00000000   101        0 4083927 1 f5d15240 750 0 0 2 -1
1: 00000000:2742 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1002        0 6100 1 decd76c0 750 0 0 2 -1
Run Code Online (Sandbox Code Playgroud)

并且可以轻松解析监听套接字(dst:00000000:0000).netstat上的一个strace显示netstat以相同的方式工作.

Pet*_*ans 6

只是尝试打开端口进行收听.你会收到一个错误.

你无法从另一个进程窃取一个端口,所以这将是安全的,当然很容易实现,因为除了正确的错误处理之外,它不需要额外的代码.

  • 好主意。遗憾的是,存在竞争条件,如果您的服务尝试在同一时刻完全使用其端口,则可能会引发错误。 (2认同)

ere*_*eOn 2

就像是netstat

`netstat -anp`
Run Code Online (Sandbox Code Playgroud)

将列出所有端口并且应该可以解决问题。

由于这是开源软件,您可能会从中获得一些灵感。我相信它是用 C 编写的。