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

arrow
arrow
    全站熱搜

    phchiu 發表在 痞客邦 留言(0) 人氣()