【问题标题】:Find Single Interface IP address (libpcap)查找单接口 IP 地址 (libpcap)
【发布时间】:2015-04-10 19:21:10
【问题描述】:

我正在尝试为单个接口提取单个 IP 地址,我有这个打印出所有接口的所有 IP 地址并尝试这样做

if (d->name == en0) {
    char myip = inet_ntoa(((struct sockaddr_in*)a->addr)->sin_addr);
    // print myip
 }

但它只是返回 null。不幸的是,我对 C 不是很熟悉,如何根据接口名称提取 IP 地址?

static char errbuf[PCAP_ERRBUF_SIZE];

void getInterfaces()
{
char myip;
pcap_if_t *alldevs;
int status = pcap_findalldevs(&alldevs, errbuf);

if(status != 0)
{
    printf("%s\n", errbuf);
}

for(pcap_if_t *d=alldevs; d!=NULL; d=d->next)
{
    printf("%s:", d->name);

    for(pcap_addr_t *a=d->addresses; a!=NULL; a=a->next)
    {
        if(a->addr->sa_family == AF_INET)
        {
            printf(" %s", inet_ntoa(((struct sockaddr_in*)a->addr)->sin_addr));
        }
    }
    printf("\n");
}

pcap_freealldevs(alldevs);
}

----Console:-----------------------------------------------
en0: 192.168.56.1
awdl0:
bridge0:
tun0: 10.20.30.40
en1:
en2:
p2p0:
lo0: 127.0.0.1

【问题讨论】:

  • 什么是dd->name 是什么? e0 是什么?

标签: c network-programming libpcap


【解决方案1】:
char myip = inet_ntoa(((struct sockaddr_in*)a->addr)->sin_addr);

inet_ntoa 返回一个char *(不是char),更改为:

char *myip = inet_ntoa(((struct sockaddr_in*)a->addr)->sin_addr);

这行也是错的:

if (d->name == en0) {

你想要的:

if (strcmp(d->name, "en0") == 0) {

【讨论】:

  • 啊,他们的指针总是让我绊倒,谢谢它工作得很好,我会尽快接受:p
猜你喜欢
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多