AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 416205
Accepted
Lock
Lock
Asked: 2012-08-11 00:42:01 +0800 CST2012-08-11 00:42:01 +0800 CST 2012-08-11 00:42:01 +0800 CST

测试 UDP 端口连通性

  • 772

我正在尝试测试是否可以通过 UDP 访问远程服务器(我都可以访问)上的特定端口。

两台服务器都面向互联网。我正在使用 netcat 来监听某个端口。

然后我使用 nmap 检查该端口是否打开,但它似乎没有打开。

Iptables 已关闭。

有什么建议为什么会这样吗?我最终要设置一个 VPN 隧道,但因为我对隧道很陌生,所以我想确保在继续之前我在端口 UDP 1194 上有连接。

linux
  • 9 9 个回答
  • 355981 Views

9 个回答

  • Voted
  1. motobói
    2015-04-29T08:45:19+08:002015-04-29T08:45:19+08:00

    要测试 udp 端口​​是否响应,请使用netcat.

    手册页中的示例:

    nc -v -u -z -w 3 example.host 20-30
        Send UDP packets to ports 20-30 of example.host, and report which ones
        did not respond with an ICMP packet after three seconds.
    

    当然,如果防火墙正在DROP运行(处理面向 Internet 的网关时通常是这种情况),您将不会收到 ICMP 响应。

    • 91
  2. Sasha
    2015-11-05T09:42:26+08:002015-11-05T09:42:26+08:00
    1. 在客户端和服务器上都安装 nc: yum install nc(for centos)
    2. 在服务器上监听 UDP 端口:(如果您正在测试 ipv6 连接,请nc -ul 6111添加该选项)-6
    3. 在客户端nc -u <server> 6111
    4. 在客户端输入任何内容并按回车键 - 您应该在服务器上看到此文本

    注意:当您nc -ul在服务器上运行该命令时,它只会连接到它的第一个连接。正如我发现的那样,您不能在不停止和重新启动的情况下在对它执行 ping 操作的服务器之间切换nc -ul。事实上,如果您 ^C 停止客户端 ( nc -u ...),您也无法在不首先重新启动服务器侦听器的情况下重新启动客户端。

    • 69
  3. Best Answer
    Luke404
    2012-08-11T04:13:14+08:002012-08-11T04:13:14+08:00

    没有“开放的”UDP 端口这样的东西,至少在大多数人习惯于思考的意义上不是这样的(它正在回答诸如“好的,我已经接受你的连接”之类的东西)。UDP 是无会话的,因此“端口”(阅读:操作系统 IP 堆栈中的 UDP 协议)永远不会自行响应“成功”。

    UDP 端口只有两种状态:监听或不监听。这通常转化为“进程在其上打开一个套接字”或“没有打开任何套接字”。后一种情况应该很容易检测到,因为系统应该使用代码 = 3(端口无法访问)的ICMP 目标无法访问数据包进行响应。不幸的是,许多防火墙可能会丢弃这些数据包,所以如果您没有收到任何东西,您就不确定端口是否处于这种状态。我们不要忘记 ICMP 也是无会话的,并且不进行重传:端口不可达数据包很可能在网络上的某个地方丢失。

    处于“侦听”状态的 UDP 端口可能根本不响应(侦听它的进程只接收数据包并且不传输任何东西)或者它可以发回一些东西(如果进程确实在接收到动作并且它通过通过 UDP 响应原始发件人 IP:端口)。所以再一次,如果你没有得到任何回报,你永远无法确定状态是什么。

    您说您可以控制接收主机:这使您能够构建自己的协议来检查 UDP 端口可达性:只需在接收主机上放置一个进程,该进程将侦听给定的 UDP 端口并响应(或发送给您一封电子邮件,或者只是吓坏了unlink()主机文件系统上的所有内容……任何会引起您注意的东西都可以)。

    • 68
  4. tmarkiewicz
    2012-10-18T13:22:21+08:002012-10-18T13:22:21+08:00

    我遇到了类似的问题,并在此处使用 netcat 找到了一个很好的解决方案:http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open: _simple_UDP_server_and_client

    nc -vzu <host> <port>

    我能够确认我的 UDP 端口已打开,然后可以继续测试我的实际代码。

    • 14
  5. womble
    2012-08-11T00:50:34+08:002012-08-11T00:50:34+08:00

    使用 nmap 测试开放的 UDP 端口充满了危险——没有三向握手来指示开放性。除非侦听进程响应 nmap 发送的任何内容,否则 nmap 无法区分未响应的开放端口和过滤端口。

    更简单的方法是在一端使用 netcat 侦听并在另一端使用 netcat 发送数据包,并查看它们到达另一端。两种方式都要确定。您还tcpdump可以看到数据包到达他们需要去的地方。

    • 10
  6. Koray Güclü
    2017-07-05T15:47:48+08:002017-07-05T15:47:48+08:00

    您可以使用以下命令扫描udp端口

    nmap -sU -v <hostname or ip>
    
    • 7
  7. ewwhite
    2012-08-11T03:21:53+08:002012-08-11T03:21:53+08:00

    您可以使用netcat(nc) 或执行此操作iperf,假设您有另一台机器可以在网络外部进行测试。我的选择是nmap从您环境之外的系统进行 UDP 扫描。你的 nmap 命令行是什么?混合中是否有任何硬件防火墙或其他设备?

    • 1
  8. David Waddell
    2017-07-22T10:40:32+08:002017-07-22T10:40:32+08:00

    我有一个简单的方法。如果 UDP 服务器没有返回预期的数据,我就停止收集 dgram,假设它发生故障:

    LINE: while(1)
    {
        my $line;
        my $flags;
    
        local $SIG{ALRM} = sub {die "exceeded timeout for recv"};
        alarm 5;
        eval {
            $socket->recv($line,2024,$flags);
        };
    
        unless($line =~ /\{.*\}/){
            if($verbose){
                print STDERR "Invalid or empty dgram:\n",'"', $line, '"',"\n";
            }
    
            last LINE;
        }
    }
    
    • 1
  9. Oleg Neumyvakin
    2020-05-12T01:40:39+08:002020-05-12T01:40:39+08:00

    实际上,如果服务器侦听端口 6111 netcat 明确指出:

    # nc -ul 6111
    Ncat: bind to :::6111: Address already in use. QUITTING.
    
    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve