C/C++通过IP获取局域网网卡MAC地址

2025-02-06 16:50

本文主要是介绍C/C++通过IP获取局域网网卡MAC地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下...

C/C++通过IP获取局域网网卡MAC地址

通过win32 SendARP获取MAC地址

代码

#include <winsock2.h>
#include <IOStream>
#include<iphlpapi.h>
 
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"iphlpapi.lib")
 
/**
 * 通过局域网ip获取网卡MAC地址
*/
std::string GetMacAddress(std::string destIpStr)
{
    IPAddr srcIp = 0;
    IPAddr destIp = 0;
    ULONG mac[2];
    ULONG macLen = 6;
    destIp = inet_addr(destIpStr.c_str());
    memset(mac,0xff,sizeof(mac));
    SendARP(destIp,srcIpChina编程,(PVOID)mac,(PULONG)&macLen);
    printf("%p\r\n",mac);
 
    // 打印mac
    byte* bMac = (byte*)mac;
    std::string macResult;
    for (size_t i = 0; i < macLen; i++)
    {
        char macItem[2];
        /* code */
        sprintf(macItem,"%.2X",bMac[i]);
        macResult.append(macItem);
        if(i<macLen-1)
        {
            macResult.append("-");
        }
    }
    
    return macResult;
};

调用

void main(int* argc,char* argv[])
{
    // std::cout << 1111 &www.chinasem.cnlt;<std::endl;
    std::string ip;
    ip.append("192.168.31.191");
    std::string mac = GetMacAddress(ip);
    std::cout <<"ip\tmac"<< std::endl;
    std::cout << ip.c_str() << "\t" <<mac.c_str() << std::endl;
    getchar();
};

输出

 ip     mac
192.168.31.191  08-D1-27-8F-25-EV

方法补充

除了上文的方法,小编还为大家整理了C++ 通过IP地址获取MAC地址的其他方法,希望对大家有所帮助

话不多说 直接上代码

#include <iostream>
#include <string>
#include <winsock2.h>
#include <iphlpapi.h>
#pragma warning(disable:4996)

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "iphlpapi.lib")

std::string getMacAddress(const std::string& ipAddress) {
    // 初始化Winsock
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        std::cerr << "WSAStartup failed." << std::endl;
        return "";
    }

    // 将IP地址转换为ULONG格式
    ULONG destIp = inet_addr(ipAddress.c_str());
    if (destIp == INADDR_NONE) {
        std::cerr << "Invalid IP address." << std::endl;
        WSACleanup();
        return "";
    }

    // 准备接收MAC地址的缓冲区
    ULONG macAddr[2];
    ULONG macAddrLen = 6;
    memset(macAddr, 0xff, sizeof(macAddr));

    // 调用SendARP函数获取MAC地址
    dwORD ret = SendARP(destIp, 0, macAddr, &macAddrLen);
    if (ret == NO_ERROR) {
        // 将MAC地址转换为字符串格式
        BYTE* macBytes = (BYTE*)macAddr;
        char macStr[18];
        sprintf_s(macStr, sizeof(macStr), "编程%02X:%02X:%02X:%02X:%02X:%02X",
            macBytes[0], macBytes[1], macBytes[2],
            macBytes[3], macBytes[4], macBytes[5]);
        WSACleanup();
        return std::string(macStr);
    }
    else {
        std::cerr << "Failed to get MAC address. Error code: " << ret << std::endl;
        WSACleanup();
        return "";
  php  }
}

int main() {
    std::string ipAddress;
    std::cout << "Enter IP address: ";
    std::cin >> ipAddress;

    std::string macAddress = getMacAddress(ipAddress);
    if (!macAddress.empty()) {
        std::cout << "MAC Address: " << macAddress << std::endl;
    }
    else {
        std::cout << "Could not retrieve MAC address.www.chinasem.cn" << std::endl;
    }

    return 0;
}

到此这篇关于C/C++通过IP获取局域网网卡MAC地址的文章就介绍到这了,更多相关C++获取局域网MAC地址内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于C/C++通过IP获取局域网网卡MAC地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153311

相关文章

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单