• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Сниффер на ESP8266

me21

New member
Здравствуйте!

Начинаю работу с ESP8266. Пытаюсь собрать простейший пример сниффера. Брал отсюда. Собирал с помощью esp-open-sdk, версия SDK 1.3.0. Полученные файлы 0x00000.bin и 0x40000.bin залил в ESP. Судя по отладочному выводу, прошивка работает и раз в 5 секунд переключает канал на следующий, но ни один пакет поймать не удалось (как я понял, на самом деле по указателю buf передаётся структура, а не массив байт, но хоть какой-то вывод из обработчика перехваченного пакета должен быть).

В той же комнате работает роутер (в режиме g/n WPA2), так что пакеты должны быть. Пробовал переводить роутер в режим b/g без шифрования, результат нулевой.

В чём может быть ошибка? Какой может быть минимально рабочий пример сниффера?

Вот большая часть исходного кода (может быть, получится прямо с одного взгляда найти что-то не то):
Код:
#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#include "user_config.h"
#include "user_interface.h"
#include "driver/uart.h"

#define user_procTaskPrio  0
#define user_procTaskQueueLen  1
os_event_t  user_procTaskQueue[user_procTaskQueueLen];
static volatile os_timer_t channelHop_timer;

static void loop(os_event_t *events);
static void promisc_cb(uint8 *buf, uint16 len);

#define printmac(buf, i) os_printf("\t%02X:%02X:%02X:%02X:%02X:%02X", buf[i+0], buf[i+1], buf[i+2], \
  buf[i+3], buf[i+4], buf[i+5])

void channelHop(void *arg)
{
  // 1 - 13 channel hopping
  uint8 new_channel = wifi_get_channel() % 12 + 1;
  os_printf("** hop to %d **\n", new_channel);
  wifi_set_channel(new_channel);
}

static void ICACHE_FLASH_ATTR
promisc_cb(uint8 *buf, uint16 len)
{
  os_printf("-> %3d: %d", wifi_get_channel(), len);
  printmac(buf,  4);
  printmac(buf, 10);
  printmac(buf, 16);
  os_printf("\n");
}

//Main code function
static void ICACHE_FLASH_ATTR
loop(os_event_t *events)
{
  os_delay_us(10);
}

//Init function
void ICACHE_FLASH_ATTR
user_init()
{
  uart_init(115200, 115200);
  os_delay_us(100);

  uart0_sendStr("*** Monitor mode test ***\r\n");
 
  os_printf(" -> Set opmode ... ");
  wifi_set_opmode( 0x1 );
  os_printf("done.\n");

  os_printf(" -> Promisc mode setup ... ");
  wifi_set_promiscuous_rx_cb(promisc_cb);
  wifi_promiscuous_enable(1);
  os_printf("done.\n");

  os_printf(" -> Timer setup ... ");
  os_timer_disarm(&channelHop_timer);
  os_timer_setfn(&channelHop_timer, (os_timer_func_t *) channelHop, NULL);
  os_timer_arm(&channelHop_timer, CHANNEL_HOP_INTERVAL, 1);
  os_printf("done.\n");
 
  //Start os task
  system_os_task(loop, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen);

  os_printf(" -> Init finished!\n\n");
}
 

me21

New member
Обратился к Espressif, они прислали пример сниффера, работающего с SDK 1.3.0, на почту.
 
Сверху Снизу