#!/bin/sh


KISMET=/etc/kismet/kismet.conf
CH=$3; [ x$3 = "x" ] && CH=10


which iwpriv &> /dev/null || 
  { echo Wireless tools not found ; exit ; }


echo -e "\nusage: `basename $0` <start|stop> <interface> [channel]\n"
echo -e "Interface\tChipset\t\tDriver\n"


function startStdIface() {
	iwconfig $1 mode monitor 2> /dev/null >/dev/null
	iwconfig $1 channel $2 2> /dev/null >/dev/null
	iwconfig $1 key off 2> /dev/null >/dev/null
	ifconfig $1 up
	echo -n " (monitor mode enabled)"
}


function stopStdIface() {
	ifconfig $1 down
	iwconfig $1 mode Managed 2> /dev/null >/dev/null
	echo -n " (monitor mode disabled)"
}


for iface in `iwconfig 2>/dev/null | egrep '(IEEE|ESSID)' | cut -b 1-7 | grep -v wifi`
do
 if [ x"`iwpriv $iface 2>/dev/null | grep force_reset`" != "x" ]
 then
    echo -e -n "$iface\t\tHermesI\t\torinoco"
    if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
    then
        cp $KISMET~ $KISMET 2>/dev/null &&
        echo "source=orinoco,$iface,HermesI" >>$KISMET
        iwconfig $iface mode Monitor channel $CH &>/dev/null
        iwpriv $iface monitor 1 $CH &>/dev/null
        ifconfig $iface up
        echo -n " (monitor mode enabled)"
    fi
    if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
    then
        ifconfig $iface down
        iwpriv $iface monitor 0 &>/dev/null
        iwconfig $iface mode Managed &>/dev/null
        echo -n " (monitor mode disabled)"
    fi
    echo
    continue
 fi


 if [ `iwpriv $iface 2>/dev/null | grep -v $iface | md5sum | awk '{print $1}'` == "2310629be8b9051238cde37520d97755" ]
 then
    echo -e -n "$iface\t\tCentrino b\tipw2100"
    if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
    then
        cp $KISMET~ $KISMET 2>/dev/null &&
        echo "source=ipw2100,$iface,Centrino_b" >>$KISMET
        startStdIface $iface $CH
    fi
    if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
    then
        stopStdIface $iface
    fi
    echo
    continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep sw_reset`" != "x" ]
 then
    MODINFO=`modinfo ipw2200 | awk '/^version/ {print $2}'`
    if [ "$MODINFO" = "1.0.6" ] || [ "$MODINFO" = "1.0.9" ] || [ "$MODINFO" = "1.0.10" ]
    then
    	echo -e -n "$iface\t\tCentrino b/g\tipw2200"
    	if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
    	then
    	    cp $KISMET~ $KISMET 2>/dev/null &&
    	    echo "source=ipw2200,$iface,Centrino_g" >>$KISMET
    	    startStdIface $iface $CH
    	fi
    	if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
    	then
    	    stopStdIface $iface
     	fi
     else
      	echo -e -n "$iface\t\tCentrino b/g\tipw2200 (Module v1.0.6/1.0.9 or 1.0.10 required)"
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep inact_auth`" != "x" ]
 then
     if [ -e "/proc/sys/net/$iface/%parent" ]
     then
	echo -e "$iface\t\tAtheros\t\tmadwifi-ng VAP (parent: `cat /proc/sys/net/$iface/%parent`)"
	if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
    	then
    		wlanconfig $iface destroy
    		echo -n " (VAP destroyed)"
    	fi
       continue
     fi
     echo -e -n "$iface\t\tAtheros\t\tmadwifi"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=madwifi_g,$iface,Atheros" >>$KISMET
         startStdIface $iface $CH
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep extrates`" != "x" ]
 then
     echo -e -n "$iface\t\tPrismGT\t\tprism54"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=prism54g,$iface,Prism54" >>$KISMET
         ifconfig $iface up
         iwconfig $iface mode Monitor channel $CH
         iwpriv $iface set_prismhdr 1 &>/dev/null
         echo -n " (monitor mode enabled)"
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep antsel_rx`" != "x" ]
 then
     echo -e -n "$iface\t\tPrism2\t\tHostAP"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=hostap,$iface,Prism2" >>$KISMET
         iwconfig $iface mode Monitor channel $CH
         iwpriv $iface monitor_type 1 &>/dev/null
         ifconfig $iface up
         echo -n " (monitor mode enabled)"
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`wlancfg show $iface 2>/dev/null | grep p2CnfWEPFlags`" != "x" ]
 then
     echo -e -n "$iface\t\tPrism2\t\twlan-ng"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=wlanng,$iface,Prism2" >>$KISMET
         wlanctl-ng $iface lnxreq_ifstate ifstate=enable >/dev/null
         wlanctl-ng $iface lnxreq_wlansniff enable=true channel=$CH \
                           prismheader=true wlanheader=false \
                           stripfcs=true keepwepflags=true >/dev/null
         echo p2CnfWEPFlags=0,4,7 | wlancfg set $iface
         ifconfig $iface up
         echo -n " (monitor mode enabled)"
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         ifconfig $iface down
         wlanctl-ng $iface lnxreq_wlansniff enable=false  >/dev/null
         wlanctl-ng $iface lnxreq_ifstate ifstate=disable >/dev/null
         echo -n " (monitor mode disabled)"
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep bbp`" != "x" ]
 then
     echo -e -n "$iface\t\tRalink b/g\trt2500"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=rt2500,$iface,Ralink_g" >>$KISMET
         startStdIface $iface $CH
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep wpapsk`" != "x" ]
 then
     echo -e -n "$iface\t\tRalink USB\trt2570"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=rt2500,$iface,Ralink_g" >>$KISMET
         startStdIface $iface $CH
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep debugtx`" != "x" ]
 then
     echo -e -n "$iface\t\tRTL8180\t\tr8180"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=rt8180,$iface,Realtek" >>$KISMET
         iwconfig $iface mode Monitor channel $CH
         iwpriv $iface prismhdr 1 &>/dev/null
         ifconfig $iface up
         echo -n " (monitor mode enabled)"
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep dbg_flag`" != "x" ]
 then
     echo -e -n "$iface\t\tZyDAS\t\tzd1211"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=wlanng_legacy,$iface,ZyDAS" >>$KISMET
         startStdIface $iface $CH
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep GetAcx1`" != "x" ]
 then
     echo -e -n "$iface\t\tTI\t\tacx111"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=acx100,$iface,TI" >>$KISMET
         startStdIface $iface $CH
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep write_sprom`" != "x" ]
 then
     echo -e -n "$iface\t\tBroadcom\t\tbcm43xx"
     if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
     then
         cp $KISMET~ $KISMET 2>/dev/null &&
         echo "source=bcm43xx,$iface,broadcom" >>$KISMET
         startStdIface $iface $CH
     fi
     if [ x$1 = "xstop" ] && [ x$2 = x$iface ]
     then
         stopStdIface $iface
     fi
     echo
     continue
 fi


 if [ x"`iwpriv $iface 2>/dev/null | grep ndis_reset`" != "x" ]
 then
     echo -e -n "$iface\t\tUnknown\t\tndiswrapper"
     if [ x$2 = x$iface ]
     then
         echo -e " (MONITOR MODE NOT SUPPORTED)"
     fi
     echo
     continue
 fi


echo -e "$iface\t\tUnknown\t\tUnknown (MONITOR MODE NOT SUPPORTED)"


done


for iface in `ifconfig -a 2>/dev/null | egrep HWaddr | cut -b 1-7`
do
 if [ -e "/proc/sys/dev/$iface/fftxqmin" ]
 then
    ifconfig $iface up
    echo -e -n "$iface\t\tAtheros\t\tmadwifi-ng"       
    if [ x$1 = "xstart" ] && [ x$2 = x$iface ]
    then
    	
        IFACE=`wlanconfig ath create wlandev $iface wlanmode monitor`
        cp $KISMET~ $KISMET 2>/dev/null &&
        echo "source=madwifing_g,$iface,Atheros" >>$KISMET
        iwconfig $IFACE channel $CH
        echo -n " (monitor mode enabled)"
    fi
    echo
    continue
 fi
done


echo