在Linux下获取修改子网掩码NETMASK的两个函数


//获取子网掩码的函数

  1. QString GetLocalNetMask()   
  2. {   
  3.     int sock_netmask;   
  4.     char netmask_addr[50];   
  5.   
  6.     struct ifreq ifr_mask;   
  7.     struct sockaddr_in *net_mask;   
  8.            
  9.     sock_netmask = socket( AF_INET, SOCK_STREAM, 0 );   
  10.     if( sock_netmask == -1)   
  11.     {   
  12.         perror("create socket failture...GetLocalNetMask\n");   
  13.         return "";   
  14.     }   
  15.        
  16.     memset(&ifr_mask, 0, sizeof(ifr_mask));      
  17.     strncpy(ifr_mask.ifr_name, ifname, sizeof(ifr_mask.ifr_name )-1);      
  18.   
  19.     if( (ioctl( sock_netmask, SIOCGIFNETMASK, &ifr_mask ) ) < 0 )    
  20.     {   
  21.         printf("mac ioctl error\n");   
  22.         return "";   
  23.     }   
  24.        
  25.     net_mask = ( struct sockaddr_in * )&( ifr_mask.ifr_netmask );   
  26.     strcpy( netmask_addr, inet_ntoa( net_mask -> sin_addr ) );   
  27.        
  28.     printf("local netmask:%s\n",netmask_addr);       
  29.        
  30.     close( sock_netmask );   
  31.     return QString( netmask_addr );   
  32. }  

//修改子NETMASK的函数

  1. QString SetLocalNetMask(const char *szNetMask)   
  2. {   
  3.     int sock_netmask;   
  4.     char netmask_addr[32];      
  5.   
  6.     struct ifreq ifr_mask;   
  7.     struct sockaddr_in *sin_net_mask;   
  8.            
  9.     sock_netmask = socket( AF_INET, SOCK_STREAM, 0 );   
  10.     if( sock_netmask == -1)   
  11.     {   
  12.         perror("Not create network socket connect\n");   
  13.         return "";   
  14.     }   
  15.        
  16.     memset(&ifr_mask, 0, sizeof(ifr_mask));      
  17.     strncpy(ifr_mask.ifr_name, "eth0"sizeof(ifr_mask.ifr_name )-1);      
  18.     sin_net_mask = (struct sockaddr_in *)&ifr_mask.ifr_addr;   
  19.     sin_net_mask -> sin_family = AF_INET;   
  20.     inet_pton(AF_INET, szNetMask, &sin_net_mask ->sin_addr);   
  21.   
  22.     if(ioctl(sock_netmask, SIOCSIFNETMASK, &ifr_mask ) < 0)    
  23.     {   
  24.         printf("sock_netmask ioctl error\n");   
  25.         return "";   
  26.     }   
  27. }  

相关内容