gpt4 book ai didi

c - ifup(8) C 中的等效代码

转载 作者:太空狗 更新时间:2023-10-29 12:33:30 25 4
gpt4 key购买 nike

我一直在搜索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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com