获得网卡MAC地址

获得网卡MAC地址c代码(linux)

  1. /*
     *  get network adapter's mac address
     *  @ifname [IN]  interface name(eg. eth0)
     *  @mac    [OUT] output mac address to it
     */
  2. static int get_mac_addr( const char *ifname, unsigned char *mac )
  3. {
  4.     int sock ;
  5.     int ret;
  6.     struct ifreq ifr;
  7.     sock = socket( AF_INET, SOCK_STREAM, 0 );
  8.     if( sock < 0 )  return  -1;
  9.     memset( &ifr, 0, sizeof(ifr) );
  10.     strcpy( ifr.ifr_name, ifname );
  11.     ret = ioctl( sock, SIOCGIFHWADDR, &ifr, sizeof(ifr) );
  12.     if( ret == 0 )
  13.     {
  14.         memcpy( mac, ifr.ifr_ifru.ifru_hwaddr.sa_data , 6 );
  15.     }
  16.     close( sock );
  17.     return ret;
  18. }

获得网卡MAC地址c代码(Windows,VC)

  1. #include <Iphlpapi.h>
  2. /*
  3. * 获得网卡mac地址
  4. */
  5. int get_mac_addr( char *ifname, unsigned char *mac )
  6. {
  7.     PIP_ADAPTER_INFO pAdapterInfo;
  8.     PIP_ADAPTER_INFO pAdapter = NULL;
  9.     DWORD dwRetVal = 0;
  10.     
  11.     pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
  12.     ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
  13.     
  14.     // Make an initial call to GetAdaptersInfo to get
  15.     // the necessary size into the ulOutBufLen variable
  16.     if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
  17.     {
  18.         free(pAdapterInfo);
  19.         pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen); 
  20.         if (pAdapterInfo == NULL)
  21.         {
  22.             printf("Error allocating memory needed to call GetAdaptersinfo/n");
  23.             return -1;
  24.         }
  25.     } else return -1 ;
  26.     
  27.     if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
  28.     {
  29.         while(*name != '{') name++;
  30.         pAdapter = pAdapterInfo;
  31.         while (pAdapter)
  32.         {
  33.             if( !strncmp( (char*)name,pAdapter->AdapterName, 255 ) )
  34.             {
  35.                 memcpy( mac, pAdapter->Address, 6 );
  36.                 return 0 ;
  37.             }
  38.             // Get next adapter info.
  39.             pAdapter = pAdapter->Next ;
  40.         }
  41.     }
  42.     
  43.     return -1;
  44. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值