Added restart button in the web interface

This commit is contained in:
N0vaPixel
2017-03-05 02:23:11 +01:00
parent f2b13a56ae
commit 8c33c191ee
5 changed files with 176 additions and 88 deletions

View File

@@ -5,7 +5,7 @@
#include <ESP8266mDNS.h> #include <ESP8266mDNS.h>
extern "C" { extern "C" {
#include "user_interface.h" #include "user_interface.h"
} }
#include <EEPROM.h> #include <EEPROM.h>
@@ -31,30 +31,33 @@ Attack attack;
Settings settings; Settings settings;
SSIDList ssidList; SSIDList ssidList;
void sniffer(uint8_t *buf, uint16_t len){ void sniffer(uint8_t *buf, uint16_t len) {
clientScan.packetSniffer(buf,len); clientScan.packetSniffer(buf, len);
} }
void startWifi(){ void startWifi() {
Serial.println("starting WiFi AP"); Serial.println("starting WiFi AP");
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
wifi_set_promiscuous_rx_cb(sniffer); wifi_set_promiscuous_rx_cb(sniffer);
WiFi.softAP((const char*)settings.ssid.c_str(), (const char*)settings.password.c_str(), settings.apChannel, settings.ssidHidden); //for an open network without a password change to: WiFi.softAP(ssid); WiFi.softAP((const char*)settings.ssid.c_str(), (const char*)settings.password.c_str(), settings.apChannel, settings.ssidHidden); //for an open network without a password change to: WiFi.softAP(ssid);
Serial.println("SSID: "+settings.ssid); Serial.println("SSID: " + settings.ssid);
Serial.println("Password: "+settings.password); Serial.println("Password: " + settings.password);
if(settings.password.length()<8) Serial.println("WARNING: password must have at least 8 characters!"); if (settings.password.length() < 8) Serial.println("WARNING: password must have at least 8 characters!");
if(settings.ssid.length()<1 || settings.ssid.length()>32) Serial.println("WARNING: SSID length must be between 1 and 32 characters!"); if (settings.ssid.length() < 1 || settings.ssid.length() > 32) Serial.println("WARNING: SSID length must be between 1 and 32 characters!");
} }
void setup(){ void setup() {
Serial.begin(115200); Serial.begin(115200);
delay(2000); delay(2000);
EEPROM.begin(4096); EEPROM.begin(4096);
pinMode(BUILTIN_LED, OUTPUT);
digitalWrite(BUILTIN_LED, HIGH);
settings.load(); settings.load();
if(debug) settings.info(); if (debug) settings.info();
nameList.load(); nameList.load();
ssidList.load(); ssidList.load();
@@ -105,48 +108,65 @@ void setup(){
server.on("/clearSSID.json", clearSSID); server.on("/clearSSID.json", clearSSID);
server.on("/resetSSID.json", resetSSID); server.on("/resetSSID.json", resetSSID);
server.on("/saveSSID.json", saveSSID); server.on("/saveSSID.json", saveSSID);
server.on("/restartESP.json", restartESP);
server.begin(); server.begin();
} }
void loop(){ void loop() {
if(clientScan.sniffing){ if (clientScan.sniffing) {
if(clientScan.stop()) startWifi(); if (clientScan.stop()) startWifi();
} else{ } else {
server.handleClient(); server.handleClient();
attack.run(); attack.run();
} }
} }
void load404(){ server.send ( 200, "text/html", data_get404()); } void load404() {
void loadIndex(){ server.send ( 200, "text/html", data_getIndexHTML() ); } server.send ( 200, "text/html", data_get404());
void loadClients(){ server.send ( 200, "text/html", data_getClientsHTML()); } }
void loadAttack(){ server.send ( 200, "text/html", data_getAttackHTML() ); } void loadIndex() {
void loadFunctionsJS(){ server.send( 200, "text/javascript", data_getFunctionsJS() ); } server.send ( 200, "text/html", data_getIndexHTML() );
void loadStyle(){ server.send ( 200, "text/css", data_getStyle() ); } }
void loadManifest(){ server.send ( 200, "text/css", data_getManifest() ); } void loadClients() {
void loadSettings(){ server.send( 200, "text/html", data_getSettingsHTML() ); } 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 loadManifest() {
server.send ( 200, "text/css", data_getManifest() );
}
void loadSettings() {
server.send( 200, "text/html", data_getSettingsHTML() );
}
//==========AP-Scan========== //==========AP-Scan==========
void startAPScan(){ void startAPScan() {
if(apScan.start()){ if (apScan.start()) {
server.send ( 200, "text/json", "true"); server.send ( 200, "text/json", "true");
attack.stopAll(); attack.stopAll();
} }
} }
void sendAPResults(){ void sendAPResults() {
if(server.hasArg("apid")) { if (server.hasArg("apid")) {
int apid = server.arg("apid").toInt(); int apid = server.arg("apid").toInt();
server.send ( 200, "text/json", apScan.getResult(apid)); server.send ( 200, "text/json", apScan.getResult(apid));
} else { } else {
server.send ( 200, "text/json", apScan.getResults()); server.send ( 200, "text/json", apScan.getResults());
} }
} }
void selectAP(){ void selectAP() {
if(server.hasArg("num")) { if (server.hasArg("num")) {
apScan.select(server.arg("num").toInt()); apScan.select(server.arg("num").toInt());
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
attack.stopAll(); attack.stopAll();
@@ -154,129 +174,151 @@ void selectAP(){
} }
//==========Client-Scan========== //==========Client-Scan==========
void startClientScan(){ void startClientScan() {
if(server.hasArg("time") && apScan.getFirstTarget() > -1 && !clientScan.sniffing) { if (server.hasArg("time") && apScan.getFirstTarget() > -1 && !clientScan.sniffing) {
server.send(200, "text/json", "true"); server.send(200, "text/json", "true");
clientScan.start(server.arg("time").toInt()); clientScan.start(server.arg("time").toInt());
attack.stopAll(); attack.stopAll();
} else server.send( 200, "text/json", "Error: no selected access point"); } else server.send( 200, "text/json", "Error: no selected access point");
} }
void sendClientResults(){ server.send( 200, "text/json", clientScan.getResults() ); } void sendClientResults() {
void sendClientScanTime(){ server.send( 200, "text/json", (String)settings.clientScanTime ); } server.send( 200, "text/json", clientScan.getResults() );
}
void sendClientScanTime() {
server.send( 200, "text/json", (String)settings.clientScanTime );
}
void selectClient(){ void selectClient() {
if(server.hasArg("num")) { if (server.hasArg("num")) {
clientScan.select(server.arg("num").toInt()); clientScan.select(server.arg("num").toInt());
attack.stop(0); attack.stop(0);
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
} }
void setClientName(){ void setClientName() {
if(server.hasArg("id") && server.hasArg("name")) { if (server.hasArg("id") && server.hasArg("name")) {
nameList.add(clientScan.getClientMac(server.arg("id").toInt()),server.arg("name")); nameList.add(clientScan.getClientMac(server.arg("id").toInt()), server.arg("name"));
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
} }
//==========Attack========== //==========Attack==========
void sendAttackInfo(){ server.send( 200, "text/json", attack.getResults()); } void sendAttackInfo() {
server.send( 200, "text/json", attack.getResults());
}
void startAttack(){ void startAttack() {
if(server.hasArg("num")) { if (server.hasArg("num")) {
int _attackNum = server.arg("num").toInt(); int _attackNum = server.arg("num").toInt();
if(apScan.getFirstTarget() > -1 || _attackNum == 2){ if (apScan.getFirstTarget() > -1 || _attackNum == 2) {
attack.start(server.arg("num").toInt()); attack.start(server.arg("num").toInt());
server.send ( 200, "text/json", "true"); server.send ( 200, "text/json", "true");
}else server.send( 200, "text/json", "false"); } else server.send( 200, "text/json", "false");
} }
} }
void addSSID(){ void addSSID() {
ssidList.add(server.arg("name")); ssidList.add(server.arg("name"));
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
void cloneSSID(){ void cloneSSID() {
ssidList.addClone(server.arg("name")); ssidList.addClone(server.arg("name"));
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
void deleteSSID(){ void deleteSSID() {
ssidList.remove(server.arg("num").toInt()); ssidList.remove(server.arg("num").toInt());
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
void randomSSID(){ void randomSSID() {
ssidList._random(); ssidList._random();
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
void clearSSID(){ void clearSSID() {
ssidList.clear(); ssidList.clear();
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
void resetSSID(){ void resetSSID() {
ssidList.load(); ssidList.load();
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
void saveSSID(){ void saveSSID() {
ssidList.save(); ssidList.save();
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
//==========Settings========== void restartESP() {
void getSettings(){ server.send ( 200, "text/json", settings.get() ); } server.send( 200, "text/json", "true");
ESP.reset();
void saveSettings(){
if(server.hasArg("ssid")) settings.ssid = server.arg("ssid");
if(server.hasArg("ssidHidden")){
if(server.arg("ssidHidden") == "false") settings.ssidHidden = false;
else settings.ssidHidden = true;
}
if(server.hasArg("password")) settings.password = server.arg("password");
if(server.hasArg("apChannel")) settings.apChannel = server.arg("apChannel").toInt();
if(server.hasArg("ssidEnc")){
if(server.arg("ssidEnc") == "false") settings.attackEncrypted = false;
else settings.attackEncrypted = true;
}
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();
if(server.hasArg("apScanHidden")){
if(server.arg("apScanHidden") == "false") settings.apScanHidden = false;
else settings.apScanHidden = true;
}
settings.save();
server.send( 200, "text/json", "true" );
} }
void resetSettings(){ //==========Settings==========
void getSettings() {
server.send ( 200, "text/json", settings.get() );
}
void saveSettings() {
if (server.hasArg("ssid")) settings.ssid = server.arg("ssid");
if (server.hasArg("ssidHidden")) {
if (server.arg("ssidHidden") == "false") settings.ssidHidden = false;
else settings.ssidHidden = true;
}
if (server.hasArg("password")) settings.password = server.arg("password");
if (server.hasArg("apChannel")) {
if(server.arg("apChannel").toInt() >= 1 && server.arg("apChannel").toInt() <= 11){
settings.apChannel = server.arg("apChannel").toInt();
}
}
if (server.hasArg("ssidEnc")) {
if (server.arg("ssidEnc") == "false") settings.attackEncrypted = false;
else settings.attackEncrypted = true;
}
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();
if (server.hasArg("apScanHidden")) {
if (server.arg("apScanHidden") == "false") settings.apScanHidden = false;
else settings.apScanHidden = true;
}
if (server.hasArg("useLed")) {
if (server.arg("useLed") == "false") settings.useLed = false;
else settings.useLed = true;
attack.refreshLed();
}
settings.save();
server.send( 200, "text/json", "true" );
}
void resetSettings() {
settings.reset(); settings.reset();
server.send( 200, "text/json", "true" ); server.send( 200, "text/json", "true" );
} }
void deleteName(){ void deleteName() {
if(server.hasArg("num")) { if (server.hasArg("num")) {
int _num = server.arg("num").toInt(); int _num = server.arg("num").toInt();
nameList.remove(_num); nameList.remove(_num);
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
} }
void clearNameList(){ void clearNameList() {
nameList.clear(); nameList.clear();
server.send( 200, "text/json", "true" ); server.send( 200, "text/json", "true" );
} }
void editClientName(){ void editClientName() {
if(server.hasArg("id") && server.hasArg("name")) { if (server.hasArg("id") && server.hasArg("name")) {
nameList.edit(server.arg("id").toInt(),server.arg("name")); nameList.edit(server.arg("id").toInt(), server.arg("name"));
server.send( 200, "text/json", "true"); server.send( 200, "text/json", "true");
} }
} }

View File

@@ -20,6 +20,9 @@
<a href="clients.html">Clients</a> <a href="clients.html">Clients</a>
<a href="attack.html">Attack</a> <a href="attack.html">Attack</a>
<a href="settings.html">Settings</a> <a href="settings.html">Settings</a>
<ul class="nav right">
<a href="#" onclick="restartESP()">Restart</a>
<ul>
</nav> </nav>
<div id="content"> <div id="content">
<h1>Attack</h1> <h1>Attack</h1>
@@ -160,6 +163,12 @@
getResponse("resetSSID.json",getResults); getResponse("resetSSID.json",getResults);
} }
function restartESP(){
getResponse("restartESP.json", function(responseText){
if(responseText == "true") getData();
else alert("error");
});
}
getResults(); getResults();
resultInterval = setInterval(getResults,3000); resultInterval = setInterval(getResults,3000);

View File

@@ -26,6 +26,9 @@
<a href="clients.html">Clients</a> <a href="clients.html">Clients</a>
<a href="attack.html">Attack</a> <a href="attack.html">Attack</a>
<a href="settings.html">Settings</a> <a href="settings.html">Settings</a>
<ul class="nav right">
<a href="#" onclick="restartESP()">Restart</a>
<ul>
</nav> </nav>
<div id="content"> <div id="content">
<h1>Scan for client devices</h1> <h1>Scan for client devices</h1>
@@ -139,10 +142,17 @@
} }
} }
function restartESP(){
getResponse("restartESP.json", function(responseText){
if(responseText == "true") getData();
else alert("error");
});
}
getResponse("ClientScanTime.json",function(responseText){ getResponse("ClientScanTime.json",function(responseText){
scanTime.value = responseText; scanTime.value = responseText;
}); });
getResults(); getResults();
</script> </script>
</html> </html>

View File

@@ -34,6 +34,9 @@
<a href="clients.html">Clients</a> <a href="clients.html">Clients</a>
<a href="attack.html">Attack</a> <a href="attack.html">Attack</a>
<a href="settings.html">Settings</a> <a href="settings.html">Settings</a>
<ul class="nav right">
<a href="#" onclick="restartESP()">Restart</a>
<ul>
</nav> </nav>
<div id="content"> <div id="content">
<h1>Scan for WiFi access points</h1> <h1>Scan for WiFi access points</h1>
@@ -154,6 +157,13 @@
}); });
} }
function restartESP(){
getResponse("restartESP.json", function(responseText){
if(responseText == "true") getData();
else alert("error");
});
}
getResults(); getResults();
setInterval(function(){ setInterval(function(){

View File

@@ -25,6 +25,9 @@
<a href="clients.html">Clients</a> <a href="clients.html">Clients</a>
<a href="attack.html">Attack</a> <a href="attack.html">Attack</a>
<a href="settings.html">Settings</a> <a href="settings.html">Settings</a>
<ul class="right">
<a href="#" onclick="restartESP()">Restart</a>
<ul>
</nav> </nav>
<div id="content"> <div id="content">
<h1>Settings</h1> <h1>Settings</h1>
@@ -73,6 +76,10 @@
<input type="checkbox" name="ssidEnc" id="ssidEnc" value="false"> <input type="checkbox" name="ssidEnc" id="ssidEnc" value="false">
<br /> <br />
<label for="useLed">Use LED:</label>
<input type="checkbox" name="useLed" id="useLed" value="false">
<br />
<label for="deauthReason">deauth reason:</label> <label for="deauthReason">deauth reason:</label>
<input type="number" id="deauthReason" min="1" max="45"> <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> <p class="small">reason codes: <a target="_blank" href="http://www.aboutcher.co.uk/2012/07/linux-wifi-deauthenticated-reason-codes/">click</a></p>
@@ -82,7 +89,7 @@
<p class="small">only for deauth attack - may cause instability!</p> <p class="small">only for deauth attack - may cause instability!</p>
<br /> <br />
<br /> <br />
<button class="warnBtn" onclick="resetSettings()">reset</button> <button onclick="saveSettings()">save</button><p class="small" id="saved"></p> <button class="warnBtn" onclick="resetSettings()">reset</button> <button onclick="saveSettings()">save</button><p class="small" id="saved"></p><br \>
<br /> <br />
<br /> <br />
@@ -112,6 +119,7 @@
var saved = document.getElementById('saved'); var saved = document.getElementById('saved');
var clientNames = document.getElementById('clientNames'); var clientNames = document.getElementById('clientNames');
var ssidEnc = document.getElementById('ssidEnc'); var ssidEnc = document.getElementById('ssidEnc');
var useLed = document.getElementById('useLed');
var res; var res;
function getData(){ function getData(){
@@ -128,6 +136,7 @@
deauthReason.value = res.deauthReason; deauthReason.value = res.deauthReason;
packetRate.value = res.attackPacketRate; packetRate.value = res.attackPacketRate;
ssidEnc.checked = res.attackEncrypted; ssidEnc.checked = res.attackEncrypted;
useLed.checked = res.useLed;
clientNames.innerHTML = "Client Names "+res.nameList.length+"/50"; clientNames.innerHTML = "Client Names "+res.nameList.length+"/50";
@@ -179,6 +188,7 @@
url += "&deauthReason="+deauthReason.value; url += "&deauthReason="+deauthReason.value;
url += "&packetRate="+packetRate.value; url += "&packetRate="+packetRate.value;
url += "&ssidEnc="+ssidEnc.checked; url += "&ssidEnc="+ssidEnc.checked;
url += "&useLed="+useLed.checked;
getResponse(url, function(responseText){ getResponse(url, function(responseText){
if(responseText == "true"){ if(responseText == "true"){
@@ -206,6 +216,13 @@
}); });
} }
function restartESP(){
getResponse("restartESP.json", function(responseText){
if(responseText == "true") getData();
else alert("error");
});
}
getData(); getData();
</script> </script>
</html> </html>