首页 / 操作系统 / Linux / 在Linux下获取修改子网掩码NETMASK的两个函数
//获取子网掩码的函数
- QString GetLocalNetMask()
- {
- int sock_netmask;
- char netmask_addr[50];
-
- struct ifreq ifr_mask;
- struct sockaddr_in *net_mask;
-
- sock_netmask = socket( AF_INET, SOCK_STREAM, 0 );
- if( sock_netmask == -1)
- {
- perror("create socket failture...GetLocalNetMask
");
- return "";
- }
-
- memset(&ifr_mask, 0, sizeof(ifr_mask));
- strncpy(ifr_mask.ifr_name, ifname, sizeof(ifr_mask.ifr_name )-1);
-
- if( (ioctl( sock_netmask, SIOCGIFNETMASK, &ifr_mask ) ) < 0 )
- {
- printf("mac ioctl error
");
- return "";
- }
-
- net_mask = ( struct sockaddr_in * )&( ifr_mask.ifr_netmask );
- strcpy( netmask_addr, inet_ntoa( net_mask -> sin_addr ) );
-
- printf("local netmask:%s
",netmask_addr);
-
- close( sock_netmask );
- return QString( netmask_addr );
- }
//修改子NETMASK的函数
- QString SetLocalNetMask(const char *szNetMask)
- {
- int sock_netmask;
- char netmask_addr[32];
-
- struct ifreq ifr_mask;
- struct sockaddr_in *sin_net_mask;
-
- sock_netmask = socket( AF_INET, SOCK_STREAM, 0 );
- if( sock_netmask == -1)
- {
- perror("Not create network socket connect
");
- return "";
- }
-
- memset(&ifr_mask, 0, sizeof(ifr_mask));
- strncpy(ifr_mask.ifr_name, "eth0", sizeof(ifr_mask.ifr_name )-1);
- sin_net_mask = (struct sockaddr_in *)&ifr_mask.ifr_addr;
- sin_net_mask -> sin_family = AF_INET;
- inet_pton(AF_INET, szNetMask, &sin_net_mask ->sin_addr);
-
- if(ioctl(sock_netmask, SIOCSIFNETMASK, &ifr_mask ) < 0)
- {
- printf("sock_netmask ioctl error
");
- return "";
- }
- }