"ifconfig [dev_name] up"
int interface_up(char * interface_name)
{
int s;
if((s = socket(PF_INET,SOCK_STREAM,0)) < 0)
{
perror("Socket");
return -1;
}
struct ifreq ifr;
strcpy(ifr.ifr_name,interface_name);
short flag;
flag = IFF_UP;
if(ioctl(s,SIOCGIFFLAGS,&ifr) < 0)
{
perror("ioctl");
return -1;
}
ifr.ifr_ifru.ifru_flags |= flag;
if(ioctl(s,SIOCSIFFLAGS,&ifr) < 0)
{
perror("ioctl");
return -1;
}
return 0;
}
"ifconfig [dev_name] down"
int interface_down(char * interface_name)
{
if(strcmp(interface_name,"lo") == 0)
{
printf("You can't pull down interface lo\n");
return 0;
}
int s;
if((s = socket(PF_INET,SOCK_STREAM,0)) < 0)
{
perror("Socket");
return -1;
}
struct ifreq ifr;
strcpy(ifr.ifr_name,interface_name);
short flag;
flag = ~IFF_UP;
if(ioctl(s,SIOCGIFFLAGS,&ifr) < 0)
{
perror("ioctl");
return -1;
}
ifr.ifr_ifru.ifru_flags &= flag;
if(ioctl(s,SIOCSIFFLAGS,&ifr) < 0)
{
perror("ioctl");
return -1;
}
return 0;
}
"set ip address"
int set_ipaddr(char * interface_name,char * ip)
{
int s;
if((s = socket(PF_INET,SOCK_STREAM,0)) < 0)
{
perror("Socket");
return -1;
}
struct ifreq ifr;
strcpy(ifr.ifr_name,interface_name);
struct sockaddr_in addr;
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family = PF_INET;
inet_aton(ip,&addr.sin_addr);
memcpy(&ifr.ifr_ifru.ifru_addr,&addr,sizeof(struct sockaddr_in));
if(ioctl(s,SIOCSIFADDR,&ifr) < 0)
{
perror("ioctl");
return -1;
}
return 0;
}
留言列表