summaryrefslogtreecommitdiff
path: root/noncore/net/wellenreiter/daemon/source/cardmode.cc
Side-by-side diff
Diffstat (limited to 'noncore/net/wellenreiter/daemon/source/cardmode.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/daemon/source/cardmode.cc89
1 files changed, 89 insertions, 0 deletions
diff --git a/noncore/net/wellenreiter/daemon/source/cardmode.cc b/noncore/net/wellenreiter/daemon/source/cardmode.cc
new file mode 100644
index 0000000..ae32af4
--- a/dev/null
+++ b/noncore/net/wellenreiter/daemon/source/cardmode.cc
@@ -0,0 +1,89 @@
+/* $Id$ */
+
+#include "cardmode.hh"
+
+int card_into_monitormode (char *device, int cardtype)
+{
+
+ int datalink; /* used for getting the pcap datalink type */
+ char CiscoRFMON[35] = "/proc/driver/aironet/";
+ FILE *CISCO_CONFIG_FILE;
+ char errbuf[PCAP_ERRBUF_SIZE];
+ pcap_t *handle;
+
+ /* Checks if we have a device to sniff on */
+ if(device == NULL)
+ {
+ printf ("Fatal error i did not have any interfaces to sniff on\n");
+ return 0;
+ }
+
+ /* Setting the prmiscous and up flag to the interface */
+ if (card_set_promisc_up (device) == 0)
+ {
+ printf ("Interface flags correctly set using ifconfig\n");
+ }
+
+ /* Check the cardtype and executes the commands to go into monitor mode */
+ if (cardtype == CARD_TYPE_CISCO) /* I got a cisco card */
+ {
+ /* bring the sniffer into rfmon mode */
+ snprintf(CiscoRFMON, sizeof(CiscoRFMON),DEFAULT_PATH, device);
+ CISCO_CONFIG_FILE = fopen(CiscoRFMON,"w");
+ fputs ("Mode: r",CISCO_CONFIG_FILE);
+ fputs ("Mode: y",CISCO_CONFIG_FILE);
+ fputs ("XmitPower: 1",CISCO_CONFIG_FILE);
+ fclose(CISCO_CONFIG_FILE);
+ }
+ else if (cardtype == CARD_TYPE_NG)
+ {
+ char wlanngcmd[62];
+ snprintf(wlanngcmd, sizeof(wlanngcmd),"%s %s lnxreq_wlansniff channel=1 enable=true",WLANCTL_PATH,device);
+ if (system (wlanngcmd) != 0)
+ {
+ printf ("\n Fatal error could not set %s in raw mode, check cardtype\n",device);
+ return 0;
+ }
+ }
+ else if (cardtype == CARD_TYPE_HOSTAP)
+ {
+ printf ("Got a host-ap card, nothing is implemented now\n");
+ }
+
+
+ /* Check the interface if it is in the correct raw mode */
+ handle = pcap_open_live(device, BUFSIZ, 1, 0, errbuf);
+
+ /* getting the datalink type */
+ datalink = pcap_datalink(handle);
+
+ if (datalink == DLT_IEEE802_11) /* Rawmode is IEEE802_11 */
+ {
+ printf ("Your successfully listen on %s in 802.11 raw mode\n",device);
+ pcap_close(handle);
+ return 0;
+
+ }
+ else
+ {
+ printf ("Fatal error, cannot continue, your interface %s does not work in the correct 802.11 raw mode, check you driver please\n",device);
+ pcap_close(handle);
+ return 0;
+ }
+}
+
+
+
+int card_set_promisc_up (char * device)
+{
+ int ret;
+ char ifconfigcmd[32];
+ snprintf(ifconfigcmd,sizeof(ifconfigcmd),SBIN_PATH, device);
+ ret = system (ifconfigcmd);
+ if (ret > 0)
+ {
+ printf ("\nFatal error, could not execute %s please check your card,binary location and permission\n",ifconfigcmd);
+ return 0;
+ }
+ return 1;
+}