在從libpcap的文檔的示例代碼產生以下代碼應報告(在這種情況下eth0)中的給定接口的IP地址[錯誤檢查爲簡潔起見省略]pcap_lookupnet返回不正確的IP地址
#include <stdio.h>
#include <pcap.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
char errbuf[PCAP_ERRBUF_SIZE];
bpf_u_int32 mask;
bpf_u_int32 ip;
struct in_addr ip_addr;
/* Find the properties for the device */
pcap_lookupnet("eth0", &ip, &mask, errbuf);
ip_addr.s_addr = ip;
printf("IP Address: %s\n", inet_ntoa(ip_addr));
return 0;
}
然而,這導致192.168.1.0,而不是正確的192.168.1.100。在另一個不同子網上的另一臺機器上運行此命令會產生10.0.0.0而不是正確的10.0.0.107,這使我相信libpcap並未正確複製最後一個八位字節。我已經手動轉換了pcap_lookupnet返回的整數,以確保它不是使用inet_ntoa時的問題(我也嘗試了inet_ntop,結果相同)。按照此問題的代碼: Get IP address of an interface on Linux 報告正確的IP地址。這是libpcap中的錯誤還是我做錯了什麼?
所以我誤解了「網絡號」嚴格意味着主機地址的網絡部分,而不是IP地址?如果是這樣,示例代碼(以及幾本關於pcap編程的書籍)具有很高的誤導性,例如:'bpf_u_int32 net; \t \t/*我們的IP * /' – 2012-02-09 15:42:56
絕對是誤導性的和消息靈通的。假設網絡掩碼爲「m」,IP地址爲「i」,網絡號碼「n」由n = i&m給出。 – mvds 2012-02-09 16:43:28
無論如何你可以解釋這一點嗎?我正在努力解決同樣的問題。 – Jim 2012-12-08 23:16:28