我一直在搜索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)
?
答案 0 :(得分:1)
您必须设置默认路线。 ifup
命令会自动为您设置默认路由。您可以在$ route -n
来电之前和之后运行ifup
来查看此信息。
btw感谢您提供非常有用的代码。
答案 1 :(得分:0)
您必须先设置路由,然后才能访问外部主机