- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在搜索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");
,它会禁用然后启用接口(interface)。最后在iwconfig上看到接口(interface)有IP地址和essid等。我可以 ping 我的路由器,但是,我无法 ping 通任何域或直接 IP 地址
ping 74.125.232.98
输出
connect: Network is unreachable
除非我断开连接并通过网络管理器再次连接到我的路由器。
如果我使用 ifup(8) 就没有这样的问题从终端。
谁能告诉我上面的代码还需要做些什么才能像 ifup(8)
一样工作?
最佳答案
您必须设置默认路由。 ifup
命令会自动为您设置默认路由。您可以通过在 ifup
调用之前和之后运行 $ route -n
来查看这一点。
顺便说一句,谢谢你的代码,它非常有用。
关于c - ifup(8) C 中的等效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848314/
我使用 Virtualbox 在虚拟机上安装了 CentOS 7。在安装操作系统之前,我在机器上添加了一个仅限主机的接口(interface),所以我可以从我的主机环境访问它。在安装 net-tool
关闭。 这个问题是 off-topic 。它目前不接受答案。 想改进这个问题吗? Update the question 所以它是 Stack Overflow 的 on-topic。 关闭 9 年
我一直在搜索ifup 的源代码,但找不到。相反,我修改了 ifdown.c一点点,并有以下代码: int ifup(char interface[]) { struct ifreq ifr[6
我想通过使用 Linux 功能在没有 sudo 的情况下运行 ifup eth0 和 ifdown eth0 对于相同的问题,我为相同的 main.c 编写了代码 int main{ FILE ,*f
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我想在私有(private)网络上创建一个虚拟机。 我正在关注这个网站 http://www.linux-kvm.org/page/Networking帮助配置我的 qemu。 我使用以下命令创建了一
我是一名优秀的程序员,十分优秀!