获取本机mac地址和Ip地址

来源:互联网 发布:淘宝介入可以撤销吗 编辑:程序博客网 时间:2024/04/30 14:32
  1. #include <sys/ioctl.h>  
  2. #include <sys/socket.h>  
  3. #include <netinet/in.h>  
  4. #include <net/if.h>  
  5. #include <arpa/inet.h>  
  6. #include <sys/types.h>  
  7. #include <stdio.h>  
  8. #include <string.h>  
  9.   
  10. int main(int argc, char* argv[])  
  11. {  
  12.         if(argc < 2)  
  13.             printf("usage getmac  <interface>   interface为网络设备,如eth0, 可以通过/sbin/ifconfig查看\n"),exit(-1);  
  14.         /* 
  15.         struct ifreq { 
  16.   union { 
  17.     char    ifrn_name[IFNAMSIZ];    Unique Windows Adapter name (A GUID)  
  18.   } ifr_ifrn; 
  19.         */  
  20.     struct ifreq req;  
  21.     int sock;  
  22.     char mac[32];  
  23.     if((sock=socket(AF_INET,SOCK_STREAM,0))< 0)  
  24.     {  
  25.         printf("error socket\n");  
  26.         return 2;  
  27.     }  
  28.   
  29.       //#define SIOCGIFHWADDR   0x8927          /* Get hardware address         */  
  30.     strcpy(req.ifr_name,argv[1]);  
  31.     if(ioctl(sock,SIOCGIFHWADDR,&req) < 0)  
  32.     {  
  33.         printf("error ioctl SIOCGIFHWADDR\n");  
  34.         return 3;  
  35.     }  
  36.   
  37.     unsigned char* macArr= (unsigned char*)req.ifr_hwaddr.sa_data;  
  38.     sprintf(mac, "%02x-%02x-%02x-%02x-%02x-%02x", macArr[0],macArr[1],macArr[2],macArr[3],macArr[4],macArr[5]);  
  39.     printf("MAC:%s\n",mac);  
  40.       
  41.       
  42.     struct ifreq req2;  
  43.     strcpy(req2.ifr_name,argv[1]);  
  44.     //#define SIOCGIFADDR     0x8915          /* get PA address               */  
  45.     //获取IO设备的更多信息见/usr/include/bits/ioctls.h  
  46.     if(ioctl(sock, SIOCGIFADDR,&req2) < 0)  
  47.     {  
  48.         printf("error ioctl SIGCGIFADDR\n");  
  49.         return 4;  
  50.     }  
  51.     char ipAddr[64] = {0};   
  52.     inet_ntop(AF_INET,&((struct sockaddr_in*)&(req2.ifr_addr))->sin_addr, ipAddr,sizeof(ipAddr));  
  53.     printf("IPADDR %s\n", ipAddr);  
  54.     return 0;