代码之家  ›  专栏  ›  技术社区  ›  Daniel

在Linux上,如何检查端口是否处于侦听状态而不尝试连接

  •  4
  • Daniel  · 技术社区  · 16 年前

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

    我想用这个将丢失的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
    

    并且可以轻松解析监听套接字(dst:00000000:0000)。netstat上的strace表明netstat的工作方式相同。

    5 回复  |  直到 16 年前
        1
  •  2
  •   ereOn    16 年前

    类似的东西 netstat ?

    `netstat -anp`
    

    将列出所有端口,并应执行此操作。

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

        2
  •  6
  •   Peter Tillemans    16 年前

    只需打开端口进行监听。你会得到一个错误。

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

        3
  •  2
  •   Daniel    16 年前

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

    /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
    

    并且可以轻松解析监听套接字(dst:00000000:0000)。netstat上的strace表明netstat的工作方式相同。

        4
  •  0
  •   Noufal Ibrahim    16 年前

    根据您的查询,您似乎希望检查服务器上的开放端口,但确定需要运行哪个命令。无需担心,例如,我们试图找出服务器上的端口80是否打开。

    作为根用户首次登录到服务器

    root@[~]# whoami
    root
    

    现在运行以下命令。

    root@[~]# netstat -anp | grep :80
    

    如果端口80打开,它将提供以下输出。

    tcp        0      0 78.129.128.40:80            207.46.12.20:62746          TIME_WAIT   -
    tcp        0      0 78.129.128.40:80            74.53.3.132:47003           TIME_WAIT   -
    tcp        0      0 78.129.128.40:80            85.9.80.110:63325           FIN_WAIT2   -
    

    如果服务器中的端口80被阻塞,您将不会收到任何输出。

    您还可以使用以下URL检查服务器上的打开端口。

    http://www.yougetsignal.com/tools/open-ports/

    当做, 贡扬

        5
  •  -1
  •   dagoof    16 年前

    我不知道您是想看看端口是否正确打开,还是想以某种方式将其集成到应用程序中。如果你的是前一个案子

    nmap localhost
    

    应该帮你处理