zoukankan      html  css  js  c++  java
  • 通过当前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;
    }
    

      

  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/daxingxing/p/2546202.html
Copyright © 2011-2022 走看看