• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

RTL WiFi sniffer

pvvx

Активный участник сообщества
Попытался сделать WiFi сниффер 1 канала с передачей в Wireshark на RTL871xAx...
Для вывода WiFi фреймов есть только UART. Для начала поставил вывод в UART на 3 Мегабита по DMA просто заголовков в текстовом виде, чтобы проверить монитором... Не успевает выводить даже заголовки. :(
Не успевает, даже если отключить включенный для теста увеличения нагрузки на канале ESP8266. Такая городская обстановка на канале :) Одни beacon-ы с округи не успевает выкидывать - прием на модуле RTL даже пришлось немного загубить. Если ставить фильтры по MAC, хотя-бы для теста с ESP8266, то всё равно через простые USB-UART не успеть слить пакеты, т.к. только внутренний трафик TCP уже более 1 МБайта/сек...
Есть у кого какие предложения, что можно прикрутить простое, чтобы сливало быстрее в комп? Неохота пропускать фреймы...
Может прикрутить WizNet типа W5500 ?
------
Блин, полез в WizNet, чтобы посмотреть стоит ли прикрутить, и опять попал на RTL - > WizNet module WizFi310 (RTL8711AM) :(
 
Последнее редактирование:

Алексей.

Active member
На esp32 я решал задачку проброса sip-овского rtp потока, голос и видео в двух направлениях, нужно было пробросить в ethernet.
С уартом у меня так и не получилось. На spi всё решилось без проблем. На макете провода от spi были 15-20см, spi работал на 12МГц, пробовал больше, получал ошибки на таких соплях.
 

pvvx

Активный участник сообщества
На esp32 я решал задачку проброса sip-овского rtp потока, голос и видео в двух направлениях, нужно было пробросить в ethernet.
С уартом у меня так и не получилось. На spi всё решилось без проблем. На макете провода от spi были 15-20см, spi работал на 12МГц, пробовал больше, получал ошибки на таких соплях.
Та просто не охота использовать RTL8195A - у него USB2.0 High-speed, а народ жадиться на это. Им лучше что прилепить рублей на пару тысч, вместо прибавки цены в 50..100 на сам модуль :)
SPI и QSPI не сбоит и на 83 МГц - тоже проверялось на соплях. Вот USB2.0 High-speed не тянет пару Arduino коннекторов (один китай-проводочек с черненькими штырьками - 2 коннектора - 480 Мбит/с не пашет, сбоит)...
"spi работал на 12МГц" - это всего то 1.2 МБайт/сек в пределе, а у ESP8266 с HT20 и то полезный UDP трафик за 1.6 МБайт/сек
 
Последнее редактирование:

Алексей.

Active member
Не понял, Вы не хотите использовать spi на 8711, а хотите использовать его hs-uart.
Так?
 

pvvx

Активный участник сообщества
Не понял, Вы не хотите использовать spi на 8711, а хотите использовать его hs-uart.
Так?
Через UART вообще ничего не потянет. Вывод в UART делал для примера.
У старшего RTL встроенный в сам чип USB2.0 с 480 Mb/s с PHY и он Host/Device.
Там единственное, что так руки и не дошли проверить, возможно не хватит скорости DMA при работе c SDRAM... шина узкая, тайминги у DDRAM плохие... C SRAM может и успеет на все 480 Mbit/s. Но у нас полоса PHY у WiFi всего 150 Mbit/s.
14 шт RTL8195AM в 14 разъемов USB - и все 14 каналов будет видно ;)
 
Последнее редактирование:

A_D

Active member
Как вариант конечно - чипы USB мосты от FTDI, к примеру http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT2232H.pdf можно использовать в качестве USB-FiFo Bus с приличной скоростью.
Но правда линий это требует не хило и синхронизацию возможно таки не удастся организовать (на плис пробовал с год назад, работал приём отлично, на передачу уже сил не хватило на верилоге написать, вот https://marsohod.org/11-blog/308-mars3-sync-fifo пример неплохой), по прерыванию выходит надо будет байты выплёвывать на шину (+ писать свою прогу-терминал, но тут на том же шарпе пишется на раз-два).

Правда цена на эти чипы не маленькая... и проще реально уже завести USB Device в RTL8195AM :)

ЗЫ. Всех с новым годом! ;)
 

pvvx

