00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <include.h>
00029 #include <src/interface.h>
00030 #include <src/crt_io.h>
00031 #include <src/driver.h>
00032 #include <src/wlan-ng.h>
00033 #include <src/cisco.h>
00034 #include <src/atheros.h>
00035 #include <src/prism54g.h>
00036 #include <src/hostap.h>
00037 #include <src/hermes.h>
00038
00039 #define NOT_YET_ANALIZED() perror("Type of packet is not yet analysed"); exit(EXIT_FAILURE)
00040
00041
00042 extern unsigned int DebugLevel;
00043 extern WINDOW *Sum_WND, *RealTime_WND;
00044 extern ScanResult_t Res;
00045 extern ConfigStruct config;
00046
00047
00048 #ifdef WITH_THREAD
00049 extern pthread_mutex_t screen_mutex;
00050 #endif
00051
00052 p80211_caphdr_t wlan_header;
00053
00054
00055
00056
00057
00058 int NextChannel(char *devname, unsigned int NumberOfHop)
00059 {
00060 const UINT8 ListChannel[13][14] = {
00061 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
00062 {1, 3, 5, 7, 9, 11, 13, 14, 2, 4, 6, 8, 10, 12},
00063 {1, 4, 7, 10, 13, 2, 5, 8, 11, 14, 3, 6, 9, 12},
00064 {1, 5, 9, 13, 3, 7, 11, 2, 6, 10, 14, 4, 8, 12},
00065 {1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14, 5, 10},
00066 {1, 7, 13, 5, 11, 3, 9, 2, 8, 14, 6, 12, 4, 10},
00067 {1, 8, 2, 9, 3, 10, 4, 11, 5, 12, 6, 13, 7, 14},
00068 {1, 7, 13, 5, 11, 3, 9, 2, 8, 14, 6, 12, 4, 10},
00069 {1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14, 5, 10},
00070 {1, 5, 9, 13, 3, 7, 11, 2, 6, 10, 14, 4, 8, 12},
00071 {1, 4, 7, 10, 13, 2, 5, 8, 11, 14, 3, 6, 9, 12},
00072 {1, 3, 5, 7, 9, 11, 13, 14, 2, 4, 6, 8, 10, 12},
00073 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
00074
00075 };
00076 static UINT8 ChannelIndex = 0;
00077 int channel;
00078
00079 if (NumberOfHop <= 7)
00080 channel = ListChannel[NumberOfHop - 1][ChannelIndex];
00081 else
00082 channel = ListChannel[NumberOfHop - 1][13 - ChannelIndex];
00083
00084 ChannelIndex++;
00085 ChannelIndex = ChannelIndex % 14;
00086
00087
00088 return selectChannel(devname, channel);
00089 }
00090
00091
00092
00093
00094 #ifdef HAVE_LIBNCURSES
00095 const UINT8 Posit[15] = { 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14 };
00096 const char *Indic[15] =
00097 { "", "^-.", "-^-.", ".-^-.", ".-^-.", ".-^-.", ".-^-.", ".-^-.",
00098 ".-^-.",
00099 ".-^-.", ".-^-.", ".-^-.", ".-^-.", ".-^-.", ".-^"
00100 };
00101
00102 void PrintScaleChannel(int channel)
00103 {
00104 #ifdef WITH_THREAD
00105 pthread_mutex_lock(&screen_mutex);
00106 #endif
00107 mvwprintw(Sum_WND, 12, 7, "%02d", channel);
00108 mvwprintw(Sum_WND, 13, 2, "|_____________ _|");
00109 mvwprintw(Sum_WND, 13, 2 + Posit[channel], (char *) Indic[channel]);
00110
00111
00112
00113 wrefresh(Sum_WND);
00114 #ifdef WITH_THREAD
00115 pthread_mutex_unlock(&screen_mutex);
00116 #endif
00117 }
00118 #else
00119 #define PrintScaleChannel(x)
00120 #endif
00121
00122 int selectChannel(char *devname, int channel)
00123
00124 {
00125 int ret = 1;
00126
00127 PrintScaleChannel(channel);
00128 Res.SChannel = channel;
00129
00130 switch (config.TypeOfCard) {
00131 case WLAN_NG_CARD:
00132 case WLAN_NG_CARD_AVS_CFF2:
00133 ret = selectChannelWLAN(devname, channel);
00134 break;
00135 case CISCO_CARD:
00136 case CISCO_CVS_CARD:
00137
00138
00139 ret = 0;
00140 break;
00141 case LUCENT_CARD:
00142 ret = selectChannelHERMES(devname, channel);
00143 break;
00144 case HOSTAP_CARD:
00145 ret = selectChannelHOSTAP(devname, channel);
00146 break;
00147 case ATHEROS_CARD:
00148 ret = selectChannelATHEROS(devname, channel);
00149 break;
00150 case PRISM54G_CARD:
00151 ret = selectChannelPRISM54g(devname, channel);
00152 break;
00153 case PCAP_VIRTUAL_CARD:
00154
00155
00156 ret = 0;
00157 break;
00158 default:
00159 perror("Arrrrggg, type of packet is unknowned !!!");
00160 exit(EXIT_FAILURE);
00161 break;
00162 }
00163 DEBUG_POINT;
00164 return ret;
00165 }
00166
00167 int shutCard(char *devname)
00168 {
00169 int ret = FALSE;
00170
00171 switch (config.TypeOfCard) {
00172 case WLAN_NG_CARD:
00173 case WLAN_NG_CARD_AVS_CFF2:
00174 ret = shutCardWLAN(devname);
00175 break;
00176 case CISCO_CARD:
00177 case CISCO_CVS_CARD:
00178 ret = shutCardCISCO(devname);
00179 break;
00180 case LUCENT_CARD:
00181 ret = shutCardHERMES(devname);
00182 break;
00183 case HOSTAP_CARD:
00184 ret = shutCardHOSTAP(devname);
00185 break;
00186 case ATHEROS_CARD:
00187 ret = shutCardATHEROS(devname);
00188 break;
00189 case PRISM54G_CARD:
00190 ret = shutCardPRISM54g(devname);
00191 break;
00192 case PCAP_VIRTUAL_CARD:
00193 NOT_YET_ANALIZED();
00194 break;
00195 default:
00196 perror("Arrrrggg, type of packet is unknowned !!!");
00197 exit(EXIT_FAILURE);
00198 break;
00199 }
00200 return ret;
00201 }
00202
00203 int openCard(char *devname)
00204 {
00205 int ret = FALSE;
00206
00207 switch (config.TypeOfCard) {
00208 case WLAN_NG_CARD:
00209 case WLAN_NG_CARD_AVS_CFF2:
00210 ret = openCardWLAN(devname);
00211 break;
00212 case CISCO_CARD:
00213 case CISCO_CVS_CARD:
00214 ret = openCardCISCO(devname);
00215 break;
00216 case LUCENT_CARD:
00217 ret = openCardHERMES(devname);
00218 break;
00219 case HOSTAP_CARD:
00220 ret = openCardHOSTAP(devname);
00221 break;
00222 case ATHEROS_CARD:
00223 ret = openCardATHEROS(devname);
00224 break;
00225 case PRISM54G_CARD:
00226 ret = openCardPRISM54g(devname);
00227 break;
00228 case PCAP_VIRTUAL_CARD:
00229 NOT_YET_ANALIZED();
00230 break;
00231 default:
00232 perror("Arrrrggg, type of packet is unknowned !!!");
00233 exit(EXIT_FAILURE);
00234 break;
00235 }
00236 return ret;
00237 }
00238
00239
00240
00241
00242
00243 int openPacket(char *devname)
00244 {
00245 int ret = 0;
00246
00247 switch (config.TypeOfCard) {
00248 case WLAN_NG_CARD:
00249 ret = openPacketWLAN(devname);
00250 break;
00251 case WLAN_NG_CARD_AVS_CFF2:
00252 NOT_YET_ANALIZED();
00253 break;
00254 case CISCO_CARD:
00255 case CISCO_CVS_CARD:
00256 ret = openPacketCISCO(devname);
00257 break;
00258 case LUCENT_CARD:
00259 ret = openPacketHERMES(devname);
00260 break;
00261 case HOSTAP_CARD:
00262 ret = openPacketHOSTAP(devname);
00263 break;
00264 case ATHEROS_CARD:
00265 ret = openPacketATHEROS(devname);
00266 break;
00267 case PRISM54G_CARD:
00268 ret = openPacketPRISM54g(devname);
00269 break;
00270 case PCAP_VIRTUAL_CARD:
00271 NOT_YET_ANALIZED();
00272 break;
00273 default:
00274 perror("Arrrrggg, type of packet is unknowned !!!");
00275 exit(EXIT_FAILURE);
00276 break;
00277 }
00278 return ret;
00279 }
00280
00281
00282
00283
00284 void closePacket(void)
00285 {
00286 switch (config.TypeOfCard) {
00287 case WLAN_NG_CARD:
00288 closePacketWLAN();
00289 break;
00290 case WLAN_NG_CARD_AVS_CFF2:
00291 NOT_YET_ANALIZED();
00292 break;
00293 case CISCO_CARD:
00294 case CISCO_CVS_CARD:
00295 closePacketCISCO();
00296 break;
00297 case LUCENT_CARD:
00298 closePacketHERMES();
00299 break;
00300 case HOSTAP_CARD:
00301 closePacketHOSTAP();
00302 break;
00303 case ATHEROS_CARD:
00304 closePacketATHEROS();
00305 break;
00306 case PRISM54G_CARD:
00307 closePacketPRISM54g();
00308 break;
00309 case PCAP_VIRTUAL_CARD:
00310 NOT_YET_ANALIZED();
00311 break;
00312 default:
00313 perror("Arrrrggg, type of packet is unknowned !!!");
00314 exit(EXIT_FAILURE);
00315 break;
00316 }
00317 }
00318
00319
00320 int getPacket(unsigned char *buf, int maxlen, unsigned int timeout)
00322 {
00323 int ret = 0;
00324
00325 switch (config.TypeOfCard) {
00326 case WLAN_NG_CARD:
00327 ret = getPacketWLAN(buf, maxlen);
00328 break;
00329 case WLAN_NG_CARD_AVS_CFF2:
00330 NOT_YET_ANALIZED();
00331 break;
00332 case CISCO_CARD:
00333 case CISCO_CVS_CARD:
00334 ret = getPacketCISCO(buf, maxlen);
00335 break;
00336 case LUCENT_CARD:
00337 ret = getPacketHERMES(buf, maxlen);
00338 break;
00339 case HOSTAP_CARD:
00340 ret = getPacketHOSTAP(buf, maxlen);
00341 break;
00342 case ATHEROS_CARD:
00343 ret = getPacketATHEROS(buf, maxlen);
00344 break;
00345 case PRISM54G_CARD:
00346 ret = getPacketPRISM54g(buf, maxlen);
00347 break;
00348 case PCAP_VIRTUAL_CARD:
00349 NOT_YET_ANALIZED();
00350 break;
00351 default:
00352 perror("Arrrrggg, type of packet is unknowned !!!");
00353 exit(EXIT_FAILURE);
00354 break;
00355 }
00356 return ret;
00357 }