• 通过当前IP获取当前网卡的MAC地址


    // test.cpp : 定义控制台应用程序的入口点。
    //
    #include "stdafx.h"
    #include <Windows.h>
    #include <IPHlpApi.h>
    
    #pragma comment(lib,"Iphlpapi.lib")
    #pragma comment(lib,"Ws2_32.lib")
    
    /*
    根据IP地址获取网卡适配器设备名称
    OUT AdapterName:适配器名称缓冲区 IN IP:IP地址(网络字节序)
    返回值:TRUE 成功获取
    */
    BOOL GetAdapterByIp(PCHAR AdapterName, ULONG IP)
    {
    	ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
    	IP_ADAPTER_INFO *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
    	IP_ADAPTER_INFO *pAdapterInfoEnum = NULL;
    
    	if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ){
    		// 缓冲区不够大
    		delete[] pAdapterInfo;
    		pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
    	}
    	
    	pAdapterInfoEnum = pAdapterInfo;
    	if( GetAdaptersInfo(pAdapterInfoEnum, &ulAdapterInfoSize) == ERROR_SUCCESS ){
    		do{		//遍历所有适配器
    			if( pAdapterInfoEnum->Type == MIB_IF_TYPE_ETHERNET ){
    				// 判断是否为以太网接口
    				//pAdapterInfoEnum->Description 是适配器描述
    				//pAdapterInfoEnum->AdapterName 是适配器名称
    				//pAdapterInfoEnum->Address		是Mac地址
    				if ( inet_addr(pAdapterInfoEnum->IpAddressList.IpAddress.String) == IP ){
    					printf( "%s IP: %s GATEIP: %s\n ", pAdapterInfoEnum->AdapterName, 
    						pAdapterInfoEnum->IpAddressList.IpAddress.String, pAdapterInfoEnum->GatewayList.IpAddress.String );
    					printf( "MAC: %02X%02X%02X%02X%02X%02X\n", pAdapterInfoEnum->Address[0],pAdapterInfoEnum->Address[1],
    						pAdapterInfoEnum->Address[2],pAdapterInfoEnum->Address[3],pAdapterInfoEnum->Address[4],pAdapterInfoEnum->Address[5]);
    					break;
    				}
    			}
    			pAdapterInfoEnum = pAdapterInfoEnum->Next;
    		}while(pAdapterInfoEnum);
    	}
    	delete []pAdapterInfo;
    	return FALSE;
    }
    
    void test()
    {
    	char szName[MAX_PATH] = {0};
    	int err = gethostname(szName, MAX_PATH);
    
    	if( err==SOCKET_ERROR ) {
    		printf("gethostname fail %08x\n", WSAGetLastError());
    		return;
    	}
    
    	hostent *pHostent = gethostbyname(szName);
    
    	ULONG ulAdapterIp = *(ULONG*)pHostent->h_addr_list[0];
    
    	GetAdapterByIp(NULL,ulAdapterIp);
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	WSADATA wsaData;
    	WSAStartup(MAKEWORD(2,2),&wsaData);
    	test();
    
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    8/30 sql脚本
    navicat批量添加uuid去重
    循环向JsonArray添加对象
    java String字符串去除()里的内容
    工厂模式
    Thymeleaf学习
    SSH开发常用常见的src下建的包名
    04jQuery操作03
    04jQuery筛选jquery对象02
    04jQuery筛选jquery对象01
  • 原文地址:https://www.cnblogs.com/daxingxing/p/2546202.html
Copyright © 2020-2023  润新知