【发布时间】:2013-03-30 20:19:43
【问题描述】:
标题几乎说明了一切。如果我运行ifconfig,我会得到:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet -snip- netmask 255.255.255.0 broadcast -snip-
...
使用它,我可以知道它是否启动 (<UP,...),但我希望能够在 C(或 C++,如果那里有更简单的解决方案)中执行此操作,而不依赖于解析外部进程。
这是我到目前为止所得到的(不起作用):
bool is_interface_online(std::string interface) {
struct ifreq ifr;
int sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP);
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, interface.c_str());
if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {
perror("SIOCGIFFLAGS");
}
close(sock);
return !!(ifr.ifr_flags | IFF_UP);
}
谁能指出我正确的方向?
【问题讨论】:
-
ifconfig 是开源的顺便说一句
-
如果您的接口不使用 IPv6,则会失败。