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(ðreq, 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, ðreq); 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, ðreq);