home *** CD-ROM | disk | FTP | other *** search
-
- This will scan your devices to detect sniffers on your system.
- Linux support is ready but SunOS has some problems (mainly in
- net/if.h when i tried compiling i got a lot of parse errors in
- if.h and socket.h <shrug> maybe the system i was on was damaged.)
-
- Comments welcome :-).
-
- begin promisc.c --
- // $Id: promisc.c,v null 1997/03/09 10:35:58 trevorl Exp $
- // promisc.c: test devices for sniffers and device moniters.
- //
- // Copyright (C) 1997 Trevor F. Linton (blind@xmission.com)
- //
- // Created for Linux based loosely upon linux ioctl controls.
- // ioctl() is used to detect different flags set on devices used
- // on your system.
- //
- // gcc -o sys_test promisc.c
- //
-
- #include <stdio.h>
- #include <sys/socket.h>
- #include <sys/ioctl.h>
- #include <errno.h>
- #if defined (__linux__)
- #include <linux/if.h>
- #else
- #include <net/if.h>
- #endif
- #define size(p) (sizeof(p))
-
- int dev_flags=0,
- device_flags=0,
- set_look_all=0;
-
- int
- main(int argc, char **argv) {
- struct ifreq ifreq, *ifr;
- struct ifconf ifc;
- char buf[BUFSIZ], *cp, *cplim;
-
- if(argc <= 1)
- set_look_all++;
-
- if((dev_flags = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
- fprintf(stderr, "An error occured establiashing while establishing a socket\n");
- perror("socket");
- exit(1);
- }
-
- ifc.ifc_len = sizeof(buf);
- ifc.ifc_buf = buf;
-
- if(ioctl(dev_flags, SIOCGIFCONF, (char *)&ifc) < 0) {
- perror("SIOCGIFCONF");
- exit(1);
- }
- ifr = ifc.ifc_req;
- cplim=buf+ifc.ifc_len;
- for(cp = buf; cp < cplim;
- cp += sizeof (ifr->ifr_name) + size(ifr->ifr_addr))
- {
- ifr = (struct ifreq *)cp;
-
- if(argv[1])
- if(strcmp(ifr->ifr_name, argv[1]) && !set_look_all)
- continue;
-
- ifreq = *ifr;
- if(ioctl(dev_flags, SIOCGIFFLAGS, (char *)&ifreq) < 0)
- {
- fprintf(stderr, "SIOCGIFFLAGS: %s (get interface flags): %s\n", ifr->ifr_name,strerror(errno));
- continue;
- }
-
- device_flags=0; device_flags = ifreq.ifr_flags;
- fprintf(stdout, "%s: ", ifreq.ifr_name);
-
- if((device_flags & IFF_PROMISC) != 0)
- fprintf(stdout, "Promiscuous: Sniffer detected.\n");
- else
- fprintf(stdout, "Not-Promiscous: No Sniffers detected.\n");
-
- if(!set_look_all)
- exit(0); // We're finished..
- else
- continue; // Go onto next device..
-
- }
- if(!set_look_all)
- fprintf(stdout, "%s: Unknown device.\n", argv[1]);
- // Device not found..
- }
- end promisc.c --
-
-