Активный участник сообщества
Правда цена на эти чипы не маленькая... и проще реально уже завести USB Device в RTL8195AM :)
Вот и получается, что сниффер не реально сделать на имеющихся (готовых) в продаже dev-board, кроме варианта Ameba c RTL8195AM.:(
Фильтры лучше в самом Wireshark выставлять, иначе выходит неполноценное решение...
Пока и забросил - нет сейчас времени на копание с дровами USB в RTL8195AM.
Стандартный пример, с описаниями, как включить сниффер есть в SDK в component\common\api\wifi\wifi_promisc.c и описывать нет смысла. Немного изменил его под свои условия, проверил работы масок, а нормальной реализации не сделать, пока не разобраны USB дрова. Скрипты и опции как включить вывод в Wireshark тоже есть - всё описано в инет...
Поглядел, что ESP8266 пропускает beacon-ы при сканировании и другие безобразия, на этом пока и забросил...
Вдруг сама Ameba даст вариант примера работы её USB дров с bulk, а то в нутре закрытых либ эти заголовки есть, а примеров как включить - нет... Места для буферов в RAM на приход пачкой ответов в некоторых WiFi посылках куча, должно справиться с потоком, что не сказать про варианты снифферов на ESP-32 - там явно не успевает ни как.
Стоит ещё подождать RTL871xBx со встроенными USB, а пока их тоже нет в доступной продаже.
Та и дело это попахивает коммерцией - готовые снифферы на все каналы дороже, чем пачка модулей RTL8195AM с разъемом USB и LDO на 3.3В.
"Для дома для семьи" и анализа пару каналов проще переписать какой роутер...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Подключил W5500. Взял скетч/либу Ethernet2 от Adafruit. Тормоз однако :)
Переписал пока только Arduino\libraries\Ethernet2\src\utility\w5500.cpp. Вышло побыстрее.
Надо переделывать саму либу дальше...
Пока вышел такой трансфер у TCP client socket:
Код:
===== Enter SRAM-Boot 1 ====
CPU CLK: 83333333 Hz, SOC FUNC EN: 0x20111157
SDR calibration: 00-11
Img Sign: RTKWin, Go @ 0x10006049
===== Enter Image 2 ====
Init Heap Region: 0x10003000[12288]
Init Heap Region: 0x10013060[380832]
Init Heap Region: 0x30000000[2097152]

Chip W5500 version: 04
Reg00: 00 c0 a8 01 01 ff ff ff 00 de ad be ef fe ed c0
Reg10: a8 01 07 00 00 00 00 00 00 07 d0 08 28 00 00 00
Reg20: 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 bf 00
Reg30: 00 00 00 00 00 00 00 78 25 04 00 00 00 00 00 00
connecting...
connected
tx 663552 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 657408 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 657408 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 659456 bytes/sec
tx 657408 bytes/sec
tx 659456 bytes/sec
...
Снимок57.gif
Если сервер, то примерно то-же самое:
Код:
===== Enter SRAM-Boot 1 ====
CPU CLK: 83333333 Hz, SOC FUNC EN: 0x20111157
SDR calibration: 00-11
Img Sign: RTKWin, Go @ 0x10006049
===== Enter Image 2 ====
Init Heap Region: 0x10003000[12288]
Init Heap Region: 0x10013a70[378256]
Init Heap Region: 0x30000000[2097152]
Chip W5500 version: 04
Reg00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Reg10: 00 00 00 00 00 00 00 00 00 07 d0 08 28 00 00 00
Reg20: 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 bf 00
Reg30: 00 00 00 00 00 00 00 78 25 04 00 00 00 00 00 00
Trying to get an IP address using DHCP
My IP address: 192.168.1.7
tx 0 bytes/sec
tx 30720 bytes/sec
tx 571392 bytes/sec
tx 573440 bytes/sec
tx 573440 bytes/sec
tx 573440 bytes/sec
tx 573440 bytes/sec
tx 571392 bytes/sec
tx 573440 bytes/sec
tx 573440 bytes/sec
tx 573440 bytes/sec
...
Единственное, что уже хорошо, что больше чем UART на дешевых USB-COM... Далее разгоню - буфер маловат на tx-сокет у данной либы - всего 2048 байта. Надо увеличивать, а то не передает по два полных пакета - гонит 2 TCP пакета 1460 + 588 байтами всего...
 
  • Like
Реакции: A_D

A_D

Active member
Круто!
А W5500 хоть и до 80 МГц SPI, но предполагаю, что если используется RTL8195 - то ещё бодрее будет работать внешний phy с MII/ RMII/RGMII, хотя в случае с W5500 - SPI конечно универсальный вариант и можно пробовать прикрутить к более младшим + позиционируется как low-cost.
 

pvvx

