• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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, на почту.
 
Сверху Снизу