mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-22 14:40:05 +01:00
functional settings site
This commit is contained in:
@@ -144,10 +144,11 @@ void Attack::run(){
|
||||
|
||||
stati[0] = (String)packetsCounter[0]+"pkts/s";
|
||||
packetsCounter[0] = 0;
|
||||
attackTimeoutCounter[0]++;
|
||||
if(debug) Serial.println(" done");
|
||||
attackTimeoutCounter[0]++;
|
||||
if(attackTimeoutCounter[0] > settings.attackTimeout) stop(1);
|
||||
if(settings.attackTimeout > 0){
|
||||
attackTimeoutCounter[0]++;
|
||||
if(attackTimeoutCounter[0] > settings.attackTimeout) stop(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* =============== Beacon Attack =============== */
|
||||
@@ -198,8 +199,10 @@ void Attack::run(){
|
||||
macListChangeCounter = 0;
|
||||
}
|
||||
if(debug) Serial.println(" done ");
|
||||
attackTimeoutCounter[1]++;
|
||||
if(attackTimeoutCounter[1]/10 > settings.attackTimeout) stop(1);
|
||||
if(settings.attackTimeout > 0){
|
||||
attackTimeoutCounter[1]++;
|
||||
if(attackTimeoutCounter[1]/10 > settings.attackTimeout) stop(1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -55,4 +55,9 @@ void MacList::remove(Mac adr){
|
||||
macAdrs[i].set(0x00,0x00,0x00,0x00,0x00,0x00);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MacList::set(int num, Mac adr){
|
||||
macAdrs[num].setMac(adr);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ class MacList
|
||||
MacList();
|
||||
int add(Mac adr);
|
||||
void remove(Mac adr);
|
||||
void set(int num, Mac adr);
|
||||
void info();
|
||||
bool contains(Mac adr);
|
||||
int getNum(Mac adr);
|
||||
|
||||
@@ -45,7 +45,7 @@ void NameList::add(Mac client, String name){
|
||||
name.getBytes(_buf,nameLength);
|
||||
for(int i=0;i<nameLength;i++){
|
||||
if(i<name.length()) names[clients.getNum(client)][i] = _buf[i];
|
||||
else names[clients.getNum(client)][i] = 32;
|
||||
else names[clients.getNum(client)][i] = 0x00;
|
||||
}
|
||||
NameList::save();
|
||||
}
|
||||
@@ -59,4 +59,28 @@ String NameList::get(Mac client){
|
||||
}
|
||||
}
|
||||
return returnStr;
|
||||
}
|
||||
}
|
||||
|
||||
String NameList::getName(int num){
|
||||
String returnStr;
|
||||
for(int h=0;h<nameLength;h++){
|
||||
if(names[num][h] != 0x00) returnStr += (char)names[num][h];
|
||||
}
|
||||
return returnStr;
|
||||
}
|
||||
|
||||
Mac NameList::getMac(int num){
|
||||
return clients._get(num);
|
||||
}
|
||||
|
||||
void NameList::remove(int num){
|
||||
for(int i=num;i<len-1;i++){
|
||||
clients.set(num, clients._get(num+1));
|
||||
for(int h=0;h<nameLength;h++) names[num][h] = names[num+1][h];
|
||||
}
|
||||
clients.remove(clients._get(len));
|
||||
clients.num--;
|
||||
len--;
|
||||
save();
|
||||
}
|
||||
|
||||
|
||||
@@ -25,10 +25,13 @@ class NameList
|
||||
void clear();
|
||||
void add(Mac client, String name);
|
||||
String get(Mac client);
|
||||
String getName(int num);
|
||||
Mac getMac(int num);
|
||||
void remove(int num);
|
||||
int len = 0;
|
||||
private:
|
||||
void save();
|
||||
|
||||
int len = 0;
|
||||
|
||||
MacList clients;
|
||||
uint8_t names[listLength][nameLength];
|
||||
};
|
||||
|
||||
@@ -10,6 +10,8 @@ void Settings::load(){
|
||||
|
||||
if(ssidLen < 1 || ssidLen > 32 || passwordLen < 8 || passwordLen > 32) reset();
|
||||
else{
|
||||
ssid = "";
|
||||
password = "";
|
||||
for(int i=0;i<ssidLen;i++) ssid += (char)EEPROM.read(ssidAdr+i);
|
||||
for(int i=0;i<passwordLen;i++) password += (char)EEPROM.read(passwordAdr+i);
|
||||
|
||||
@@ -40,7 +42,8 @@ void Settings::reset(){
|
||||
}
|
||||
|
||||
void Settings::save(){
|
||||
if(debug) Serial.print("saving settings...");
|
||||
ssidLen = ssid.length();
|
||||
passwordLen = password.length();
|
||||
|
||||
EEPROM.write(ssidLenAdr,ssidLen);
|
||||
EEPROM.write(passwordLenAdr,passwordLen);
|
||||
@@ -48,19 +51,18 @@ void Settings::save(){
|
||||
for(int i=0;i<ssidLen;i++) EEPROM.write(ssidAdr+i,ssid[i]);
|
||||
for(int i=0;i<passwordLen;i++) EEPROM.write(passwordAdr+i,password[i]);
|
||||
|
||||
EEPROM.write(deauthReasonAdr, deauthReason);
|
||||
EEPROM.write(deauthReasonAdr, deauthReason);
|
||||
|
||||
eepromWriteInt(attackTimeoutAdr, attackTimeout);
|
||||
|
||||
EEPROM.write(attackPacketRateAdr, attackPacketRate);
|
||||
EEPROM.write(clientScanTimeAdr, clientScanTime);
|
||||
|
||||
EEPROM.commit();
|
||||
|
||||
if(debug){
|
||||
info();
|
||||
Serial.println("done");
|
||||
Serial.println("settings saved");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Settings::info(){
|
||||
@@ -74,4 +76,29 @@ void Settings::info(){
|
||||
Serial.println("attack packet rate: "+(String)attackPacketRate);
|
||||
Serial.println("client scan time: "+(String)clientScanTime);
|
||||
}
|
||||
|
||||
|
||||
String Settings::get(){
|
||||
String json = "{";
|
||||
//\"
|
||||
json += "\"ssid\":\""+ssid+"\",";
|
||||
json += "\"password\":\""+password+"\",";
|
||||
json += "\"deauthReason\":"+(String)(int)deauthReason+",";
|
||||
json += "\"attackTimeout\":"+(String)attackTimeout+",";
|
||||
json += "\"attackPacketRate\":"+(String)attackPacketRate+",";
|
||||
json += "\"clientScanTime\":"+(String)clientScanTime+",";
|
||||
|
||||
json += "\"nameList\":[";
|
||||
for(int i=0;i<nameList.len;i++){
|
||||
json += "{";
|
||||
json += "\"id\":"+(String)i+",";
|
||||
json += "\"name\":\""+nameList.getName(i)+"\",";
|
||||
json += "\"mac\":\""+nameList.getMac(i).toString()+"\",";
|
||||
json += "\"vendor\":\""+data_getVendor(nameList.getMac(i)._get(0), nameList.getMac(i)._get(1), nameList.getMac(i)._get(2))+"\"";
|
||||
json += "}";
|
||||
if(i!=nameList.len-1) json += ",";
|
||||
}
|
||||
json += "]";
|
||||
|
||||
json += "}";
|
||||
return json;
|
||||
}
|
||||
|
||||
@@ -4,10 +4,13 @@
|
||||
#include <EEPROM.h>
|
||||
#include "Mac.h"
|
||||
#include "MacList.h"
|
||||
#include "NameList.h"
|
||||
|
||||
extern const bool debug;
|
||||
extern String data_getVendor(uint8_t first,uint8_t second,uint8_t third);
|
||||
extern void eepromWriteInt(int adr, int val);
|
||||
extern int eepromReadInt(int adr);
|
||||
extern NameList nameList;
|
||||
|
||||
#define ssidLenAdr 1024
|
||||
#define ssidAdr 1025
|
||||
@@ -25,6 +28,7 @@ class Settings
|
||||
void load();
|
||||
void reset();
|
||||
void save();
|
||||
String get();
|
||||
void info();
|
||||
|
||||
int ssidLen;
|
||||
@@ -33,7 +37,7 @@ class Settings
|
||||
String password = "";
|
||||
|
||||
uint8_t deauthReason;
|
||||
int attackTimeout;
|
||||
unsigned int attackTimeout;
|
||||
int attackPacketRate;
|
||||
|
||||
int clientScanTime;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -16,7 +16,7 @@ extern "C" {
|
||||
#include "Attack.h"
|
||||
#include "Settings.h"
|
||||
|
||||
const bool debug = false;
|
||||
const bool debug = true;
|
||||
|
||||
ESP8266WebServer server(80);
|
||||
|
||||
@@ -56,6 +56,7 @@ void setup(){
|
||||
EEPROM.begin(4096);
|
||||
|
||||
settings.load();
|
||||
if(debug) settings.info();
|
||||
nameList.load();
|
||||
|
||||
Serial.println("");
|
||||
@@ -74,6 +75,7 @@ void setup(){
|
||||
server.on("/index.html", loadIndex);
|
||||
server.on("/clients.html", loadClients);
|
||||
server.on("/attack.html", loadAttack);
|
||||
server.on("/settings.html", loadSettings);
|
||||
server.on("/functions.js", loadFunctionsJS);
|
||||
|
||||
/* header links */
|
||||
@@ -90,6 +92,9 @@ void setup(){
|
||||
server.on("/setName.json", setClientName);
|
||||
server.on("/attackInfo.json", sendAttackInfo);
|
||||
server.on("/attackStart.json", startAttack);
|
||||
server.on("/settings.json", getSettings);
|
||||
server.on("/settingsSave.json", saveSettings);
|
||||
server.on("/deleteName.json", deleteName);
|
||||
|
||||
server.begin();
|
||||
}
|
||||
@@ -109,6 +114,8 @@ void loadClients(){ server.send ( 200, "text/html", data_getClientsHTML()); }
|
||||
void loadAttack(){ server.send ( 200, "text/html", data_getAttackHTML() ); }
|
||||
void loadFunctionsJS(){ server.send( 200, "text/javascript", data_getFunctionsJS() ); }
|
||||
void loadStyle(){ server.send ( 200, "text/css", data_getStyle() ); }
|
||||
void loadSettings(){ server.send( 200, "text/html", data_getSettingsHTML() ); }
|
||||
|
||||
|
||||
//==========AP-Scan==========
|
||||
void startAPScan(){
|
||||
@@ -166,4 +173,28 @@ void startAttack(){
|
||||
server.send ( 200, "text/json", "true");
|
||||
}else server.send ( 200, "text/json", "false");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//==========Settings==========
|
||||
void getSettings(){ server.send ( 200, "text/json", settings.get() ); }
|
||||
void saveSettings(){
|
||||
if(server.hasArg("ssid")) settings.ssid = server.arg("ssid");
|
||||
if(server.hasArg("password")) settings.password = server.arg("password");
|
||||
if(server.hasArg("scanTime")) settings.clientScanTime = server.arg("scanTime").toInt();
|
||||
if(server.hasArg("timeout")) settings.attackTimeout = server.arg("timeout").toInt();
|
||||
if(server.hasArg("deauthReason")) settings.deauthReason = server.arg("deauthReason").toInt();
|
||||
if(server.hasArg("packetRate")) settings.attackPacketRate = server.arg("packetRate").toInt();
|
||||
|
||||
settings.save();
|
||||
server.send ( 200, "text/json", "true" );
|
||||
}
|
||||
|
||||
void deleteName(){
|
||||
if(server.hasArg("num")) {
|
||||
int _num = server.arg("num").toInt();
|
||||
nameList.remove(_num);
|
||||
server.send ( 200, "text/json", "true");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
<a href="index.html">APs</a>
|
||||
<a href="clients.html">Clients</a>
|
||||
<a href="attack.html">Attack</a>
|
||||
<a href="settings.html">Settings</a>
|
||||
</nav>
|
||||
<div id="content">
|
||||
<h1>Attack</h1>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#clientScanStart{
|
||||
margin-left: 30px;
|
||||
}
|
||||
#clientScanTime{
|
||||
#scanTime{
|
||||
width: 60px;
|
||||
}
|
||||
</style>
|
||||
@@ -25,11 +25,12 @@
|
||||
<a href="index.html">APs</a>
|
||||
<a href="clients.html">Clients</a>
|
||||
<a href="attack.html">Attack</a>
|
||||
<a href="settings.html">Settings</a>
|
||||
</nav>
|
||||
<div id="content">
|
||||
<h1>Scan for client devices</h1>
|
||||
|
||||
<label for="clientScanTime">Scan time:</label>
|
||||
<label for="scanTime">Scan time:</label>
|
||||
<input type="number" id="scanTime" value="10">s
|
||||
|
||||
<button onclick="scan()" id="startScan">start</button>
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
<a href="index.html">APs</a>
|
||||
<a href="clients.html">Clients</a>
|
||||
<a href="attack.html">Attack</a>
|
||||
<a href="settings.html">Settings</a>
|
||||
</nav>
|
||||
<div id="content">
|
||||
<h1>Scan for WiFi access points</h1>
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
display: inline-block;
|
||||
width: 135px;
|
||||
}
|
||||
#saved{
|
||||
display: inline;
|
||||
margin-left: 20px;
|
||||
}
|
||||
</style>
|
||||
<script src="functions.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=0.8">
|
||||
@@ -27,36 +31,44 @@
|
||||
|
||||
<p class="block bold">WiFi</p>
|
||||
|
||||
<label for="clientScanTime">SSID:</label>
|
||||
<input type="text" id="scanTime" minlength="1" maxlength="32">
|
||||
<label for="ssid">SSID:</label>
|
||||
<input type="text" id="ssid" minlength="1" maxlength="32">
|
||||
|
||||
<br />
|
||||
|
||||
<label for="clientScanTime">password:</label>
|
||||
<input type="text" id="scanTime" minlength="8" maxlength="32">
|
||||
<p class="small">must have at least 8 characters!</p>
|
||||
<label for="password">password:</label>
|
||||
<input type="text" id="password" minlength="8" maxlength="32">
|
||||
<p class="small">must have at least 8 characters! (needs restart)</p>
|
||||
|
||||
<br />
|
||||
<p class="block bold">Client Scan</p>
|
||||
|
||||
<label for="clientScanTime">default scan time:</label>
|
||||
<label for="scanTime">default scan time:</label>
|
||||
<input type="number" id="scanTime" min="1" max="255">s
|
||||
<br />
|
||||
<br />
|
||||
<p class="block bold">Attack</p>
|
||||
|
||||
<label for="clientScanTime">timeout:</label>
|
||||
<input type="number" id="scanTime" min="-1" max="32768">s
|
||||
<p class="small">-1 for no timeout</p>
|
||||
<label for="timeout">timeout:</label>
|
||||
<input type="number" id="timeout" min="-1" max="65536">s
|
||||
<p class="small">0 = no timeout</p>
|
||||
|
||||
<label for="clientScanTime">deauth reason:</label>
|
||||
<input type="number" id="scanTime" min="1" max="45">
|
||||
<label for="deauthReason">deauth reason:</label>
|
||||
<input type="number" id="deauthReason" min="1" max="45">
|
||||
<p class="small">reason codes: <a target="_blank" href="http://www.aboutcher.co.uk/2012/07/linux-wifi-deauthenticated-reason-codes/">click</a></p>
|
||||
|
||||
<label for="clientScanTime">packetrate:</label>
|
||||
<input type="number" id="scanTime" min="1" max="100">pkts/s
|
||||
<label for="packetRate">packetrate:</label>
|
||||
<input type="number" id="packetRate" min="1" max="100">pkts/s
|
||||
<p class="small">only for deauth attack - may cause instability!</p>
|
||||
<br />
|
||||
<br />
|
||||
<button onclick="saveSettings()">save</button><p class="small" id="saved"></p>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<p class="block bold">Client Names</p>
|
||||
<table id="nameList">
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
@@ -64,6 +76,81 @@
|
||||
|
||||
</body>
|
||||
<script>
|
||||
var nameListTable = document.getElementById('nameList');
|
||||
var ssid = document.getElementById('ssid');
|
||||
var password = document.getElementById('password');
|
||||
var scanTime = document.getElementById('scanTime');
|
||||
var timeout = document.getElementById('timeout');
|
||||
var deauthReason = document.getElementById('deauthReason');
|
||||
var packetRate = document.getElementById('packetRate');
|
||||
var saved = document.getElementById('saved');
|
||||
var res;
|
||||
|
||||
function getData(){
|
||||
getResponse("settings.json",function(responseText){
|
||||
res = JSON.parse(responseText);
|
||||
|
||||
ssid.value = res.ssid;
|
||||
password.value = res.password;
|
||||
scanTime.value = res.clientScanTime;
|
||||
timeout.value = res.attackTimeout;
|
||||
deauthReason.value = res.deauthReason;
|
||||
packetRate.value = res.attackPacketRate;
|
||||
|
||||
var tr = '';
|
||||
if(res.nameList.length > 0) tr += '<tr><th>MAC</th><th>Vendor</th><th>Name</th><th>X</th></tr>';
|
||||
|
||||
for(var i=0;i<res.nameList.length;i++){
|
||||
|
||||
tr += '<tr>';
|
||||
tr += '<td>'+res.nameList[i].mac+'</td>';
|
||||
tr += '<td>'+res.nameList[i].vendor+'</td>';
|
||||
tr += '<td>'+res.nameList[i].name+' <a class="blue" onclick="changeName('+res.nameList[i].id+')">edit</a></td>';
|
||||
tr += '<td><button class="marginNull warnBtn" onclick="deleteName('+res.nameList[i].id+')">x</button></td>';
|
||||
|
||||
tr += '</tr>';
|
||||
}
|
||||
|
||||
nameListTable.innerHTML = tr;
|
||||
});
|
||||
}
|
||||
|
||||
function changeName(id){
|
||||
var newName = prompt("Name for "+res.nameList[id].mac);
|
||||
if(newName != null){
|
||||
getResponse("setName.json?id="+id+"&name="+newName,function(responseText){
|
||||
if(responseText == "true") getResults();
|
||||
else alert("error");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function deleteName(id){
|
||||
getResponse("deleteName.json?num="+id,function(responseText){
|
||||
if(responseText == "true") getData();
|
||||
else alert("error");
|
||||
});
|
||||
}
|
||||
|
||||
function saveSettings(){
|
||||
saved.innerHTML = "saving...";
|
||||
var url = "settingsSave.json";
|
||||
url += "?ssid="+ssid.value;
|
||||
url += "&password="+password.value;
|
||||
url += "&scanTime="+scanTime.value;
|
||||
url += "&timeout="+timeout.value;
|
||||
url += "&deauthReason="+deauthReason.value;
|
||||
url += "&packetRate="+packetRate.value;
|
||||
|
||||
getResponse(url, function(responseText){
|
||||
if(responseText == "true"){
|
||||
getData();
|
||||
saved.innerHTML = "saved";
|
||||
}
|
||||
else alert("error");
|
||||
});
|
||||
}
|
||||
|
||||
getData();
|
||||
</script>
|
||||
</html>
|
||||
Reference in New Issue
Block a user