small fixes in documentation + initial checkin of wep - crack tool
[my-code/hdw-sniff.git] / wep.c
1 /*
2  *
3  * wep.c - wordlist/bruteforce wep key attack
4  *
5  */
6
7 #include "wep.h"
8
9 #include <stdio.h>
10 #include <sys/stat.h>
11 #include <sys/types.h>
12 #include <fcntl.h>
13
14 #include <openssl/rc4.h>
15
16 #include "network.h"
17 #include "list.h"
18 #include "event.h"
19
20 int usage(void) {
21   puts("usage:");
22   put("");
23   puts("-p <port>");
24   puts("-s <save file>");
25   puts("-f /path/to/flite");
26   puts("-w /path/to/wordlist");
27   return 1;
28 }
29
30 int main(int argc,char **argv) {
31
32   /* data */
33   t_wep wep;
34   int i;
35   time_t time;
36   char buf[MAX_BUF];
37   unsigned char text[MAX_TEXT];
38
39   /* default values */
40   memset(&wep,0,sizeof(t_wep));
41   wep.port=PORT;
42   strncpy(wep.flite,"/usr/bin/flite",MAX_C_FLITE);
43   strncpy(wep.savefile,"",MAX_C_SF);
44   strncpy(wep.wordlist,"",MAX_C_WL);
45
46   time(&time);
47
48   /* parse argv */
49   for(i=0;i<argc;i++) {
50     if(argv[i][0]=='-') {
51       switch(argv[i][1]) {
52         case 'p':
53           wep.port=atoi(argv[++i]);
54           break;
55         case 's':
56           strncpy(wep.savefile,argv[++i],MAX_C_SF);
57           wep.sf=1;
58           break;
59         case 'f':
60           strncpy(wep.flite,argv[++i],MAX_C_FLITE);
61           wep.f=1;
62           break;
63         case 'w':
64           strncpy(wep.wordlist,argv[++i],MAX_XWL);
65           break;
66         default:
67           usage();
68           return -1;
69       }
70     } else {
71       usage();
72       return -1;
73     }
74   }
75
76   if(!strcmp(wep.wordlist,"")) {
77     puts("you need to specify a wordlist!");
78     return -1;
79   }
80
81   text=ctime(&time);
82   printf("\n--- wep, started at: %s ---\n",text);
83
84   if(wep.sf) {
85     wep.sf_fd=open(wep.savefile,O_WRONLY|O_CREAT|O_APPEND|S_IRUSR|S_IWUSR);
86     if(wep.sf==-1) {
87       printf("[wep] failed to open %s as a save file\n",wep.savefile);
88       return -1;
89     }
90     dprintf(wep.sf_fd,"\n--- wep, started at: %s ---\n",text);
91   }
92
93   if(wep.f) {
94     snprintf(text,MAX_TEXT,"%s 'wep cracker started. good luck.'");
95     system(text);
96   }
97
98   /* network init */
99   network_init(&(wep.net),2);
100   network_set_listen_port(&net,wep.port);
101   if(network_listen(&net)!=N_SUCCESS) {
102     printf("unable to listen on port %d\n",wep.port);
103     return -1;
104   }
105
106   /* list init */
107   list_init(&(wep.bssid),2);
108
109   /* event init */
110   event_init(&(wep.event),2);
111   event_math(wep.net.l_fd,&(wep),READ,ADD);
112   event_start(&(wep.event),&wep,parse_incoming,brute_key);
113
114   event_shutdown(&(wep.event));
115   network_shutdown(&(wep.net));
116   list_shutdown(&(wep.bssid));
117
118   return 1;
119
120 }
121