2

我一直在搜索 的源代码ifup,但我找不到任何东西。相反,我稍微修改了ifdown.c并具有以下代码:

int ifup(char interface[])
{
    struct ifreq ifr[64];
    struct ifconf ifc;
    int i, fd;
    int numif;
    int shaper;

    if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        fprintf(stderr, "ifdown: ");
        perror("socket");
        return -1;
    }
    ifc.ifc_len = sizeof(ifr);
    ifc.ifc_req = ifr;

    if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
        fprintf(stderr, "ifup: ");
        perror("SIOCGIFCONF");
        close(fd);
        return -1;
    }
    numif = ifc.ifc_len / sizeof(struct ifreq);

    for (shaper = 1; shaper >= 0; shaper--) {
        for (i = 0; i < numif; i++) {
            if (strcmp(ifr[i].ifr_name, interface) == 0){
                ifr[i].ifr_flags |= (IFF_UP);
                if (ioctl(fd, SIOCSIFFLAGS, &ifr[i]) < 0) {
                    fprintf(stderr, "ifup: shutdown ");
                    perror(ifr[i].ifr_name);
                }
            }
        }
    }
    close(fd);

    return 0;
}

如果我这样做ifdown("wlan0");ifup("wlan0");使用上面的代码,它会禁用然后启用接口。最后在iwconfig上看到接口有IP地址和essid等。我可以 ping 我的路由器,但是,我无法 ping 任何域或直接 IP 地址

ping 74.125.232.98输出

connect: Network is unreachable

除非我通过网络管理器断开连接并再次连接到我的路由器。

如果我从终端使用ifup(8)就没有这样的问题。

谁能告诉我上面的代码还需要做什么才能工作ifup(8)

4

2 回答 2

1

您必须设置默认路由。ifup命令会自动为您设置默认路由。您可以通过在通话$ route -n之前和之后运行来查看这一点。ifup

顺便说一句,感谢您提供的代码,它非常有用。

于 2014-01-29T01:27:38.390 回答
0

在访问外部主机之前,您还必须设置路由

于 2013-11-07T22:51:29.063 回答