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
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);
printf("GetAdaptersInfo() failed.");
return 0;
}测试运行结果如下:
AdapterName:{08D07467-7622-4C52-B869-41AFF61D9651}
AdapterDesc:Broadcom NetLink (TM) Gigabit Ethernet
AdapterAddr:B8-AC-6F-1A-6A-46
AdapterType:6
IPAddress:172.16.27.30
IPMask:255.255.255.0
演示代码如下:#pragma comment(lib,"Iphlpapi.lib")#include #include #include int main(){ DWORD dwRetVal = 0; IP_ADAPTER_INFO adapterInfo ={0}; IP_ADAPTER_INFO *pAdapter = NULL; ULONG ulO
#define MAX_
ADAPTER
_NAME_LENGTH 256
#define MAX_
ADAPTER
_DESCRIPTION_LENGTH 128
#define MAX_
ADAPTER
_ADDRESS_LENGTH 8
typedef struct _NET_IP_ADD
用来监听入站网络连接,这个函数预示着程序会在一个套接字上监听入站网络连接。
AdjustTokenPrivileges
用来启用或禁用特定的访问权限。执行进程注入的恶意代码会经常调用这个函数 ,来取得额外的权限。
AttachThreadInput
将一个线程处理的输入附加到另一个线程上,使得第二个线程接收到输入事件。如键盘和鼠标事件。击键记录器和其他...
Get
Adapter
s
Info
-20151116 防止返回的mac出现null
20151116
From:http://blog.csdn.net/weiyumingwww/article/details/17554461
转载URL:http://www.cnblogs.com/ourran/p/4968502.html
测试环境win7 x64 vs2013
工程...
The Get
Adapter
s
Info
function retrieves
adapter
info
rmation for the local computer.
On Windows XP and later: Use the Get
Adapter
sAddresses function
instead ofGet
Adapter
详细点说,物理网卡就是安装在电脑主板上的有线或无线网卡,每块物理网卡都有不同的且唯一的物理地址(
MAC地址
);
虚拟网卡则是通过软件模拟网络环境,构建的虚拟网络适配器,一般是Microsoft Loopback
Adapter
,通过VPN技术实现虚拟网卡间的局域网通信。
Get
Adapter
s
Info
(pAd
转载From:http://www.educity.cn/wenda/351190.html
Get
Adapter
s
Info
函数在64位系统下返回ERROR_NOACCESS的问题
实际应用中一个程序在长时间运行后内存占用较高时发生崩溃,从dump信息中,发现Get
Adapter
s
Info
函数返回了一个奇怪的错误码998(ERROR_NOACCESS),百度搜索不到相关的信息。MSDN上Get
Adapter
s
Info
函数的错误码正常情况下只有5种。并且一共发生的两次崩溃都出现在一台Win7 64位机器
C语言可以通过使用Windows和Linux操作系统提供的相关 API 来
获取
本机
的 CPUID 和 MAC 地址。
首先,我们可以通过Windows API函数`GetSystem
Info
()`
获取
CPUID。示例代码如下:
#include <stdio.h>
#include <windows.h>
void main()
SYSTEM_
INFO
sys_
info
;
GetSystem
Info
(&sys_
info
);
printf("CPU ID: %x %x %x %x\n", sys_
info
.dwProcessorType, sys_
info
.dwPageSize, sys_
info
.dwActiveProcessorMask, sys_
info
.dwNumberOfProcessors);
然后,我们可以通过使用Windows API函数`Get
Adapter
s
Info
()`来
获取
本机
的 MAC 地址。示例代码如下:
#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 (Get
Adapter
s
Info
(
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/sys
info
.h`和`ifaddrs.h`头文件来
获取
CPUID 和 MAC 地址。示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/sys
info
.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <string.h>
void main()
struct sys
info
sys_
info
;
if (sys
info
(&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函数时,可能需要添加某些特定的库文件或在编译选项中指定相关的库文件,具体需要根据不同的操作系统和编译环境来进行调整。