【问题标题】:Issues using libpcap in C in OS X在 OS X 的 C 中使用 libpcap 的问题
【发布时间】:2016-10-25 03:53:52
【问题描述】:

我正在尝试在 Mac OSX 上编译 https://github.com/samueldotj/dhcp-client。代码在我的 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);

有人可以帮忙吗?

【问题讨论】:

    标签: c macos libpcap


    【解决方案1】:

    尝试添加

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

    到文件的顶部。

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 2013-02-08
      • 2011-10-11
      • 2011-01-13
      • 2016-10-07
      • 2013-12-02
      • 2016-10-02
      • 1970-01-01
      相关资源
      最近更新 更多