本文中, 我们来看看如何利用GetAdaptersInfo获取与网卡相关的一些信息。 如果你在运行的时候缺头文件或者库, 请到网上下载, 也可以直接在我的博客资源中下载, 免积分。其实, 这个函数中的Adapter就是指网卡。

      好, 上代码(为了简便,不考虑各种异常):

#include <stdio.h> 
#include <winsock2.h> 
#include <iphlpapi.h> // 如果没有这个, 请在我的博客资源中下载
#pragma comment(lib, "iphlpapi.lib") 

int main()
{
	unsigned long len = sizeof(IP_ADAPTER_INFO);
	IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
	GetAdaptersInfo(pAdapterInfo, &len); // 获取链表指针值的关键函数

	PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
	while(pAdapter) // 遍历链表
	{
		printf("NIC: %s\n", pAdapter->AdapterName);
		printf("NIC info: %s\n", pAdapter->Description);
		printf("\n");

		printf("MAC: ");
		unsigned int i = 0; // 不用int, 是为了去掉编译warning
		for(i = 0; i < pAdapter->AddressLength; i++)
		{
			if(i == (pAdapter->AddressLength - 1))
			{
				printf("%.2X\n", (int)pAdapter->Address[i]);
			}
			else
			{
				printf("%.2X:", (int)pAdapter->Address[i]);
			}
		}

		printf("IP: %s\n", pAdapter->IpAddressList.IpAddress.String);
		printf("Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
		printf("Gateway: %s\n", pAdapter->GatewayList.IpAddress.String);
		printf("\n");

		if(pAdapter->DhcpEnabled)
		{
			printf("DHCP: YES\n");
			printf("DHCP Server: %s\n", pAdapter->DhcpServer.IpAddress.String);
		}
		else
		{
			printf("DHCP: NO\n");
		}

		pAdapter = pAdapter->Next; // 下一个网卡
	}

	free(pAdapterInfo);
	printf("\n");

	return 0;
}

     结果是(我用xx代替了部分信息):
NIC: {xxxxxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxx}
NIC info: Dell Wireless 1395 WLAN Mini-Card - 数据包计划程序微型端口


MAC: xx:xx:xx:xx:xx:xx
IP: 192.168.1.100
Mask: 255.255.255.0
Gateway: 192.168.1.1


DHCP: YES
DHCP Server: 192.168.1.1


      如果把我PC的无线网络关闭, 那又是另外一种结果, 有兴趣的朋友赶紧试试吧。


      备注: 上面的网卡是正在运行的网卡, 而不是所有的网卡。





本文转载:CSDN博客