pcap_lookupnet返回错误的IP地址

时间:2012-02-09 15:35:32

标签: c linux libpcap

以下libpcap文档中的示例代码生成以下代码,该代码应报告给定接口的IP地址(在本例中为eth0)[为简洁起见,省略了错误检查]

#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中的错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的声明“应报告给定接口的IP地址”不正确。

从联系手册:

  

pcap_lookupnet()用于确定IPv4网络号和   面具          与网络设备设备相关联。 netp和maskp都是          bpf_u_int32指针。

您确定网络号分别为10.0.0.107或192.168.1.100吗?听起来很不寻常。