//擷取子網路遮罩的函數
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 />}
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/davidge333/archive/2010/01/25/5250690.aspx