gpt4 book ai didi

c - 在 OS X 中使用 C 语言的 libpcap 时出现问题

转载 作者:行者123 更新时间:2023-11-30 15:04:37 25 4
gpt4 key购买 nike

我正在尝试编译https://github.com/samueldotj/dhcp-client在 Mac OSX 上。代码在我的 Linux 上编译得很好。

创建问题的代码部分(dhcp-client.c)复制如下

/*
* Get MAC address of given link(dev_name)
*/
static int
get_mac_address(char *dev_name, u_int8_t *mac)
{
#ifdef __linux__
struct ifreq s;
int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
int result;

strcpy(s.ifr_name, dev_name);
result = ioctl(fd, SIOCGIFHWADDR, &s);
close(fd);
if (result != 0)
return -1;

memcpy((void *)mac, s.ifr_addr.sa_data, 6);
return 0;
#else
struct ifaddrs *ifap, *p;

if (getifaddrs(&ifap) != 0)
return -1;

for (p = ifap; p; p = p->ifa_next)
{
/* Check the device name */
if ((strcmp(p->ifa_name, dev_name) == 0) &&
(p->ifa_addr->sa_family == AF_LINK))
{
struct sockaddr_dl* sdp;

sdp = (struct sockaddr_dl*) p->ifa_addr;
memcpy((void *)mac, sdp->sdl_data + sdp->sdl_nlen, 6);
break;
}
}
freeifaddrs(ifap);
#endif

return 0;
}

生成文件

LDLIBS = -lpcap

dhcp-client: dhcp-client.c

相关错误输出

cc     dhcp-client.c  -lpcap -o dhcp-client
dhcp-client.c:153:36: error: incomplete definition of type 'struct sockaddr_dl'
memcpy((void *)mac, sdp->sdl_data + sdp->sdl_nlen, 6);

有人可以帮忙解决这个问题吗?

最佳答案

尝试添加

#ifndef __linux__
#include <net/if_dl.h>
#endif

到文件顶部。

关于c - 在 OS X 中使用 C 语言的 libpcap 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40231101/

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