【问题标题】:How can I find available but unoccupied ports on a Linux box?如何在 Linux 机器上找到可用但未占用的端口?
【发布时间】:2014-04-24 22:02:39
【问题描述】:

特别是 RHEL 6.5

这是一个开发盒,我们有一些允许用于开发的端口范围。 ...不幸的是,让技术人员注意找出可用的端口就像拔牙一样。更喜欢执行此操作的脚本或别名,这样我们就不必一直询问。线索?这是 iptables 命令还是 netstat 命令或一些奇怪的组合? nmap 在这台机器上不可用。

请不要说这是一个服务器故障问题。他们说这是一个编程问题。 :-|

【问题讨论】:

    标签: linux unix port firewall


    【解决方案1】:

    绝对是SF 的问题,但我们开始了。通过开发框本身(命令行),您应该能够通过netstat 工具查看正在使用的端口。

    要查看 UDP 和 TCP 的侦听端口列表,请填写程序名称:

    # preferably as root
    netstat --listening --program --numeric-ports --protocol=ip -6 -4
    

    在另一台机器上,您可以使用nmap 或类似工具通过扫描分配给开发盒的 IP 地址来查看打开/侦听哪些端口。在尝试这个之前,也许你应该征求许可。此外,您应该考虑到有问题的盒子可能有防火墙规则可以阻止您的扫描尝试。

    要查看开发框中的防火墙规则,请尝试:

    # as root
    iptables -nvxL -t filter
    
    # maybe there are NAT rules, redirects to other addresses, etc.
    iptables -nvxL -t nat
    

    要查看这些iptables 选项的作用,请尝试man iptables

    例如,假设172.16.0.1是分配给开发盒的IP地址,以最简单的方式运行nmap

    # preferably as root
    nmap -v 172.16.0.1
    

    几分钟后,您应该会在相关框中看到正在侦听的端口/服务列表。 试试man nmap 并阅读文档了解更多详情。

    如果你真的认为这是一个编程问题,你可以使用netcat工具和program一个简单的脚本来做一些大致相当于nmap的事情可以。

    #!/bin/bash
    # 
    # DISCLAIMER: NOT TESTED -- just an example
    # NOTE: This will take many DAYS to complete
    
    HOST=172.16.0.1
    
    for port in `seq 1 65535` 
    do 
       echo "Trying ${port}..." 
       netcat -vvv ${HOST} $port -w 1 -z  
    done
    

    对于每个打开的 TCP 端口,您应该会看到类似以下的一行:

    Connection to 172.16.0.1 23 port [tcp/telnet] succeeded!
    

    【讨论】:

    • 最后一种技术似乎很理想,因为我可以用它来检查我想尝试和使用的端口。使用 iptables,我找不到任何防火墙的证据。然而,这并不意味着这里和那里之间没有防火墙。 Nmap 可能是禁止使用的,但可能是本地使用的例外。丘比娃娃是你的。 ;-)
    • 回想起来,这可能是一个超级用户的问题,而不是 SF 或 SO。
    • 我想提出修改建议。添加一些并行性,它可能需要不到 DAYS 的时间。 ;-)
    • 它数字。 netcat 不可用。
    猜你喜欢
    • 2011-02-10
    • 2011-03-26
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多