C/C++通過(guò)IP獲取局域網(wǎng)網(wǎng)卡MAC地址
C/C++通過(guò)IP獲取局域網(wǎng)網(wǎng)卡MAC地址
通過(guò)win32 SendARP獲取MAC地址
代碼
#include <winsock2.h> #include <iostream> #include<iphlpapi.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"iphlpapi.lib") /** * 通過(guò)局域網(wǎng)ip獲取網(wǎng)卡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; };
調(diào)用
void main(int* argc,char* argv[]) { // std::cout << 1111 <<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
方法補(bǔ)充
除了上文的方法,小編還為大家整理了C++ 通過(guò)IP地址獲取MAC地址的其他方法,希望對(duì)大家有所幫助
話不多說(shuō) 直接上代碼
#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地址轉(zhuǎn)換為ULONG格式 ULONG destIp = inet_addr(ipAddress.c_str()); if (destIp == INADDR_NONE) { std::cerr << "Invalid IP address." << std::endl; WSACleanup(); return ""; } // 準(zhǔn)備接收MAC地址的緩沖區(qū) ULONG macAddr[2]; ULONG macAddrLen = 6; memset(macAddr, 0xff, sizeof(macAddr)); // 調(diào)用SendARP函數(shù)獲取MAC地址 DWORD ret = SendARP(destIp, 0, macAddr, &macAddrLen); if (ret == NO_ERROR) { // 將MAC地址轉(zhuǎn)換為字符串格式 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 ""; } } 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." << std::endl; } return 0; }
到此這篇關(guān)于C/C++通過(guò)IP獲取局域網(wǎng)網(wǎng)卡MAC地址的文章就介紹到這了,更多相關(guān)C++獲取局域網(wǎng)MAC地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用
下面小編就為大家?guī)?lái)一篇淺談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12利用Qt實(shí)現(xiàn)仿QQ設(shè)置面板功能
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)仿QQ設(shè)置面板功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下2022-12-12C語(yǔ)言實(shí)現(xiàn)惡作劇關(guān)機(jī)程序
大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)惡作劇關(guān)機(jī)程序,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01C++線性表深度解析之動(dòng)態(tài)數(shù)組與單鏈表和棧及隊(duì)列的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)動(dòng)態(tài)數(shù)組、單鏈表、棧、隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解分析
鏈表可以說(shuō)是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護(hù)一組數(shù)據(jù)集合時(shí),就可以使用鏈表,這一點(diǎn)和數(shù)組很相似2021-11-11