Linux编程-获取修改netmask

本文最后更新于:1 年前

获取netmask

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int sock_get_netmask;  
char netmask_addr[50];
struct sockaddr_in *sin;
struct ifreq ifr_netmask;

//创建socket
if ((sock_get_netmask=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("socket create failse...GetLocalNetMask!/n");
return -1;
}

memset(&ifr_netmask, 0, sizeof(ifr_netmask));
strcpy(ifr_netmask.ifr_name, "eth0");

if(ioctl(sock_get_netmask, SIOCGIFNETMASK, &ifr_netmask) < 0 )
{
return -1;
}

sin = (struct sockaddr_in *)&(ifr_netmask.ifr_netmask);//此处设置ifr_mask.ifr_addr也可获取子网掩码

strcpy(netmask_addr,inet_ntoa(sin->sin_addr));

printf("local netmask:%s /n",netmask_addr);
close(sock_get_netmask );
return 0;

修改netmask

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int SetLocalNetMask(const char *szNetMask)  
{
int sock_netmask;
char netmask_addr[32];

struct ifreq ifr_mask;
struct sockaddr_in *sin_net_mask;

if( szNetMask == NULL)
{
return -1;
}

sock_netmask = socket( AF_INET, SOCK_STREAM, 0 );
if( sock_netmask == -1)
{
perror("Not create network socket connect/n");
return -1;
}

memset(&ifr_mask, 0, sizeof(ifr_mask));
strcpy(ifr_mask.ifr_name, "eth0");
sin_net_mask = (struct sockaddr_in *)&ifr_mask.ifr_netmask; //此处设置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 -1;
}

close(sock_netmask);
return 0;
}