UDP 브로드캐스트를 수신할 바인딩 위치 감지

UDP 브로드캐스트를 수신할 바인딩 위치 감지

UDP 브로드캐스트를 캡처하고 인쇄해야 하는 애플리케이션을 작성 중입니다. 사용되는 네트워크 인터페이스는 다음과 같습니다.

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)

다음 상태의 패킷이 성공적으로 수신 및 인쇄되었습니다.

$ 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

모든 주소가 아닌 특정 주소에 바인딩해야 합니다 0.0.0.0. 그래서 0.0.0.0동작을 시뮬레이션하고 루프를 실행하고 서브넷의 가능한 모든 주소에 바인딩하도록 스크립트를 변경했습니다 . 결과 :

$ 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 

그러나 앱은 여전히 ​​아무것도 인쇄하지 않습니다.

질문

0.0.0.0바인딩 가능한 모든 주소에 대한 바인딩과 바인딩 가능한 모든 주소에 대한 바인딩 사이에 차이점이 있습니까? 이로 인해 패키지가 사용자 공간 애플리케이션에 전달되지 않을 수 있습니까?

답변1

DHCP 클라이언트는 요청을 보내 255.255.255.255.67므로 DHCP 서버가 이러한 요청을 받을 수 있는 개체를 수신하는 것이 좋습니다. 테스트에서 192.168.10.255:bootps청취 주소와 동일한 항목 에 바인딩하십시오.확실히해당 패킷을 참조하세요.

존재하지 않는 것에 우리를 묶어두도록 강요하는 것은 무엇입니까 *:67?

관련 정보