netcat が UDP パケットを受信できないのはなぜですか?

netcat が UDP パケットを受信できないのはなぜですか?

シンプルな UDP デバイス (ENC28J60) が直接ケーブルでコンピューターに接続されています。デバイスは、UDP パケットを 192.168.133.1 IP、6661 ポートに送信するように設定されています。

コンピュータは Fedora 22 OS で、インターフェース名は 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が機能するはずです。

関連情報