gpt4 book ai didi

c - 查找单接口(interface) IP 地址 (libpcap)

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

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

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

但它只返回空值。不幸的是,我对 C 不太熟悉,如何根据接口(interface)名称提取 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

最佳答案

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) {

关于c - 查找单接口(interface) IP 地址 (libpcap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29559949/

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