我一直在搜索 的源代码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)
?