//擷取子網路遮罩的函數QString GetLocalNetMask()<br />{<br />int sock_netmask;<br />char netmask_addr[50];</p><p>struct ifreq ifr_mask;<br />struct sockaddr_in *net_mask;</p><p>sock_netmask = socket( AF_INET, SOCK_STREAM, 0 );<br />if( sock_netmask == -1)<br />{<br />perror("create socket failture...GetLocalNetMask/n");<br />return "";<br />}</p><p>memset(&ifr_mask, 0, sizeof(ifr_mask));<br />strncpy(ifr_mask.ifr_name, ifname, sizeof(ifr_mask.ifr_name )-1); </p><p>if( (ioctl( sock_netmask, SIOCGIFNETMASK, &ifr_mask ) ) < 0 )<br />{<br />printf("mac ioctl error/n");<br />return "";<br />}</p><p>net_mask = ( struct sockaddr_in * )&( ifr_mask.ifr_netmask );<br />strcpy( netmask_addr, inet_ntoa( net_mask -> sin_addr ) );</p><p>printf("local netmask:%s/n",netmask_addr); </p><p>close( sock_netmask );<br />return QString( netmask_addr );<br />}
//修改子NETMASK的函數
QString SetLocalNetMask(const char *szNetMask)<br />{<br />int sock_netmask;<br />char netmask_addr[32]; </p><p>struct ifreq ifr_mask;<br />struct sockaddr_in *sin_net_mask;</p><p>sock_netmask = socket( AF_INET, SOCK_STREAM, 0 );<br />if( sock_netmask == -1)<br />{<br />perror("Not create network socket connect/n");<br />return "";<br />}</p><p>memset(&ifr_mask, 0, sizeof(ifr_mask));<br />strncpy(ifr_mask.ifr_name, "eth0", sizeof(ifr_mask.ifr_name )-1);<br />sin_net_mask = (struct sockaddr_in *)&ifr_mask.ifr_addr;<br />sin_net_mask -> sin_family = AF_INET;<br />inet_pton(AF_INET, szNetMask, &sin_net_mask ->sin_addr);</p><p>if(ioctl(sock_netmask, SIOCSIFNETMASK, &ifr_mask ) < 0)<br />{<br />printf("sock_netmask ioctl error/n");<br />return "";<br />}<br />}