开发者

C/C++通过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,srcIp编程客栈,(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.devze.comlt;<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.devze.com" << std::endl;
    }

    return 0;
}

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