-rw-r--r-- | noncore/net/wellenreiter/daemon/source/daemon.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/noncore/net/wellenreiter/daemon/source/daemon.cc b/noncore/net/wellenreiter/daemon/source/daemon.cc index 5cf4e97..8471efc 100644 --- a/noncore/net/wellenreiter/daemon/source/daemon.cc +++ b/noncore/net/wellenreiter/daemon/source/daemon.cc | |||
@@ -1,193 +1,193 @@ | |||
1 | /* | 1 | /* |
2 | * Startup functions of wellenreiter | 2 | * Startup functions of wellenreiter |
3 | * | 3 | * |
4 | * $Id$ | 4 | * $Id$ |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #include "config.hh" | 7 | #include "config.hh" |
8 | #include "daemon.hh" | 8 | #include "daemon.hh" |
9 | 9 | ||
10 | /* should be parsed from cfg-file */ | 10 | /* should be parsed from cfg-file */ |
11 | #define MAXCHANNEL 13 | 11 | #define MAXCHANNEL 13 |
12 | #define CHANINTERVAL 100000 | 12 | #define CHANINTERVAL 700000 |
13 | 13 | ||
14 | /* Main function of wellenreiterd */ | 14 | /* Main function of wellenreiterd */ |
15 | int main(int argc, char **argv) | 15 | int main(int argc, char **argv) |
16 | { | 16 | { |
17 | int sock, maxfd, retval; | 17 | int sock, maxfd, retval; |
18 | char buffer[WL_SOCKBUF]; | 18 | char buffer[WL_SOCKBUF]; |
19 | struct pcap_pkthdr header; | 19 | struct pcap_pkthdr header; |
20 | struct sockaddr_in saddr; | 20 | struct sockaddr_in saddr; |
21 | pcap_t *handletopcap; | 21 | pcap_t *handletopcap; |
22 | wl_cardtype_t cardtype; | 22 | wl_cardtype_t cardtype; |
23 | pthread_t sub; | 23 | pthread_t sub; |
24 | const unsigned char *packet; | 24 | const unsigned char *packet; |
25 | 25 | ||
26 | fd_set rset; | 26 | fd_set rset; |
27 | 27 | ||
28 | fprintf(stderr, "wellenreiterd %s\n\n", VERSION); | 28 | fprintf(stderr, "wellenreiterd %s\n\n", VERSION); |
29 | fprintf(stderr, "(c) 2002 by M-M-M\n\n"); | 29 | fprintf(stderr, "(c) 2002 by M-M-M\n\n"); |
30 | 30 | ||
31 | if(argc < 3) | 31 | if(argc < 3) |
32 | usage(); | 32 | usage(); |
33 | 33 | ||
34 | /* Set sniffer device */ | 34 | /* Set sniffer device */ |
35 | memset(cardtype.iface, 0, sizeof(cardtype.iface)); | 35 | memset(cardtype.iface, 0, sizeof(cardtype.iface)); |
36 | strncpy(cardtype.iface, (char *)argv[1], sizeof(cardtype.iface) - 1); | 36 | strncpy(cardtype.iface, (char *)argv[1], sizeof(cardtype.iface) - 1); |
37 | 37 | ||
38 | /* Set card type */ | 38 | /* Set card type */ |
39 | cardtype.type = atoi(argv[2]); | 39 | cardtype.type = atoi(argv[2]); |
40 | if(cardtype.type < 1 || cardtype.type > 4) | 40 | if(cardtype.type < 1 || cardtype.type > 4) |
41 | usage(); | 41 | usage(); |
42 | 42 | ||
43 | /* set card into monitor mode */ | 43 | /* set card into monitor mode */ |
44 | if(!card_into_monitormode(&handletopcap, cardtype.iface, | 44 | if(!card_into_monitormode(&handletopcap, cardtype.iface, |
45 | cardtype.type)) | 45 | cardtype.type)) |
46 | { | 46 | { |
47 | wl_logerr("Cannot initialize the wireless-card, aborting"); | 47 | wl_logerr("Cannot initialize the wireless-card, aborting"); |
48 | exit(EXIT_FAILURE); | 48 | exit(EXIT_FAILURE); |
49 | } | 49 | } |
50 | wl_loginfo("Set card into monitor mode"); | 50 | wl_loginfo("Set card into monitor mode"); |
51 | 51 | ||
52 | /* setup pcap */ | 52 | /* setup pcap */ |
53 | if((handletopcap = pcap_open_live(cardtype.iface, | 53 | if((handletopcap = pcap_open_live(cardtype.iface, |
54 | BUFSIZ, 1, 0, NULL)) == NULL) | 54 | BUFSIZ, 1, 0, NULL)) == NULL) |
55 | { | 55 | { |
56 | wl_logerr("pcap_open_live() failed: %s", strerror(errno)); | 56 | wl_logerr("pcap_open_live() failed: %s", strerror(errno)); |
57 | exit(EXIT_FAILURE); | 57 | exit(EXIT_FAILURE); |
58 | } | 58 | } |
59 | 59 | ||
60 | #ifdef HAVE_PCAP_NONBLOCK | 60 | #ifdef HAVE_PCAP_NONBLOCK |
61 | pcap_setnonblock(handletopcap, 1, NULL); | 61 | pcap_setnonblock(handletopcap, 1, NULL); |
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | /* Setup socket for incoming commands */ | 64 | /* Setup socket for incoming commands */ |
65 | if((sock=wl_setupsock(DAEMONADDR, DAEMONPORT, saddr)) < 0) | 65 | if((sock=wl_setupsock(DAEMONADDR, DAEMONPORT, saddr)) < 0) |
66 | { | 66 | { |
67 | wl_logerr("Cannot setup socket"); | 67 | wl_logerr("Cannot setup socket"); |
68 | exit(EXIT_FAILURE); | 68 | exit(EXIT_FAILURE); |
69 | } | 69 | } |
70 | wl_loginfo("Set up socket '%d' for GUI communication", sock); | 70 | wl_loginfo("Set up socket '%d' for GUI communication", sock); |
71 | 71 | ||
72 | /* Create channelswitching thread */ | 72 | /* Create channelswitching thread */ |
73 | if(pthread_create(&sub, NULL, channel_switcher, | 73 | if(pthread_create(&sub, NULL, channel_switcher, |
74 | (void *)&cardtype) != 0) | 74 | (void *)&cardtype) != 0) |
75 | { | 75 | { |
76 | wl_logerr("Cannot create thread: %s", strerror(errno)); | 76 | wl_logerr("Cannot create thread: %s", strerror(errno)); |
77 | close(sock); | 77 | close(sock); |
78 | exit(EXIT_FAILURE); | 78 | exit(EXIT_FAILURE); |
79 | } | 79 | } |
80 | if(pthread_detach(sub)) | 80 | if(pthread_detach(sub)) |
81 | { | 81 | { |
82 | wl_logerr("Error detaching thread"); | 82 | wl_logerr("Error detaching thread"); |
83 | close(sock); | 83 | close(sock); |
84 | pthread_exit((pthread_t *)sub); | 84 | pthread_exit((pthread_t *)sub); |
85 | exit(EXIT_FAILURE); | 85 | exit(EXIT_FAILURE); |
86 | } | 86 | } |
87 | wl_loginfo("Created and detached channel switching thread"); | 87 | wl_loginfo("Created and detached channel switching thread"); |
88 | 88 | ||
89 | FD_ZERO(&rset); | 89 | FD_ZERO(&rset); |
90 | 90 | ||
91 | /* Start main loop */ | 91 | /* Start main loop */ |
92 | wl_loginfo("Starting main loop"); | 92 | wl_loginfo("Starting main loop"); |
93 | while(1) | 93 | while(1) |
94 | { | 94 | { |
95 | 95 | ||
96 | FD_SET(sock, &rset); | 96 | FD_SET(sock, &rset); |
97 | FD_SET(pcap_fileno(handletopcap), &rset); | 97 | FD_SET(pcap_fileno(handletopcap), &rset); |
98 | 98 | ||
99 | /* maxfd = biggest filefd */ | 99 | /* maxfd = biggest filefd */ |
100 | maxfd = (sock > pcap_fileno(handletopcap) ? | 100 | maxfd = (sock > pcap_fileno(handletopcap) ? |
101 | sock + 1 : pcap_fileno(handletopcap)) + 1; | 101 | sock + 1 : pcap_fileno(handletopcap)) + 1; |
102 | 102 | ||
103 | if(select(maxfd, &rset, NULL, NULL, NULL) < 0) | 103 | if(select(maxfd, &rset, NULL, NULL, NULL) < 0) |
104 | { | 104 | { |
105 | wl_logerr("Error calling select: %s", strerror(errno)); | 105 | wl_logerr("Error calling select: %s", strerror(errno)); |
106 | break; | 106 | break; |
107 | } | 107 | } |
108 | 108 | ||
109 | /* Got data on local socket from GUI */ | 109 | /* Got data on local socket from GUI */ |
110 | if(FD_ISSET(sock, &rset)) | 110 | if(FD_ISSET(sock, &rset)) |
111 | { | 111 | { |
112 | /* Receive data from socket */ | 112 | /* Receive data from socket */ |
113 | if((retval=wl_recv(&sock, saddr, buffer, sizeof(buffer))) < 0) | 113 | if((retval=wl_recv(&sock, saddr, buffer, sizeof(buffer))) < 0) |
114 | { | 114 | { |
115 | wl_logerr("Error trying to read: %s", strerror(errno)); | 115 | wl_logerr("Error trying to read: %s", strerror(errno)); |
116 | break; | 116 | break; |
117 | } | 117 | } |
118 | else | 118 | else |
119 | { | 119 | { |
120 | /* check type of packet and start function according to it */ | 120 | /* check type of packet and start function according to it */ |
121 | switch(retval) | 121 | switch(retval) |
122 | { | 122 | { |
123 | case 98: | 123 | case 98: |
124 | wl_loginfo("Received STARTSNIFF command"); | 124 | wl_loginfo("Received STARTSNIFF command"); |
125 | break; | 125 | break; |
126 | case 99: | 126 | case 99: |
127 | wl_loginfo("Received STOPSNIFF command"); | 127 | wl_loginfo("Received STOPSNIFF command"); |
128 | break; | 128 | break; |
129 | default: | 129 | default: |
130 | wl_logerr("Received unknown command: %d", retval); | 130 | wl_logerr("Received unknown command: %d", retval); |
131 | break; | 131 | break; |
132 | } | 132 | } |
133 | } | 133 | } |
134 | } /* FD_ISSET */ | 134 | } /* FD_ISSET */ |
135 | 135 | ||
136 | /* Check pcap lib for packets */ | 136 | /* Check pcap lib for packets */ |
137 | if(FD_ISSET(pcap_fileno(handletopcap), &rset)) | 137 | if(FD_ISSET(pcap_fileno(handletopcap), &rset)) |
138 | { | 138 | { |
139 | 139 | ||
140 | /* Grab one single packet */ | 140 | /* Grab one single packet */ |
141 | packet = pcap_next(handletopcap, &header); | 141 | packet = pcap_next(handletopcap, &header); |
142 | 142 | ||
143 | /* process the packet */ | 143 | /* process the packet */ |
144 | process_packets(&header,*&packet, GUIADDR, GUIPORT); | 144 | process_packets(&header,*&packet, GUIADDR, GUIPORT); |
145 | } | 145 | } |
146 | 146 | ||
147 | } /* while(1) */ | 147 | } /* while(1) */ |
148 | 148 | ||
149 | close(sock); | 149 | close(sock); |
150 | exit(EXIT_SUCCESS); | 150 | exit(EXIT_SUCCESS); |
151 | } | 151 | } |
152 | 152 | ||
153 | void | 153 | void |
154 | usage(void) | 154 | usage(void) |
155 | { | 155 | { |
156 | fprintf(stderr, "Usage: wellenreiter <device> <cardtype>\n" \ | 156 | fprintf(stderr, "Usage: wellenreiter <device> <cardtype>\n" \ |
157 | "\t<device> = Wirelessdevice (e.g. wlan0)\n" \ | 157 | "\t<device> = Wirelessdevice (e.g. wlan0)\n" \ |
158 | "\t<cardtype> = Cardtype:\tCisco\t= 1\n" \ | 158 | "\t<cardtype> = Cardtype:\tCisco\t= 1\n" \ |
159 | "\t\t\t\tNG\t= 2\n" \ | 159 | "\t\t\t\tNG\t= 2\n" \ |
160 | "\t\t\t\tHOSTAP\t= 3\n" \ | 160 | "\t\t\t\tHOSTAP\t= 3\n" \ |
161 | "\t\t\t\tLUCENT\t= 4\n"); | 161 | "\t\t\t\tLUCENT\t= 4\n"); |
162 | exit(EXIT_FAILURE); | 162 | exit(EXIT_FAILURE); |
163 | } | 163 | } |
164 | 164 | ||
165 | void * | 165 | void * |
166 | channel_switcher(void *cardtypeptr) | 166 | channel_switcher(void *cardtypeptr) |
167 | { | 167 | { |
168 | wl_cardtype_t *cardtype; | 168 | wl_cardtype_t *cardtype; |
169 | int channel=1; | 169 | int channel=1; |
170 | 170 | ||
171 | /* Get card info struct */ | 171 | /* Get card info struct */ |
172 | cardtype = (wl_cardtype_t *)cardtypeptr; | 172 | cardtype = (wl_cardtype_t *)cardtypeptr; |
173 | 173 | ||
174 | while(1) | 174 | while(1) |
175 | { | 175 | { |
176 | 176 | ||
177 | /* If channel bigger than maxchannel, set to 1 */ | 177 | /* If channel bigger than maxchannel, set to 1 */ |
178 | if(channel > MAXCHANNEL) | 178 | if(channel > MAXCHANNEL) |
179 | channel=1; | 179 | channel=1; |
180 | 180 | ||
181 | /* Set channel */ | 181 | /* Set channel */ |
182 | if(!card_set_channel(cardtype->iface, channel, cardtype->type)) | 182 | if(!card_set_channel(cardtype->iface, channel, cardtype->type)) |
183 | { | 183 | { |
184 | wl_logerr("Cannot set channel, thread exiting"); | 184 | wl_logerr("Cannot set channel, thread exiting"); |
185 | pthread_exit(NULL); | 185 | pthread_exit(NULL); |
186 | } | 186 | } |
187 | 187 | ||
188 | /* sleep */ | 188 | /* sleep */ |
189 | usleep(CHANINTERVAL); | 189 | usleep(CHANINTERVAL); |
190 | 190 | ||
191 | channel++; | 191 | channel++; |
192 | } /* while */ | 192 | } /* while */ |
193 | } | 193 | } |