¿Cómo comprobar el estado de un dispositivo de red en C?

Me gustaría verificar el estado de los dispositivos de red, por ejemplo, el modo promiscous. Básicamente como se muestra con ip a comando.

Tal vez alguien podría empujarme en la dirección correcta?

Quiero hacer esto en C para linux para que haya disponibles encabezados específicos de linux.

SIOCGIFFLAGS utilizar el ioctl de SIOCGIFFLAGS para recuperar los indicadores asociados con una interfaz. A continuación, puede comprobar si el indicador IFF_PROMISC está establecido:

 #include  #include  #include  #include  /* ioctl() */ #include  /* socket() */ #include  #include  /* close() */ #include  /* struct ifreq */ int main(int argc, char* argv[]) { /* this socket doesn't really matter, we just need a descriptor * to perform the ioctl on */ int fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); struct ifreq ethreq; memset(&ethreq, 0, sizeof(ethreq)); /* set the name of the interface we wish to check */ strncpy(ethreq.ifr_name, "eth0", IFNAMSIZ); /* grab flags associated with this interface */ ioctl(fd, SIOCGIFFLAGS, &ethreq); if (ethreq.ifr_flags & IFF_PROMISC) { printf("%s is in promiscuous mode\n", ethreq.ifr_name); } else { printf("%s is NOT in promiscuous mode\n", ethreq.ifr_name); } close(fd); return 0; } 

Si desea configurar la interfaz en modo promiscuo, necesitará privilegios de root, pero simplemente puede configurar el campo en ifr_flags y usar el ioctl de SIOCSIFFLAGS :

 /* ... */ ethreq.ifr_flags |= IFF_PROMISC; ioctl(fd, SIOCSIFFLAGS, &ethreq);