2012-01-24 2 views
3

Linux 컴퓨터의 모든 네트워크 인터페이스에서 패킷을 캡처해야합니다. 이것을 수행하기 위해 나는 pcap_open_live() API를 사용하고 "any"를 장치 인수로 전달할 계획입니다.libpcap - 모든 인터페이스 패킷 수신

I 포트의 다른 유형이 있습니다 이더넷 포트 (예를 들어 eth0를)과 GRE 터널 (tun0 말) 여러 유형의 인터페이스에서 오는 다른 헤더 형식은 패킷 : 이더넷 포트가

  1. 패킷에서을 터널에서
  2. 패킷이 리눅스 "요리"캡처 캡슐 (16 바이트) 헤더

으로 오는 MAC 헤더는 어떻게 pcap_loop() 콜백 핸들러로 확인하실 수 있습니다 패킷 헤더의 유형 알았어?

답변

6

받은 모든 패킷은 동일한 유형의 패킷 헤더를 갖습니다. 그 타입은 pcap_t에서 pcap_datalink()으로 전화 할 때 얻을 수있는 타입입니다. pcap_datalink()이 반환하는 값은 DLT_ 값이며 tcpdump.org 사이트의 Link-Layer Header Types 페이지에 나와 있습니다. 당신이 any 장치를 열었다면

, pcap_datalink()는 의미 DLT_LINUX_SLL를 반환합니다 당신이 "요리"캡처 헤더가됩니다 캡처 ALL 패킷 - eth0에서 심지어 사람! 해당 패킷의 이더넷 헤더를 얻으려면 any이 아니라 eth0으로 캡처해야합니다.