在C语言中查找机器的IP地址?

3
我该如何在Windows上使用C语言获取本地机器的IP地址?在下面的代码中,我无法获取我的机器的IP地址:
#include <ifaddrs.h>
#include <stdio.h>

int main()
{
    struct ifaddrs *id;
    int val;
    val = getifaddrs(&id);
    printf("Network Interface Name :- %s\n",id->ifa_name);
    printf("Network Address of %s :- %d\n",id->ifa_name,id->ifa_addr);
    printf("Network Data :- %d \n",id->ifa_data);
    printf("Socket Data : -%c\n",id->ifa_addr->sa_data);
    return 0;
}

编译时遇到错误:

致命错误 C1083:无法打开包括文件:“net/if.h”:没有那个文件或目录。

我不能使用 #include <net/if.h>,因为它只在Linux上可用。


1
以上代码适用于Linux和类似的操作系统 - 如果要在Windows上执行相同的操作,您需要查看MSDN以找到Microsoft等效的API。 - Paul R
2
可能是如何在Windows下获取IP地址的重复问题。 - Swanand
也许这个SO问题可以帮助你。 - Jabberwocky
Swanand,那个问题使用了Linux代码,包括net/if.h。 - Niks Arora
2个回答

8
你展示的代码无法编译,因为它是为Linux而设计的,不适用于Windows。在Windows上没有<net/if.h>头文件。 getifaddrs() 返回本地接口地址的链表。但是在Windows上并不存在getifaddrs() (除非你找到一个自定义的第三方实现)。
在Windows上的等价函数是使用Win32 GetAdaptersInfo() 函数(XP及更早版本),或者GetAdaptersAddresses() 函数(Vista及更高版本)。这两个函数都返回详细适配器信息的链表(不仅仅是地址)。
他们的MSDN文档中提供了C语言实例。

-2

结构

struct ifaddrs *id;

这是一个链表。您需要循环遍历它并检查地址的存在。

if(id->fa_addr)
   // print statements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接