www.pudn.com > src.rar > allpromisc.c
#include "nids.h" #ifdef __linux__ #include#include #include #include #include #include int set_all_promisc() { struct ifreq * ifaces; int ifaces_size=8 * sizeof(struct ifreq); struct ifconf param; int sock; unsigned int i; sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); if (sock <= 0) return 0; do { ifaces_size*=2; ifaces=alloca(ifaces_size); param.ifc_len = ifaces_size; param.ifc_req = ifaces; if (ioctl(sock, SIOCGIFCONF, ¶m)) goto err; } while (param.ifc_len>=ifaces_size); for (i = 0; i < param.ifc_len / sizeof(struct ifreq); i++) { if (ioctl(sock, SIOCGIFFLAGS, ifaces + i)) goto err; ifaces[i].ifr_flags |= IFF_PROMISC; if (ioctl(sock, SIOCSIFFLAGS, ifaces + i)) goto err; } close(sock); return 1; err: close(sock); return 0; } #endif