C++之获取网卡物理地址(MAC)

本文介绍如何使用C++编程语言获取本地计算机网卡的物理地址,即MAC地址,涉及到网络编程和系统调用的知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include <winsock2.h>   //该头文件定义了Socket编程的功能  
#include <httpext.h>    //该头文件支持HTTP请求  
#include <windef.h>     //该头文件定义了Windows的所有数据基本型态  
#include <Nb30.h>       //该头文件声明了netbios的所有的函数 
#include <stdio.h>      //该头文件声明了输入输出流函数 
#include <stdlib.h>     //该头文件定义了一些通用函数
#pragma comment(lib,"ws2_32.lib")    //连接ws2_32.lib库.只要程序中用到Winsock API 函数,都要用到 Ws2_32.lib  
#pragma comment(lib,"netapi32.lib")   //连接Netapi32.lib库,MAC获取中用到了NetApi32.DLL的功能  

void CheckIP(void)    //定义checkIP函数,用于取本机的ip地址  
{
WSADATA wsaData;
char name[155];      //定义用于存放获得主机名的变量  
char *ip;            //定义IP地址变量  
PHOSTENT hostinfo;

//调用MAKEWORD()获得Winsocl版本的正确值,用于下面的加载Winscok库  
if (WSAStartup(MAKEWORD(2, 0), &wsaData) == 0)
{   //加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续往下执行  
if (gethostname(name, sizeof(name)) == 0)
{ //如果成功,将本地主机名存放入
### C++ 获取网卡 MAC 地址 为了在C++获取网卡MAC地址,可以利用Windows Sockets API (Winsock),这是一组允许应用程序通过网络通信的功能。下面展示了一个简单的例子,该程序会枚举所有的网络接口并打印它们对应的MAC地址。 ```cpp #include <winsock2.h> #include <iphlpapi.h> #include <stdio.h> #pragma comment(lib, "IPHLPAPI.lib") void PrintMacAddress(PIP_ADAPTER_INFO pAdapterInfo) { PIP_ADDR_STRING pIpAddr; printf("Network Adapter: %s\n", pAdapterInfo->Description); printf("Physical Address: "); for (DWORD i = 0; i < pAdapterInfo->AddressLength; ++i) { if (i != 0) printf("-"); printf("%02X", pAdapterInfo->Address[i]); } printf("\n"); for (pIpAddr = &pAdapterInfo->IpAddressList; pIpAddr != NULL; pIpAddr = pIpAddr->Next) { printf("IP Address: %s\n", pIpAddr->IpAddress.String); } } int main() { DWORD dwRetVal = 0; ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO)*16; PIP_ADAPTER_INFO pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulOutBufLen); if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulOutBufLen); } if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) { PIP_ADAPTER_INFO pAdapter = pAdapterInfo; while (pAdapter) { PrintMacAddress(pAdapter); pAdapter = pAdapter->Next; } } else { printf("Call to GetAdaptersInfo failed.\n"); } if (pAdapterInfo) free(pAdapterInfo); return 0; } ``` 这段代码首先包含了必要的头文件,并定义了`PrintMacAddress`函数用来显示每个适配器的信息以及其关联的MAC地址[^1]。接着,在`main()`函数里调用了`GetAdaptersInfo`来填充有关当前机器上所有网络适配器的数据结构数组;最后遍历这些数据并将结果输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值