gpt4 book ai didi

c - 使用 libpcap 查找设备地址

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:43 25 4
gpt4 key购买 nike

我正在尝试在我的计算机中查找设备的地址。到目前为止,我设法获得了设备列表(使用 pcap_findalldevs),但我无法弄清楚如何到达这些地址。我看到了这个联机帮助页 - http://www.tcpdump.org/pcap3_man.html哪里写的是这样的

addresses a pointer to the first element of a list of addresses for the interface

然后是这个

Each element of the list of addresses is of type pcap_addr_t, and has the following members:

所以我有这段代码

pcap_if_t *alldevsp , *device;

char *devname , **devs;
int count = 1 , n;

if(pcap_findalldevs(&alldevsp, errbuf))
{
printf("Error: %s" , errbuf);
exit(1);
}

device = alldevsp;
pcap_addr_t list;
printf("\nDevices:\n");
while(device != NULL)
{
printf("%d. %s - %s", count++ , device->name , device->description);
list = device->addresses[0];
printf("address: %s\n",(char *) inet_ntoa(list.addr));
device = device->next;
}

编译没问题,但是当我尝试运行它时,我得到了这个:

Devices: 1. eth0 - (null)addres: 144.208.30.8 2. wlan0 - (null)addres: 128.213.30.8 Segmentation fault

我能理解段错误,因为第三个设备是 usb 并且它没有地址,但是 eth0 和 wlan0 的那些 IP 是错误的,它们不匹配。

我做错了什么?

最佳答案

来自您的链接:

Each element of the list of addresses is of type pcap_addr_t,
and has the following members:
...
addr
a pointer to a struct sockaddr containing an address
...

现在,什么是struct sockaddr?看这里: http://www.retran.com/beej/sockaddr_inman.html

那么你在哪里做的:

printf("address: %s\n",(char *) inet_ntoa(list.addr));

你应该这样做:

printf("address: %s\n", inet_ntoa(((struct sockaddr_in*)list.addr)->sin_addr));

也就是说,您需要提取“IP 地址”(如果该系列确实是 AF_INET),否则您给 inet_ntoa 的参数类型是错误的。

关于c - 使用 libpcap 查找设备地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294461/

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