首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ifup(8) C语言中的等效代码

ifup(8) C语言中的等效代码
EN

Stack Overflow用户
提问于 2013-11-08 06:49:15
回答 2查看 3K关注 0票数 2

我一直在搜索ifup的源代码,但我没有找到任何代码。取而代之的是,我稍微修改了一下ifdown.c,并编写了以下代码:

代码语言:javascript
运行
复制
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输出

代码语言:javascript
运行
复制
connect: Network is unreachable

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

如果我在终端使用ifup(8),就不会有这样的问题。

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

EN

回答 2

Stack Overflow用户

发布于 2014-01-29 09:27:38

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

顺便说一下,谢谢你的代码,它是非常有用的。

票数 1
EN

Stack Overflow用户

发布于 2013-11-08 06:51:29

您还必须先设置路由,然后才能到达外部主机

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19848314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档