⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bssidlist.c

📁 AirSnort 是一个无线局域网工具
💻 C
字号:
/*    This file is part of AirSnort.    AirSnort is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    AirSnort is distributed in the hope that it will be useful,      but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with AirSnort; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <string.h>#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include "bssidlist.h"#include "crc-32.h"#include "capture.h"#include "crack.h"BssidList *head = 0;BssidList *tail = 0;extern int listCount;int isResolved(const unsigned char *p) {   unsigned char sum;   if (p[1] == 255 && p[0] > 2 && p[0] < 16) return 1;   sum = p[0] + p[1];   if (sum == 1 && (p[2] <= 0x0A || p[2] == 0xFF)) return 1;   if (sum <= 0x0C && (p[2] >= 0xF2 && p[2] <= 0xFE && p[2] != 0xFD)) return 1;   return 0;//   return p[1] == 255 && p[0] > 2 && p[0] < 16;}char *ivtostr(const unsigned char *iv) {   static char ivstr[10];   sprintf(ivstr, "%2.2X:%2.2X:%2.2X", iv[0], iv[1], iv[2]);   return ivstr;}char *bssidtostr(const unsigned char *bssid) {   static char bssidstr[20];   sprintf(bssidstr, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",                     bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5]);   return bssidstr;}int bssidMatch(const unsigned char *bssid1, const unsigned char *bssid2) {   int i = 5;   for (; i >= 0; i--) {      if (bssid1[i] != bssid2[i]) return 0;   }   return 1;}BssidList *bssidFind(const unsigned char *bssid) {   BssidList *temp = head;   for (; temp; temp = temp->next) {      if (bssidMatch(temp->bssid, bssid)) {         break;      }   }   return temp;}BssidList *rowFind(int row) {   BssidList *temp = head;   for (; temp; temp = temp->next) {      if (row == temp->rownum) {         break;      }   }   return temp;}//ap should be a valid BssidList nodevoid addPacket(BssidList *apNode, CaptureRec *cap, int isData) {   PacketInfo *pi = cap->pInfo;   if (!apNode) {      apNode = bssidFind(cap->bssid);      if (!apNode) {            apNode = addBssid(cap);//fprintf(stdout, "added %s, fc = %02X\n", bssidtostr(cap->bssid), pi->raw[0]);      }   }   if (!apNode->usingWep && cap->pInfo->wep) {      addWep(apNode);   }   if (pi->channel > 0) {      apNode->channel = pi->channel;   }   if (apNode->usingWep && isData) {      memcpy(apNode->lastiv, cap->iv, 3);      apNode->numEncrypted++;      if (pi->pack) {         if (!apNode->ap->cracked) {            enqueuePacket(apNode->ap, pi->pack);            apNode->queueLen++;            if ((apNode->queueLen % 10) == 0) {               sem_post(&(apNode->crackSem));               apNode->queueLen = 0;            }         }      }   }   apNode->numPackets++;}void addWep(BssidList *apNode) {   apNode->usingWep = 1;   apNode->ap = newCrackNode(apNode);   sem_init(&(apNode->crackSem), 0, 0);   pthread_create(&apNode->crackerThread, NULL, cracker, apNode->ap);}//check for non-existence of bssid prior to calling this pleaseBssidList *addBssid(CaptureRec *cap) {   BssidList *temp = (BssidList*) calloc(1, sizeof(BssidList));   memcpy(temp->bssid, cap->bssid, 6);   temp->channel = cap->pInfo->channel;   temp->name = cap->pInfo->name;   temp->rownum = tail ? tail->rownum + 1 : 0;   if (tail) {      tail = tail->next = temp;   }   else {      head = tail = temp;   }   if (cap->pInfo->wep) {      temp->usingWep = 1;      temp->ap = newCrackNode(temp);      sem_init(&(temp->crackSem), 0, 0);      pthread_create(&temp->crackerThread, NULL, cracker, temp->ap);   }   return temp;}void clearList() {   BssidList *temp = head, *next;   void *result;   for (; temp; temp = next) {      next = temp->next;      if (temp->crackerThread) {         temp->ap->die = 1;         sem_post(&(temp->crackSem));         pthread_join(temp->crackerThread, &result);         destroyCrackNode(temp->ap);      }      free(temp->name);      free(temp);   }   listCount = 0;   head = tail = NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -