2012-05-04 2 views
1

libpcap을 사용하여 일부 "네트워크 인터페이스"(루프백 포함)를 탐지하려고합니다.내 패킷이 어느 pcap 필터에서 왔는지 알아

1234, 1235 및 1236 포트의 루프백 패킷이 있습니다. libpcap_setfilter()를 사용하여 libpcap 필터 패킷 만이 주소에서 오는 것을 확인했습니다. (127.0.0.1/1234에서 오는 패킷은 eth0 인터페이스를 통과 할 수 있으며, 127.0.0.1/1235에서 오는 패킷은 eth1을 통해 전달 될 수 있고, 그 외의 패킷은 eth0 인터페이스를 통해 전달 될 수 있습니다. 127.0.0.1/1236에서 오는 것은 eth2를 통해 전달 될 수 있습니다.

제 질문은 : 콘텐츠를 보지 않아도이 패킷이 정확히 어떤 포트에서 왔는지 알 수있는 방법이 있습니까? 예를 들어 많은 필터를 설정하고 패킷을 필터링 한 필터가 무엇인지 알 수 있습니까?

저는 이미 많은 설명서와 튜토리얼을 읽었지만 지금까지 아무 것도 유용하지 않은 것으로 보입니다. 대답이 "가능하지 않다"면 나는 또한 괜찮을 것이다.

미리 감사드립니다.

답변

1

libpcap이 실행되는 캡쳐 메커니즘은 하나의 필터 만 지원하므로 libpcap에는 다중 필터를 설정하는 API가 없습니다.

그러나 동일한 네트워크 인터페이스에 대해 pcap_t을 여러 개 열어 서로 다른 필터를 적용 할 수는 있습니다. 그러나 복수 pcap_t의 읽기는 플랫폼에 따라 달라질 수 있습니다. 나는 이것이 "eth0", "eth1"및 "eth2"에서 유추 되었기 때문에 에있는 pcap_get_selectable_fd()의 반환 값에 select() 또는 poll() 또는 ...을 사용할 수 있어야하고 select() 또는 poll() 또는 ... 제공된 설명자가 읽을 수 있다고 말하면 해당 pcap_t에 대한 패킷을 처리하려면 해당 pcap_tpcap_dispatch()을 호출하십시오.