comment vérifier l’état d’un périphérique réseau en C?

J’aimerais vérifier l’état des périphériques réseau, par exemple le mode promiscous. Fondamentalement, comme montré avec ip une commande.

Peut-être que quelqu’un pourrait me pousser dans la bonne direction?

Je souhaite le faire en C pour Linux afin que des en-têtes spécifiques à Linux soient disponibles.

Vous devez utiliser l’ioctl SIOCGIFFLAGS pour récupérer les indicateurs associés à une interface. Vous pouvez ensuite vérifier si l’indicateur IFF_PROMISC est défini:

 #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 vous souhaitez définir l’interface en mode espion, vous aurez besoin des privilèges root, mais vous pouvez simplement définir le champ dans ifr_flags et utiliser l’ioctl SIOCSIFFLAGS :

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