2012-01-24 129 views
3

我需要從Linux機器上的所有網絡接口捕獲數據包。 爲了做到這一點,我打算使用pcap_open_live() API並將「any」作爲設備參數。libpcap - 從所有接口捕獲數據包

我有不同類型的端口:以太網端口(比如爲eth0)和GRE隧道(說TUN0) ,從不同類型的接口來都有不同的頭格式的報文:

  1. 數據包從以太網端口有MAC報頭由隧道
  2. 包與Linux的「熟」捕捉封裝(16個字節)頭

未來如何檢查到pcap_loop()回調處理什麼類型的數據包報頭的 我有?

回答

6

您收到的所有數據包都獲得相同類型的數據包標題;這是您在pcap_t上致電pcap_datalink()時獲得的類型。 pcap_datalink()返回的值是DLT_值,如tcpdump.org網站上的Link-Layer Header Types頁面所示。

如果你已經打開了any設備,pcap_datalink()將返回DLT_LINUX_SLL,這意味着ALL包您捕捉會有「夾生」捕獲頭 - 甚至從eth0的人!您必須捕獲eth0而不是any,以獲取這些數據包的以太網標頭。

相關問題