Titel ziemlich sagt alles. Wenn ich ifconfig
laufen, bekomme ich diese:Wie überprüft man, ob die Schnittstelle ist
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet -snip- netmask 255.255.255.0 broadcast -snip-
...
diese verwenden, kann ich wissen, ob es nach oben oder nicht (<UP,...
), aber ich möchte in der Lage sein, dies in C zu tun (oder C++, wenn es eine ist einfachere Lösung), ohne auf die Analyse externer Prozesse angewiesen zu sein.
Hier ist, was ich bisher habe (nicht funktioniert):
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);
}
Kann mir jemand für diese in die richtige Richtung?
ifconfig ist open source btw – Slava