加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C语言获取本机Mac地址的代码

发布时间:2020-12-16 07:43:34 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 //linuxint GetLocalMacAddr(char *szMac,int *pnMacLen){ int sock; struct sockaddr_in sin; struct sockaddr sa; struct ifreq ifr; unsigned char

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

//linux
int GetLocalMacAddr(char *szMac,int *pnMacLen)
{
  int   sock;  
  struct   sockaddr_in   sin;  
  struct   sockaddr   sa;  
  struct   ifreq   ifr;  
  unsigned   char   mac[6];  
     
  sock=socket(AF_INET,SOCK_DGRAM,0);  
  if (sock==-1)  
  {  
    perror("socket");  
    return 1;  
  }  
     
  strncpy(ifr.ifr_name,"eth0",sizeof(ifr.ifr_name));  
  ifr.ifr_name[IFNAMSIZ-1]   =   0;  
     
  memset(mac,sizeof(mac));  
  if (ioctl(sock,SIOCGIFHWADDR,&ifr)< 0)  
  {  
    perror("ioctl");  
    return 2;  
  }  
     
  memcpy(&sa,&ifr.ifr_addr,sizeof(sin));  
  memcpy(mac,sa.sa_data,sizeof(mac));  
  char curmacstr[64];
  memset(curmacstr,sizeof(curmacstr));
  //sprintf(curmacstr,"%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
  sprintf(curmacstr,"%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",mac[5]);
  strcpy(szMac,curmacstr);
  return 0;
 
}
 
// windows
int CUtil::GetOtherMacAddr(char *szIP,char *szBuf,int *pnBufLen)
{
    HRESULT hr;
    IPAddr  ipAddr;
    ULONG   pulMac[2];
    ULONG   ulLen;
    char strMacAddr[100]={0};
    ipAddr = inet_addr (szIP);
    memset (pulMac,0xff,sizeof (pulMac));
    ulLen = 6;
    hr = SendARP (ipAddr,pulMac,&ulLen);
    if(hr!=NO_ERROR)
        return 1;
 
    unsigned char * mac_addr=(unsigned char*)pulMac;
    //sprintf(strMacAddr,"%02X-%02X-%02X-%02X-%02X-%02X",mac_addr[0],mac_addr[1],//    mac_addr[2],mac_addr[3],mac_addr[4],mac_addr[5]);
    sprintf(strMacAddr,"%02X:%02X:%02X:%02X:%02X:%02X",mac_addr[2],mac_addr[5]);
    if ( *pnBufLen <= (int)strlen(strMacAddr) )
        return 2;
    strcpy(szBuf,strMacAddr);
    *pnBufLen = strlen(szBuf);
 
    return 0;
}
 
int CUtil::GetLocalMacAddr(char *szMac,int *pnMacLen,char *szIP /*=NULL */)
{
    //如果指定了IP,则直接按IP获取MAC
    //否则,需要先获取本机名称,再获取IP,再获取MAC
    if ( szIP != NULL )
        return GetOtherMacAddr(szIP,szMac,pnMacLen);
 
    char szHostName[256] = {0};
    int nRet = gethostname(szHostName,256);
    if ( nRet == SOCKET_ERROR )
        return 1;
 
    //获取本机名称
    struct hostent* hHost = gethostbyname(szHostName);
    if ( hHost == NULL ||  hHost->h_addr_list[0] == NULL )
        return 2;
 
    //获取IP地址
    memset(szHostName,256);
    strcpy(szHostName,inet_ntoa(*(struct in_addr *)hHost->h_addr_list[0]));
 
    //获取MAC
    return  GetOtherMacAddr(szHostName,pnMacLen);
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读