Estou escrevendo um aplicativo que precisa capturar e imprimir transmissões UDP. A interface de rede em uso é:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::a00:27ff:feb9:b18c prefixlen 64 scopeid 0x20<link>
ether 08:00:27:b9:b1:8c txqueuelen 1000 (Ethernet)
Os pacotes são recebidos e impressos com sucesso para os estados abaixo.
$ sudo lsof -P -iUDP
python3 5496 root 3u IPv4 54675 0t0 UDP *:67
$ sudo strace python3 main.py 2>&1 | grep bind
bind(3, {sa_family=AF_INET, sin_port=htons(67), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
Eu preciso ter a ligação para um endereço específico e nem todos os endereços 0.0.0.0
. Então eu mudo o script para ligar para imitar o comportamento 0.0.0.0
e loop e ligar a qualquer endereço possível na sub-rede. Resultado sendo:
$ sudo lsof -P -iUDP
python3 5472 root 3u IPv4 52392 0t0 UDP 192.168.10.0:67
python3 5472 root 4u IPv4 52393 0t0 UDP user-VirtualBox:67
python3 5472 root 6u IPv4 52647 0t0 UDP 192.168.10.255:67
No entanto, o aplicativo ainda não imprime nada.
Pergunta
Existe uma diferença entre a vinculação a 0.0.0.0
em oposição à vinculação a todos os endereços possíveis que podem fazer com que um pacote não seja passado para o aplicativo userspace?