在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 ""; } }

 

你可能感兴趣的:(Linux)