promisc.c,v null: test devices for sniffers and device moniters.

blind (blind@XMISSION.COM)
Wed, 03 Sep 1997 23:29:24 -0600

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 --