在Linux下获取修改子网掩码NETMASK的两个函数
在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\n");
- 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\n");
- return "";
- }
- net_mask = ( struct sockaddr_in * )&( ifr_mask.ifr_netmask );
- strcpy( netmask_addr, inet_ntoa( net_mask -> sin_addr ) );
- printf("local netmask:%s\n",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\n");
- 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\n");
- return "";
- }
- }
评论暂时关闭