• Система автоматизации с открытым исходным кодом на базе 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 продаётся много задёшево под видом дешёвых логических анализаторов. Просто пишете свою прошивку для него и в путь.
 
Сверху Снизу