gpt4 book ai didi

c - pcap_lookupnet 返回错误的 IP 地址

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:06 24 4
gpt4 key购买 nike

以下来自 libpcap 文档的示例代码会产生以下代码,该代码应报告给定接口(interface)的 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 中的错误还是我做错了什么?

最佳答案

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

来自手册页:

pcap_lookupnet() is used to determine the IPv4 network number and mask associated with the network device device. Both netp and maskp are bpf_u_int32 pointers.

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

关于c - pcap_lookupnet 返回错误的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com