1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
#!/bin/sh
if [ -n "$1" ] && [ -z "$2" ]; then
echo "Invalid command. Valid commands: [start|stop] INTERFACE."
exit 1
fi
if [ -n "$1" ]; then
if [ "$1" != 'stop' ] && [ "$1" != 'start' ]; then
echo "Invalid command. Valid commands: [start|stop] INTERFACE."
exit 1
fi
fi
if [ -n "$2" ]; then
ifconfig $2 >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
echo "Error: Interface $2 does not exist."
exit 1
fi
fi
COMMAND=$1
INTERFACE_TO_USE=$2
CHIPSET=""
DRIVER=""
PARENT=""
get_interface_info() {
[ -z "$1" ] && return
if [ -n "$(echo $1 | grep -E '^(ath|otus|urtwn)[0-9]+$' )" ]; then
DRIVER="$(echo $1 | sed 's/[0-9]*//g')"
elif [ -n "$(echo $1 | grep -E ^wlan[0-9]+$)" ]; then
# It most likely is a monitor interface.
IFACE_IDX=$(echo $1 | sed 's/[^0-9]*//g')
PARENT=$(sysctl net.wlan.${IFACE_IDX}.%parent | awk '{print $2}')
if [ -n "${PARENT}" ]; then
get_interface_info ${PARENT}
return
fi
fi
if [ "${DRIVER}" = "ath" ]; then
CHIPSET=$(dmesg | grep -E "^$1: <" | tail -n 1 | awk -F\< '{print $2}' | awk -F\> '{print $1}' )
elif [ "${DRIVER}" = "urtwn" ]; then
USB_INFO=$(dmesg | grep -E "^$1: <" | tail -n 1 | tr ',' '\n' | tail -n 1 | tr '>' ' ')
USB_ADDR=$(echo ${USB_INFO} | awk '{print $2}')
USB_BUS=$(echo ${USB_INFO} | awk '{print $4}' | sed 's/[^0-9]*//g')
VENDOR_ID=$(usbconfig -u ${USB_BUS} -a ${USB_ADDR} dump_device_desc | grep idVendor | awk '{print $3}')
PRODUCT_ID=$(usbconfig -u ${USB_BUS} -a ${USB_ADDR} dump_device_desc | grep idProduct | awk '{print $3}')
if [ "${VENDOR_ID}" = "0x0bda" ]; then
[ "${PRODUCT_ID}" = "0x8171" ] && CHIPSET="RTL8188SU"
[ "${PRODUCT_ID}" = "0x8172" ] && CHIPSET="RTL8191SU"
[ "${PRODUCT_ID}" = "0x8174" ] && CHIPSET="RTL8192SU"
[ "${PRODUCT_ID}" = "0x8176" ] && CHIPSET="RTL8188CUS"
[ "${PRODUCT_ID}" = "0x8178" ] && CHIPSET="RTL8192CU"
[ "${PRODUCT_ID}" = "0x8179" ] && CHIPSET="RTL8188EUS"
[ "${PRODUCT_ID}" = "0x817f" ] && CHIPSET="RTL8188RU"
[ "${PRODUCT_ID}" = "0x8192" ] && CHIPSET="RTL8191SU"
[ "${PRODUCT_ID}" = "0x8193" ] && CHIPSET="RTL8192DU"
[ "${PRODUCT_ID}" = "0x8199" ] && CHIPSET="RTL8187SU"
[ "${PRODUCT_ID}" = "0x8812" ] && CHIPSET="RTL8812AU"
[ "${PRODUCT_ID}" = "0x8187" ] && CHIPSET="RTL8187L"
elif [ "${VENDOR_ID}" = "0x06f8" ] && [ "${PRODUCT_ID}" = "0xe033" ]; then
CHIPSET="RTL8188CUS"
elif [ "${VENDOR_ID}" = "0x2001" ] && [ "${PRODUCT_ID}" = "0x3308" ]; then
CHIPSET="RTL8188CUS"
elif [ "${VENDOR_ID}" = "0x20f4" ] && [ "${PRODUCT_ID}" = "0x648b" ]; then
CHIPSET="RTL8188CUS"
elif [ "${VENDOR_ID}" = "0x7392" ] && [ "${PRODUCT_ID}" = "0x7811" ]; then
CHIPSET="RTL8188CUS"
elif [ "${VENDOR_ID}" = "0x2019" ]; then
[ "${PRODUCT_ID}" = "0xab2a" ] && CHIPSET="RTL8188CUS"
[ "${PRODUCT_ID}" = "0xed17" ] && CHIPSET="RTL8188CUS"
elif [ "${VENDOR_ID}" = "0x050d" ]; then
[ "${PRODUCT_ID}" = "0x1102" ] && CHIPSET="RTL8188CUS"
[ "${PRODUCT_ID}" = "0x11f2" ] && CHIPSET="RTL8188CUS"
elif [ "${VENDOR_ID}" = "0x0846" ]; then
[ "${PRODUCT_ID}" = "0x9041" ] && CHIPSET="RTL8188CUS"
[ "${PRODUCT_ID}" = "0x9042" ] && CHIPSET="RTL8188CUS"
[ "${PRODUCT_ID}" = "0x9043" ] && CHIPSET="RTL8188CUS"
fi
[ -z "${CHIPSET}" ] && CHIPSET="Report dmesg and usbconfig (dump commands) to http://trac.aircrack-ng.org"
elif [ "${DRIVER}" = "run" ]; then
CHIPSET="Ralink/Mediatek"
elif [ -n "${DRIVER}" ]; then
CHIPSET="Report dmesg and usbconfig (dump commands) to http://trac.aircrack-ng.org"
else
CHIPSET="Unknown"
[ -z "${DRIVER}" ] && DRIVER="Unknown"
fi
}
printf "\nInterface\tDriver\t\tChipset\n\n"
for IFACE in $(ifconfig -a | grep -E '^(wlan|ath|otus|urtwn)[0-9]+' | awk -F: '{print $1}' )
do
get_interface_info ${IFACE}
printf "${IFACE}\t\t${DRIVER}\t\t${CHIPSET}\n\n"
if [ -n "${PARENT}" ]; then
printf "\t(monitor mode interface. Parent: ${PARENT})\n"
fi
if [ "${INTERFACE_TO_USE}" = "${IFACE}" ]; then
if [ "${COMMAND}" = 'start' ]; then
if [ -n "${PARENT}" ]; then
printf "\t Interface is already in monitor mode, ignoring\n"
else
MONITOR_IFACE=$(ifconfig wlan create wlandev ${IFACE} wlanmode monitor)
if [ $? -eq 0 ]; then
printf "\tCreated monitor mode interface ${MONITOR_IFACE} from ${IFACE}\n"
else
printf "\tFailed creating monitor interface\n"
fi
fi
elif [ "${COMMAND}" = 'stop' ]; then
ifconfig ${IFACE} destroy 2>/dev/null
if [ $? -ne 0 ]; then
printf "\tFailed to remove monitor mode interface ${IFACE}\n"
else
printf "\tDestroyed monitor interface ${IFACE}\n"
fi
fi
fi
done
exit 0
|