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) {
|
||||
if (!check(num)) return String();
|
||||
uint8_t* mac = getMac(num);
|
||||
String value;
|
||||
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;
|
||||
return bytesToStr(mac, 6);
|
||||
}
|
||||
|
||||
String Accesspoints::getVendorStr(int num) {
|
||||
@@ -165,7 +159,7 @@ bool Accesspoints::getSelected(int num) {
|
||||
return list->get(num).selected;
|
||||
}
|
||||
|
||||
int Accesspoints::getID(int num){
|
||||
uint8_t Accesspoints::getID(int num){
|
||||
if (!check(num)) return -1;
|
||||
return list->get(num).id;
|
||||
}
|
||||
@@ -224,6 +218,15 @@ void Accesspoints::removeAll() {
|
||||
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() {
|
||||
return list->size();
|
||||
}
|
||||
|
||||
@@ -14,7 +14,8 @@ extern Names names;
|
||||
|
||||
extern String searchVendor(uint8_t* mac);
|
||||
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{
|
||||
uint8_t id;
|
||||
@@ -49,12 +50,14 @@ class Accesspoints {
|
||||
String getSelectedStr(int num);
|
||||
uint8_t getCh(int num);
|
||||
uint8_t getEnc(int num);
|
||||
int getID(int num);
|
||||
uint8_t getID(int num);
|
||||
int getRSSI(int num);
|
||||
uint8_t* getMac(int num);
|
||||
bool getHidden(int num);
|
||||
bool getSelected(int num);
|
||||
|
||||
int find(uint8_t id);
|
||||
|
||||
int count();
|
||||
int selected();
|
||||
|
||||
|
||||
@@ -241,7 +241,7 @@ void Attack:: beaconUpdate() {
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@@ -340,16 +340,9 @@ uint8_t* Names::getBssid(int num) {
|
||||
}
|
||||
|
||||
String Names::getMacStr(int num) {
|
||||
String value;
|
||||
if (check(num)) {
|
||||
if (!check(num)) return String();
|
||||
uint8_t* mac = getMac(num);
|
||||
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;
|
||||
return bytesToStr(mac, 6);
|
||||
}
|
||||
|
||||
String Names::getVendorStr(int num) {
|
||||
|
||||
@@ -23,6 +23,7 @@ extern String searchVendor(uint8_t* mac);
|
||||
extern String fixUtf8(String str);
|
||||
extern String buildString(String left, String right, int maxLen);
|
||||
extern String escape(String str);
|
||||
extern String bytesToStr(uint8_t* b, uint32_t size);
|
||||
|
||||
class Names {
|
||||
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;
|
||||
|
||||
int16_t accesspointNum = findAccesspoint(macFrom);
|
||||
int accesspointNum = findAccesspoint(macFrom);
|
||||
if (accesspointNum >= 0) {
|
||||
stations.add(macTo, accesspointNum);
|
||||
stations.add(macTo, accesspoints.getID(accesspointNum));
|
||||
} else {
|
||||
accesspointNum = findAccesspoint(macTo);
|
||||
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_STATION)) {
|
||||
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_BSSID)) bssid = list->get(i + 1);
|
||||
|
||||
@@ -121,9 +121,20 @@ String Stations::getAPStr(int 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) {
|
||||
if (!check(num)) return 0;
|
||||
return list->get(num).ap;
|
||||
return accesspoints.find(list->get(num).ap);
|
||||
}
|
||||
|
||||
String Stations::getNameStr(int num) {
|
||||
@@ -142,16 +153,9 @@ uint8_t* Stations::getMac(int num) {
|
||||
}
|
||||
|
||||
String Stations::getMacStr(int num) {
|
||||
String value = "";
|
||||
if (check(num)) {
|
||||
if (!check(num)) return String();
|
||||
uint8_t* mac = getMac(num);
|
||||
for (int i = 0; i < 6; i++) {
|
||||
if (mac[i] < 0x10) value += "0";
|
||||
value += String(mac[i], HEX);
|
||||
if (i < 5) value += ":";
|
||||
}
|
||||
}
|
||||
return value;
|
||||
return bytesToStr(mac, 6);
|
||||
}
|
||||
|
||||
String Stations::getMacVendorStr(int num) {
|
||||
|
||||
@@ -20,6 +20,7 @@ extern String searchVendor(uint8_t* mac);
|
||||
extern bool macMulticast(uint8_t* mac);
|
||||
extern bool macValid(uint8_t* mac);
|
||||
extern bool macBroadcast(uint8_t* mac);
|
||||
extern String bytesToStr(uint8_t* b, uint32_t size);
|
||||
|
||||
class Stations {
|
||||
public:
|
||||
@@ -45,6 +46,8 @@ class Stations {
|
||||
String getVendorStr(int num);
|
||||
String getTimeStr(int num);
|
||||
String getSelectedStr(int num);
|
||||
uint8_t* getAPMac(int num);
|
||||
String getAPMacStr(int num);
|
||||
uint8_t* getMac(int num);
|
||||
uint32_t* getPkts(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";
|
||||
}
|
||||
|
||||
/*
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -68,6 +68,9 @@ function drawScan(){
|
||||
|
||||
for(var i=0;i<scanJson.stations.length;i++){
|
||||
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>")
|
||||
+ "<td class='id'>"+i+"</td>" // ID
|
||||
@@ -76,7 +79,7 @@ function drawScan(){
|
||||
+ "<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='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
|
||||
// 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>"
|
||||
|
||||
Reference in New Issue
Block a user