我想查看使用libpcap往返於我的環回網絡適配器的http流量。我只是從網絡編程開始,對這個庫完全陌生。感謝我之前收到的answer,我已經成功地檢測到我的機器的「lo0」適配器(Mac OSx)上的鏈接層類型。TCPDump/libpcap - 找到有效載荷數據的內存位置
//lookup link-layer header type
link_layer_type = pcap_datalink(handle);
if(link_layer_type == DLT_NULL){
printf("DLT_NULL"); // this true in the case of "lo0"
}
Programming with Pcap指南假定每個數據包都包含一個以太網報頭。所以,用於查找數據包的有效載荷的邏輯如下:
ethernet = (struct sniff_ethernet*)(packet);
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
size_ip = IP_HL(ip)*4;
if (size_ip < 20) {
printf(" * Invalid IP header length: %u bytes\n", size_ip);
return;
}
tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip);
size_tcp = TH_OFF(tcp)*4;
if (size_tcp < 20) {
printf(" * Invalid TCP header length: %u bytes\n", size_tcp);
return;
}
}
payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + size_tcp);
此邏輯結算不會檢查數據包從那裏以太網頭不存在loopback接口始發的內容時工作。 Link-Layer Header Types documentation指出鏈接層類型的「DTL_NULL」包含一個由包含網絡層協議的PF_值組成的4字節頭(在我的例子中,我猜IPv4)。
鑑於上述信息..我如何正確定位數據包的有效載荷位置?
任何指導或信息將不勝感激。謝謝!