2010-11-28 4 views
5

libpcap을 사용하여 두 장치에서 수신 대기 중이지만 아직 방법을 찾을 수 없습니다. 장치를 "any"로 설정하려고했지만 작동하지 않습니다. eth0 및 eth1에서 수신 대기해야하므로 DHCP 릴레이 에이전트를 작성하려고합니다.libpcap을 사용하여 한 번에 두 장치 듣기

두 개의 pcap_loops를 만들려고했는데 각각 다른 장치와 핸들러가 있지만 첫 번째 pcap_loop 만 작동하고 두 번째 pcap_loops는 무시됩니다.

이렇게하는 방법이 있습니까? 또는 libpcap을 종료하고 원시 소켓을 사용하여 시도해야합니까?

답변

3

pcap_loop()을 별도의 스레드 (각 인터페이스마다 하나씩)로 실행해야합니다. 그러면 작동합니다.

libpcap의 일부 부분은 스레드로부터 안전하지는 않지만 pcap_setfilter() 이상이므로 자체적으로 잠금 기능을 제공하십시오.

스레드를 사용하지 않으려면 선택/폴링 또는 유사하게 각 장치의 파일 설명자를 모니터링하는 이벤트 루프를 직접 제공해야합니다. pcap_get_selectable_fd()를 사용하여 장치 핸들에 대한 파일 설명자를 얻을 수 있습니다.

+0

감사합니다 :) 소켓을 사용하여 끝났다 :) – Pirozek

관련 문제