netcat 为什么无法接收 UDP 数据包?

netcat 为什么无法接收 UDP 数据包?

我有一个简单的 UDP 设备 (ENC28J60),通过直接电缆连接到我的计算机。该设备配置为将 UDP 数据包发送到 192.168.133.1 IP,6661 端口。

计算机操作系统为 Fedora 22,接口名称为 enp7s0。当接口分配有 IP 地址时,tcpdump 挂起,netcat 无响应。当接口未分配 IP 地址时,netcat 无响应(无输出),tcpdump 接收数据包。

数据包确实来自一个设备,我可以使用 tcpdump 看到,仅当接口处于 UP 状态时,但没有分配 IP 地址。

首先尝试启动具有 IP 地址的接口:

[root@d7520 ~]#  nmcli connection up toArd                                                                          
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/20)
[root@d7520 ~]# ip a s dev enp7s0                            
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 74:86:7a:1e:e0:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.133.1/24 brd 192.168.133.255 scope global enp7s0
       valid_lft forever preferred_lft forever
    inet6 fe80::7686:7aff:fe1e:e085/64 scope link 
       valid_lft forever preferred_lft forever

尝试使用 netcat 和 tcpdump。没有答案。tcpdump 挂起。

[root@d7520 ~]# ncat -u -l 6661                                                                                                                      
^C
[root@d7520 ~]# tcpdump -vvv -i enp7s0 -X
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes


[root@d7520 ~]# nc -v -l -u 6661                                                                                                                                                                                                              
Ncat: Version 6.47 ( http://nmap.org/ncat )
Ncat: Listening on :::6661
Ncat: Listening on 0.0.0.0:6661
^C

现在,尝试删除 IP 地址。tcpdump 获得了 UDP 数据包,但 netcat 仍然无动于衷。:

[root@d7520 ~]# nmcli connection down toArd 
Connection 'toArd' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/21)

 [root@d7520 ~]# ip a s dev enp7s0
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 74:86:7a:1e:e0:85 brd ff:ff:ff:ff:ff:ff
[root@d7520 ~]# tcpdump -vvv -i enp7s0 -X                                                                                                                     
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:41:39.423449 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 37)
    192.168.133.2.6660 > 192.168.133.1.6661: [udp sum ok] UDP, length 9
        0x0000:  4500 0025 0000 4000 4011 af73 c0a8 8502  E..%..@[email protected]....
        0x0010:  c0a8 8501 1a04 1a05 0011 0630 7465 7374  ...........0test
        0x0020:  2031 3233 0000 0000 0000 0000 0000       .123..........
^C
1 packet captured
1 packet received by filter
0 packets dropped by kernel

答案1

我不确定这是你的问题,但你为什么nmcli首先使用?nmcli是网络管理器命令行界面,它是多得多比你在尝试启动接口时预想的还要多。

如果我是你,我会按如下方式进行。如sudo

         service network-manager stop  # halt NM
         ip link set dev enp7s0 down   # bring the interface down, in order to...
         ip addr flush dev enp7s0      # ... get rid of its ip address

手动配置...

         ip addr add 192.168.133.133/24 dev enp7s0 # we give it a brand new address...
         ip link set dev enp7s0 up     # now we try again...
         ip route add default via 192.168.133.1 # and a gateway

或自动的:

         ip link set dev enp7s0 up
         dhclient -v enp7s0

(根据您的发行版,您可能必须省略该-v标志)。

现在我会再试一次,并且两者都tcpdump应该nc可以正常工作。

相关内容