用GetAdaptersInfo()获取本机的MAC地址

//IPHlpApi.lib动态库用于获取网卡的信息,支持IP网关等的获取
#pragma comment(lib,"Iphlpapi.lib")
#include <atlbase.h>
#include <atlconv.h>
#include <iphlpapi.h>

int main()
{
	DWORD dwRetVal = 0;
	IP_ADAPTER_INFO adapterInfo = {0};
	IP_ADAPTER_INFO *pAdapter = NULL;
	ULONG ulOutBufLen = sizeof(adapterInfo);
	dwRetVal = GetAdaptersInfo(&adapterInfo,&ulOutBufLen);
	if(dwRetVal == NO_ERROR)
	{
		pAdapter = &adapterInfo;
		printf("AdapterName:%s\n",pAdapter->AdapterName);
		printf("AdapterDesc:%s\n",pAdapter->Description);
		printf("AdapterAddr:");
		for(UINT i=0;i<pAdapter->AddressLength;i++)
		{
			printf("%02X%c",pAdapter->Address[i],
				i == pAdapter->AddressLength-1 ? '\n' : '-');
		}
		printf("AdapterType:%d\n",pAdapter->Type);
		printf("IPAddress:%s\n",pAdapter->IpAddressList.IpAddress.String);
		printf("IPMask:%s\n",pAdapter->IpAddressList.IpMask.String);
	}
	else
	{
		printf("GetAdaptersInfo() failed.");
	}
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言可以通过使用Windows和Linux操作系统提供的相关 API 来获取本机的 CPUID 和 MAC 地址。 首先,我们可以通过Windows API函数`GetSystemInfo()`获取CPUID。示例代码如下: ```c #include <stdio.h> #include <windows.h> void main() { SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); printf("CPU ID: %x %x %x %x\n", sys_info.dwProcessorType, sys_info.dwPageSize, sys_info.dwActiveProcessorMask, sys_info.dwNumberOfProcessors); } ``` 然后,我们可以通过使用Windows API函数`GetAdaptersInfo()`来获取本机MAC 地址。示例代码如下: ```c #include <stdio.h> #include <windows.h> #include <iphlpapi.h> #pragma comment(lib, "iphlpapi.lib") void main() { IP_ADAPTER_INFO adapter_info[16]; DWORD buf_len = sizeof(adapter_info); if (GetAdaptersInfo(adapter_info, &buf_len) == ERROR_SUCCESS) { PIP_ADAPTER_INFO curr_adapter = adapter_info; while (curr_adapter != NULL) { printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", curr_adapter->Address[0], curr_adapter->Address[1], curr_adapter->Address[2], curr_adapter->Address[3], curr_adapter->Address[4], curr_adapter->Address[5]); curr_adapter = curr_adapter->Next; } } } ``` 对于Linux操作系统,我们可以使用`sys/sysinfo.h`和`ifaddrs.h`头文件来获取 CPUID 和 MAC 地址。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/sysinfo.h> #include <ifaddrs.h> #include <netinet/in.h> #include <arpa/inet.h> #include <net/if.h> #include <string.h> void main() { struct sysinfo sys_info; if (sysinfo(&sys_info) == 0) { printf("CPU ID: %08x\n", (unsigned int)sys_info.processor_id[0]); } struct ifaddrs* ifaddr, *ifa; if (getifaddrs(&ifaddr) == 0) { for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_PACKET) continue; struct sockaddr_ll* s = (struct sockaddr_ll*)ifa->ifa_addr; unsigned char mac[6]; memcpy(mac, s->sll_addr, 6); printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } freeifaddrs(ifaddr); } } ``` 需要注意的是,在使用这些API函数时,可能需要添加某些特定的文件或在编译选项中指定相关的文件,具体需要根据不同的操作系统和编译环境来进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值