Активный участник сообщества
Круто!
А W5500 хоть и до 80 МГц SPI, но предполагаю, что если используется RTL8195 - то ещё бодрее будет работать внешний phy с MII/ RMII/RGMII, хотя в случае с W5500 - SPI конечно универсальный вариант и можно пробовать прикрутить к более младшим + позиционируется как low-cost.
Я пока на слабенькой SPI0 master - у неё всего [inline] spi_frequency((spi_t *)pSpiObj, 10416666);[/inline]
А другая, SPI1 с 40MHz, у RTL8711AM не точит. Ещё есть третья, от Flash. Она практически не нужна при работе...
Но это всё не имеет смысла, т.к. 10MBytes/s уже практически достаточно для предельного трансфера 100Mbit/s (предел PHY W5500).
Скетченная либа просто ужасна. Прерывания от W5500 не используются, буфера на sockets в её памяти распределены по 2 килобайта RX/TX. Задержки передач так-же не настроены, ну всё для Ардуино-любителей, куда там не полезещъ... :) Ломать надо полностью, но лень.
У RTL8195 буфера есть в 2 Мегабайта - всегда успеет сгладить пики, когда идут ответы на запросы у AP - они выпадают сразу кучкой, почти к десятку коротких пакетов на одиночный запрос и прут со всей дури PHY роутера - ну чтобы точно запрашивающий поймал ответ, но к каждому фрейму надо дописать заголовок перед отправкой - тут и возникает пик, который без буфера не протянет и ESP-32... А с 2 МБ всё будет ok...
Испытания W5500 проводил на этой недоделке (она типа пока совместима с верхним слоем скетчестроителей - переделан только драйвер SPI к W5500):
 

Вложения

Последнее редактирование:

pvvx

Активный участник сообщества
Сегодня уже лучше:
Снимок62.gif
Код:
CLK CPU         166666666 Hz
RAM heap        2470120 bytes
TCM heap        64768 bytes

Chip W5500 version: 04
Socket0 set RX/TX BufSize 16384/16384 bytes
Max rx/tx blk: 16384/16384 bytes

Chip W5500 version: 04
Common Register Block:
0x00: 00 c0 a8 01 01 ff ff ff 00 de ad be ef fe ed c0
0x10: a8 01 07 00 00 00 00 00 00 07 d0 08 28 00 00 00
0x20: 00 00 00 00 00 00 ff ff 00 00 00 00 00 00 bf 00
0x30: 00 00 00 00 00 00 00 78 25 04 00 00 00 00 00 00
connecting...
connected, TX buffer size 16384 bytes
tx 1603216 bytes/sec
tx 1583424 bytes/sec
tx 1595752 bytes/sec
tx 1578072 bytes/sec
tx 1587480 bytes/sec
tx 1602240 bytes/sec
tx 1576936 bytes/sec
tx 1591536 bytes/sec
...
 

pvvx

Активный участник сообщества
На сегодня, без глобальных переделок, на моей rtlDuino к RTL8710BN уже к 2.5 Mbytes/sec 10,5 Мбит пишет Fbench:
Снимок67.gif
Всё пропорционально скорости SPI. На RTL8710BN SPI до 31.5 МГц.
(Просто тестирую и отлаживаю понемногу свою первую на RTL8710BN версию Arduino, в принципе там уже всё, что было в серии "A" работает...).
20180111_075948sm.jpg
Надо переключаться на Hi Speed SPI канал RTL871xAx - там 40 MГц. Но его нет у RTL8711AM, а есть у RTL8195AM и RTL871xAF.
 
Последнее редактирование:

sparfenyuk

New member
Здравствуйте.
Я живу в частном доме, всего рядом есть штук 5 wifi сетей.
Запущен rtl8710 в режиме promisc, рядом мобильный телефон lenovo k10a40 раздает сеть.
На каждый принятый пакет callback функция пишет в порт. Когда телефон рядом, приходит примерно по 3 пакета в секунду. Экспериментально телефон отодвигается по жилому помещению с целью анализа дальности работы.
Дальность "слышимости" мобильного телефона составляет всего 4-5 метра. Как и роутера раздающего интернет.
Очень мало.
Нет ли возможности повысить чувствительность приема?
 

rst

Member
Надо переключаться на Hi Speed SPI канал RTL871xAx - там 40 MГц. Но его нет у RTL8711AM, а есть у RTL8195AM и RTL871xAF.
Просто и дешёво вытащить поток из чипа можно через параллельную шину (если конечно ног хватит). Прицепить эту шину можно к GPIF CY7C68013A, а с неё на комп.
Интерфейс у неё удобнее чем у FTDI-ных USB-FIFO, так как он - user-definable.
И готовых коробочек с CY7C68013A продаётся много задёшево под видом дешёвых логических анализаторов. Просто пишете свою прошивку для него и в путь.
 
Сверху Снизу