mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-11 17:19:58 +01:00
Improved the way stations save their AP
There was the problem that when the AP list get's sorted (when starting an attack for example), the pointers to the stations would become messed up.
This commit is contained in:
@@ -141,13 +141,7 @@ uint8_t* Accesspoints::getMac(int num) {
|
|||||||
String Accesspoints::getMacStr(int num) {
|
String Accesspoints::getMacStr(int num) {
|
||||||
if (!check(num)) return String();
|
if (!check(num)) return String();
|
||||||
uint8_t* mac = getMac(num);
|
uint8_t* mac = getMac(num);
|
||||||
String value;
|
return bytesToStr(mac, 6);
|
||||||
for (int i = 0; i < 6; i++) {
|
|
||||||
if (mac[i] < 0x10) value += ZERO;
|
|
||||||
value += String(mac[i], HEX);
|
|
||||||
if (i < 5) value += DOUBLEPOINT;
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String Accesspoints::getVendorStr(int num) {
|
String Accesspoints::getVendorStr(int num) {
|
||||||
@@ -165,7 +159,7 @@ bool Accesspoints::getSelected(int num) {
|
|||||||
return list->get(num).selected;
|
return list->get(num).selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Accesspoints::getID(int num){
|
uint8_t Accesspoints::getID(int num){
|
||||||
if (!check(num)) return -1;
|
if (!check(num)) return -1;
|
||||||
return list->get(num).id;
|
return list->get(num).id;
|
||||||
}
|
}
|
||||||
@@ -224,6 +218,15 @@ void Accesspoints::removeAll() {
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Accesspoints::find(uint8_t id){
|
||||||
|
int s = list->size();
|
||||||
|
for(int i=0;i<s;i++){
|
||||||
|
if(list->get(i).id == id)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int Accesspoints::count() {
|
int Accesspoints::count() {
|
||||||
return list->size();
|
return list->size();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ extern Names names;
|
|||||||
|
|
||||||
extern String searchVendor(uint8_t* mac);
|
extern String searchVendor(uint8_t* mac);
|
||||||
extern String buildString(String left, String right, int maxLen);
|
extern String buildString(String left, String right, int maxLen);
|
||||||
String fixUtf8(String str);
|
extern String fixUtf8(String str);
|
||||||
|
extern String bytesToStr(uint8_t* b, uint32_t size);
|
||||||
|
|
||||||
struct AP{
|
struct AP{
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
@@ -49,12 +50,14 @@ class Accesspoints {
|
|||||||
String getSelectedStr(int num);
|
String getSelectedStr(int num);
|
||||||
uint8_t getCh(int num);
|
uint8_t getCh(int num);
|
||||||
uint8_t getEnc(int num);
|
uint8_t getEnc(int num);
|
||||||
int getID(int num);
|
uint8_t getID(int num);
|
||||||
int getRSSI(int num);
|
int getRSSI(int num);
|
||||||
uint8_t* getMac(int num);
|
uint8_t* getMac(int num);
|
||||||
bool getHidden(int num);
|
bool getHidden(int num);
|
||||||
bool getSelected(int num);
|
bool getSelected(int num);
|
||||||
|
|
||||||
|
int find(uint8_t id);
|
||||||
|
|
||||||
int count();
|
int count();
|
||||||
int selected();
|
int selected();
|
||||||
|
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ void Attack:: beaconUpdate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Attack::deauthStation(int num) {
|
bool Attack::deauthStation(int num) {
|
||||||
return deauthDevice(accesspoints.getMac(stations.getAP(num)), stations.getMac(num), settings.getDeauthReason(), accesspoints.getCh(stations.getAP(num)));
|
return deauthDevice(stations.getAPMac(num), stations.getMac(num), settings.getDeauthReason(), stations.getCh(num));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Attack::deauthAP(int num) {
|
bool Attack::deauthAP(int num) {
|
||||||
|
|||||||
@@ -340,16 +340,9 @@ uint8_t* Names::getBssid(int num) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String Names::getMacStr(int num) {
|
String Names::getMacStr(int num) {
|
||||||
String value;
|
if (!check(num)) return String();
|
||||||
if (check(num)) {
|
uint8_t* mac = getMac(num);
|
||||||
uint8_t* mac = getMac(num);
|
return bytesToStr(mac, 6);
|
||||||
for (int i = 0; i < 6; i++) {
|
|
||||||
if (mac[i] < 0x10) value += ZERO;
|
|
||||||
value += String(mac[i], HEX);
|
|
||||||
if (i < 5) value += DOUBLEPOINT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String Names::getVendorStr(int num) {
|
String Names::getVendorStr(int num) {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ extern String searchVendor(uint8_t* mac);
|
|||||||
extern String fixUtf8(String str);
|
extern String fixUtf8(String str);
|
||||||
extern String buildString(String left, String right, int maxLen);
|
extern String buildString(String left, String right, int maxLen);
|
||||||
extern String escape(String str);
|
extern String escape(String str);
|
||||||
|
extern String bytesToStr(uint8_t* b, uint32_t size);
|
||||||
|
|
||||||
class Names {
|
class Names {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ void Scan::sniffer(uint8_t* buf, uint16_t len) {
|
|||||||
|
|
||||||
if (macBroadcast(macTo) || macBroadcast(macFrom) || !macValid(macTo) || !macValid(macFrom) || macMulticast(macTo) || macMulticast(macFrom)) return;
|
if (macBroadcast(macTo) || macBroadcast(macFrom) || !macValid(macTo) || !macValid(macFrom) || macMulticast(macTo) || macMulticast(macFrom)) return;
|
||||||
|
|
||||||
int16_t accesspointNum = findAccesspoint(macFrom);
|
int accesspointNum = findAccesspoint(macFrom);
|
||||||
if (accesspointNum >= 0) {
|
if (accesspointNum >= 0) {
|
||||||
stations.add(macTo, accesspointNum);
|
stations.add(macTo, accesspoints.getID(accesspointNum));
|
||||||
} else {
|
} else {
|
||||||
accesspointNum = findAccesspoint(macTo);
|
accesspointNum = findAccesspoint(macTo);
|
||||||
if (accesspointNum >= 0) {
|
if (accesspointNum >= 0) {
|
||||||
stations.add(macFrom, accesspointNum);
|
stations.add(macFrom, accesspoints.getID(accesspointNum));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -423,7 +423,7 @@ void SerialInterface::runCommand(String input) {
|
|||||||
else if (eqlsCMD(i, CLI_AP)) mac = accesspoints.getMacStr(list->get(i + 1).toInt());
|
else if (eqlsCMD(i, CLI_AP)) mac = accesspoints.getMacStr(list->get(i + 1).toInt());
|
||||||
else if (eqlsCMD(i, CLI_STATION)) {
|
else if (eqlsCMD(i, CLI_STATION)) {
|
||||||
mac = stations.getMacStr(list->get(i + 1).toInt());
|
mac = stations.getMacStr(list->get(i + 1).toInt());
|
||||||
bssid = accesspoints.getMacStr(stations.getAP(list->get(i + 1).toInt()));
|
bssid = stations.getAPMacStr(list->get(i + 1).toInt());
|
||||||
}
|
}
|
||||||
else if (eqlsCMD(i, CLI_CHANNEL)) channel = (uint8_t)list->get(i + 1).toInt();
|
else if (eqlsCMD(i, CLI_CHANNEL)) channel = (uint8_t)list->get(i + 1).toInt();
|
||||||
else if (eqlsCMD(i, CLI_BSSID)) bssid = list->get(i + 1);
|
else if (eqlsCMD(i, CLI_BSSID)) bssid = list->get(i + 1);
|
||||||
|
|||||||
@@ -121,9 +121,20 @@ String Stations::getAPStr(int num) {
|
|||||||
return accesspoints.getSSID(getAP(num));
|
return accesspoints.getSSID(getAP(num));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t* Stations::getAPMac(int num){
|
||||||
|
if (!check(num)) return 0;
|
||||||
|
return WiFi.BSSID(list->get(num).ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
String Stations::getAPMacStr(int num){
|
||||||
|
if (!check(num)) return String();
|
||||||
|
uint8_t* mac = getAPMac(num);
|
||||||
|
return bytesToStr(mac, 6);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t Stations::getAP(int num) {
|
uint8_t Stations::getAP(int num) {
|
||||||
if (!check(num)) return 0;
|
if (!check(num)) return 0;
|
||||||
return list->get(num).ap;
|
return accesspoints.find(list->get(num).ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
String Stations::getNameStr(int num) {
|
String Stations::getNameStr(int num) {
|
||||||
@@ -142,16 +153,9 @@ uint8_t* Stations::getMac(int num) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String Stations::getMacStr(int num) {
|
String Stations::getMacStr(int num) {
|
||||||
String value = "";
|
if (!check(num)) return String();
|
||||||
if (check(num)) {
|
uint8_t* mac = getMac(num);
|
||||||
uint8_t* mac = getMac(num);
|
return bytesToStr(mac, 6);
|
||||||
for (int i = 0; i < 6; i++) {
|
|
||||||
if (mac[i] < 0x10) value += "0";
|
|
||||||
value += String(mac[i], HEX);
|
|
||||||
if (i < 5) value += ":";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String Stations::getMacVendorStr(int num) {
|
String Stations::getMacVendorStr(int num) {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ extern String searchVendor(uint8_t* mac);
|
|||||||
extern bool macMulticast(uint8_t* mac);
|
extern bool macMulticast(uint8_t* mac);
|
||||||
extern bool macValid(uint8_t* mac);
|
extern bool macValid(uint8_t* mac);
|
||||||
extern bool macBroadcast(uint8_t* mac);
|
extern bool macBroadcast(uint8_t* mac);
|
||||||
|
extern String bytesToStr(uint8_t* b, uint32_t size);
|
||||||
|
|
||||||
class Stations {
|
class Stations {
|
||||||
public:
|
public:
|
||||||
@@ -45,6 +46,8 @@ class Stations {
|
|||||||
String getVendorStr(int num);
|
String getVendorStr(int num);
|
||||||
String getTimeStr(int num);
|
String getTimeStr(int num);
|
||||||
String getSelectedStr(int num);
|
String getSelectedStr(int num);
|
||||||
|
uint8_t* getAPMac(int num);
|
||||||
|
String getAPMacStr(int num);
|
||||||
uint8_t* getMac(int num);
|
uint8_t* getMac(int num);
|
||||||
uint32_t* getPkts(int num);
|
uint32_t* getPkts(int num);
|
||||||
uint32_t* getTime(int num);
|
uint32_t* getTime(int num);
|
||||||
|
|||||||
@@ -689,18 +689,6 @@ String formatBytes(size_t bytes) {
|
|||||||
else return String(bytes / 1024.0 / 1024.0 / 1024.0) + "GB";
|
else return String(bytes / 1024.0 / 1024.0 / 1024.0) + "GB";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void parseBytes(const char* str, char sep, byte* bytes, int maxBytes, int base) {
|
|
||||||
for (int i = 0; i < maxBytes; i++) {
|
|
||||||
bytes[i] = strtoul(str, NULL, base); // Convert byte
|
|
||||||
str = strchr(str, sep); // Find next separator
|
|
||||||
if (str == NULL || *str == '\0') {
|
|
||||||
break; // No more separators, exit
|
|
||||||
}
|
|
||||||
str++; // Point to next character after separator
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,10 @@ function drawScan(){
|
|||||||
|
|
||||||
for(var i=0;i<scanJson.stations.length;i++){
|
for(var i=0;i<scanJson.stations.length;i++){
|
||||||
selected = scanJson.stations[i][scanJson.stations[i].length-1];
|
selected = scanJson.stations[i][scanJson.stations[i].length-1];
|
||||||
|
ap = "";
|
||||||
|
if(scanJson.stations[i][5] >= 0)
|
||||||
|
ap = esc(scanJson.aps[scanJson.stations[i][5]][0]);
|
||||||
|
|
||||||
html += (selected ? "<tr class='selected'>" : "<tr>")
|
html += (selected ? "<tr class='selected'>" : "<tr>")
|
||||||
+ "<td class='id'>"+i+"</td>" // ID
|
+ "<td class='id'>"+i+"</td>" // ID
|
||||||
+ "<td class='vendor'>"+esc(scanJson.stations[i][3])+"</td>" // Vendor
|
+ "<td class='vendor'>"+esc(scanJson.stations[i][3])+"</td>" // Vendor
|
||||||
@@ -76,7 +79,7 @@ function drawScan(){
|
|||||||
+ "<td class='ch'>"+esc(scanJson.stations[i][1])+"</td>" // Ch
|
+ "<td class='ch'>"+esc(scanJson.stations[i][1])+"</td>" // Ch
|
||||||
+ "<td class='name'>"+(scanJson.stations[i][2].length > 0 ? esc(scanJson.stations[i][2]) : "<button onclick='add(1,"+i+")'>"+lang("add")+"</button>")+"</td>" // Name
|
+ "<td class='name'>"+(scanJson.stations[i][2].length > 0 ? esc(scanJson.stations[i][2]) : "<button onclick='add(1,"+i+")'>"+lang("add")+"</button>")+"</td>" // Name
|
||||||
+ "<td class='pkts'>"+esc(scanJson.stations[i][4])+"</td>" // Pkts
|
+ "<td class='pkts'>"+esc(scanJson.stations[i][4])+"</td>" // Pkts
|
||||||
+ "<td class='ap'>"+esc(scanJson.aps[scanJson.stations[i][5]][0])+"</td>" // AP
|
+ "<td class='ap'>"+ap+"</td>" // AP
|
||||||
+ "<td class='lastseen'>"+esc(scanJson.stations[i][6])+"</td>" // Last seen
|
+ "<td class='lastseen'>"+esc(scanJson.stations[i][6])+"</td>" // Last seen
|
||||||
// Select
|
// Select
|
||||||
+ "<td class='selectColumn'><label class='checkBoxContainer'><input type='checkbox' "+(selected ? "checked" : "")+" onclick='selectRow(1,"+i+","+(selected ? "false" : "true")+")'><span class='checkmark'></span></label></td>"
|
+ "<td class='selectColumn'><label class='checkBoxContainer'><input type='checkbox' "+(selected ? "checked" : "")+" onclick='selectRow(1,"+i+","+(selected ? "false" : "true")+")'><span class='checkmark'></span></label></td>"
|
||||||
|
|||||||
Reference in New Issue
Block a user