Wi-Fi радар для сбора MAC-адресов
Сегодня для отслеживания и анализа целевой аудитории, интернет-маркетологи используют не только данные из счетчиков посетителей, но и более продвинутые методы, например сбор MAC-адресов при помощи Wi-Fi сенсора.
Такое устройство можно разместить в кафе, гостинице, кинотеатре, чтобы собрать информацию о посетителях. Статистика показывает, что более 50% пользователей не отключают функцию Wi-Fi на своих смартфонах, что позволяет их отслеживать в режиме реального времени.
Зачем компании собирают MAC-адреса своих клиентов?
Сбор MAC-адресов мобильных устройств активно используется в маркетинге для формирования портрета клиента. Маркетолог выгружает список MAC-адресов в сервис Яндекс.Аудитории, и тем самым, создает сегмент обезличенных пользователей.
После добавления собранных MAC-адресов, сервис подбирает всю известную информацию о владельце устройства (интересы, геолокации, поведение) и формирует список анонимных ID для настройки рекламных кампаний в агрегаторах Яндекса (Директ, Дисплей). В дальнейшем этот сегмент используется для таргетирования рекламных предложений.
Мониторинг MAC-адресов в беспроводных сетях может быть незаконным, особенно в сетях, которыми вы не владеете. Пожалуйста, ознакомьтесь с законами вашей страны. Материал опубликован в ознакомительных целях.
Запуск Wi-Fi радара
Скрипт, который будет работать на базе нашего сенсора, вычисляет количество людей поблизости, используя смартфоны в качестве прокси. Телефоны находящиеся в зоне покрытия определяются на основе фрейм-запросов, так называемых probe request.
Возможное использование howmanypeoplearearound включает в себя: мониторинг окружения и пешеходного движения, сбор MAC-адресов. Вероятно, он был разработан для использования на миниатюрных устройствах, например Raspberry Pi etc.
Подготовка рабочей среды
Для запуска скрипта нам потребуется:
Любая антенна с поддержкой Monitor Mode (режима мониторинга):
Установка Python 3
sudo apt-get install python3
Python и установщик пакетов pip, должен быть установлен на вашем компьютере. Я использую Ubuntu 18.04, в которой Python уже предустановлен и не хватает только установщика pip:
Установка pip для Python 2.7
sudo apt install python-pip
Установка pip для Python 3
sudo apt install python3-pip
Установка tshark
Если на компьютере не установлен Wireshark, выполните:
sudo add-apt-repository ppa:wireshark-dev/stable sudo apt-get update sudo apt-get install wireshark
Если установлен, выполните команду для установки tshark:
sudo apt-get install tshark
Затем обновите его для запуска без получения полномочий root:
sudo dpkg-reconfigure wireshark-common
sudo usermod -a -G wireshark $ sudo newgrp wireshark
Установка скрипта
pip install howmanypeoplearearound
В новых версиях Ubuntu при установке pip могут возникнуть проблемы, как решить проблему Unable to locate package, читайте по ссылке.
Мониторинг устройств
Подключаем антенну к компьютеру и выполняем команду:
Выбираем адаптер для сканирования, кладем рядом с собой устройство, а лучше несколько, с включенной функцией Wi-Fi:
Ожидаем окончания операции:
Скрипт определил поблизости 6 мобильных устройств. Но, где найти или как вывести MAC-адреса?
Чтобы выгрузить их, воспользуемся флагами из справки, например:
howmanypeoplearearound -o test.json -s 100
После окончания сканирования, находим в домашней директории файл test.json
Результат сбора MAC-адресов
Точность сканирования
Точность сканирования устройств зависит от того, как часто смартфон проверяет связь с сетью Wi-Fi (что происходит каждые 1–10 минут, если Wi-Fi не отключен).
Ошибки при запуске
Если не работают команды или встречается ошибка «command not found», выполните:
python3 -m pip install --upgrade --no-cache-dir howmanypeoplearearound
Сбор mac адресов wifi своими руками
сеть
+7 (499) 322-96-38
Wi-Fi радар сделает проходящих мимо людей вашими клиентами.
Сбор базы клиентов настройка рекламы только на ваших клиентов.
Или догнать людей рекламой в интернете после посещения вашей промо-точки.
И все хотят на этом заработать, а мы поделимся как это сделать самим .
Будем использовать:
WiFi адаптер с режимом монитора TL-WN722N
Существует несколько возможных USB WiFi адаптеров, которые поддерживают режим монитора. Лично я предпочитаю TL-WN722N или TN722N, который стоит всего ~ 10 долларов и прекрасно работает с каждой моделью Raspberry Pi.
Про настройку Rasspberry Pi рассказывать не будем об этом и так весь интернет пестрит.
Установка
Качаем образ Raspbian Buster Lite
Проверяем наличие модуля wifi в нашем случае это wlxf81a670f1236
pi@raspberrypi:~ $ ifconfig
enxb827eb9f99f0: flags=4163 mtu 1500
inet 192.168.1.40 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::b8e9:2be2:cf04:6ef3 prefixlen 64 scopeid 0x20
ether b8:27:eb:9f:99:f0 txqueuelen 1000 (Ethernet)
RX packets 110 bytes 26029 (25.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 66 bytes 10826 (10.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlxf81a670f1236: flags=4099 mtu 1500
ether f8:1a:67:0f:12:36 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
pi@raspberrypi:~ $ iw dev
phy#0
Interface wlxf81a670f1236
ifindex 3
wdev 0x1
addr f8:1a:67:0f:12:36
type managed
txpower 20.00 dBm
Добавляем в директории /etc/network/ в файл interfaces
allow-hotplug wlxf81a670f1236
iface wlxf81a670f1236 inet manual
pre-up iw wlxf81a670f1236 interface add mon0 type monitor
pre-up iw dev wlxf81a670f1236 del
pre-up ifconfig mon0 up
Перезагружаем Raspberry PI
Получили устройство mon0 в режиме мониторинга
pi@raspberrypi:~ $ iw dev
phy#0
Interface mon0
ifindex 4
wdev 0x2
addr f8:1a:67:0f:12:36
type monitor
channel 1 (2412 MHz), width: 20 MHz (no HT), center1: 2412 MHz
txpower 20.00 dBm
Устанавливаем Python3
sudo apt-get install -y python3
Устанавливаем tshark
sudo apt-get install -y tshark
Then update it so it can be run as non-root:
Устанавливаем wireshark
sudo apt-get install -y wireshark
sudo dpkg-reconfigure wireshark-common
Выбираем (select YES)
Затем обновите его, чтобы его можно было запускать без полномочий root:
sudo usermod -a -G wireshark $USER
Вам нужно будет выйти и снова войти в систему, чтобы изменения вступили в силу.
Устанавливаем дополнительный пакет howmanypeoplearearound для python3
sudo pip install howmanypeoplearearound
Первый запуск
pi@raspberrypi:~ $ howmanypeoplearearound
Ошибки при запуске
Если не работают команды или встречается ошибка «command not found», выполните:
python3 -m pip install —upgrade —no-cache-dir howmanypeoplearearound
Программа спросит с каким адапрером бедем работать
Вывод работы программы на экран
Specify WiFi adapter (use ifconfig to determine): wlan1
Using wlan1 adapter and scanning for 60 seconds.
[==================================================] 100% 0s left
There are about 5 people around.
Запускаем howmanypeoplearearound для работы с конкретным wifi адаптером и записью в файл test.json
howmanypeoplearearound -o test.json -a mon0
Using mon0 adapter and scanning for 60 seconds.
[==================================================] 100% 0s left
There are about 9 people around.
В комплекте идет анализатор который генерит index.html
pi@raspberrypi:~ $ howmanypeoplearearound —analyze test.json
Wrote index.html
Open browser to http://localhost:8001
Type Ctl+C to exit
Но бывают проблемы. Не открываеться через браузер.
В папке /home/pi/.local/lib/python3.7/site-packages/howmanypeoplearearound в файле analysis.py
httpd = HTTPServer((‘localhost’, port), SimpleHTTPRequestHandler)
изменить на
httpd = HTTPServer((», port), SimpleHTTPRequestHandler)
В процессе работы наткнулся на проблему что не все телефоны попадают в список.
Помогло наличие дополнительных комманд
pi@raspberrypi:~ $ howmanypeoplearearound -o test.json -a mon0 -v
Получили вывод на экран
20:e8:82:92:85:ba zte corporation False
74:2f:68:3a:2f:cf AzureWave Technology Inc. False
26:2f:68:3a:2f:cf Not in OUI False
84:c9:b2:0d:86:00 D-Link International False
78:31:2b:e9:dc:f8 zte corporation False
5c:77:76:c8:XX:XX TCT mobile ltd False
d4:ca:6d:84:32:4f Routerboard.com False
f4:b8:a7:de:ed:09 zte corporation False
2c:d0:5a:c6:e8:f2 Liteon Technology Corporation False
a0:0b:ba:fe:9a:b1 SAMSUNG ELECTRO MECHANICS CO., LTD. False
10:01:22:00:3a:01 Not in OUI False
20:55:31:1f:ee:66 Samsung Electronics Co.,Ltd True
a4:e9:75:1e:b6:df Apple, Inc. True
60:6c:66:40:f0:6f Intel Corporate False
a4:50:46:c6:58:ca Xiaomi Communications Co Ltd True
6c:00:6b:f2:33:89 Samsung Electronics Co.,Ltd True
80:35:c1:54:00:d9 Xiaomi Communications Co Ltd True
cc:4b:73:59:20:7e AMPAK Technology, Inc. False
d4:ca:6d:63:43:a3 Routerboard.com False
60:ab:67:ba:e9:00 Xiaomi Communications Co Ltd True
cc:03:fa:88:12:cb Technicolor CH USA Inc. False
b0:52:16:14:c1:95 Hon Hai Precision Ind. Co.,Ltd. False
00:b5:d0:f5:e6:45 Samsung Electronics Co.,Ltd True
e4:77:23:f1:99:3c zte corporation False
4c:4e:03:ce:XX:XX TCT mobile ltd False
00:f4:8d:94:7c:53 Liteon Technology Corporation False
4c:cc:6a:ae:71:01 Micro-Star INTL CO., LTD. False
[
«company»: «Samsung Electronics Co.,Ltd»,
«rssi»: -89.0,
«mac»: «20:55:31:1f:ee:66»
>,
«company»: «Apple, Inc.»,
«rssi»: -78.0,
«mac»: «a4:e9:75:1e:b6:df»
>,
«company»: «Xiaomi Communications Co Ltd»,
«rssi»: -81.1875,
«mac»: «a4:50:46:c6:58:ca»
>,
«company»: «Samsung Electronics Co.,Ltd»,
«rssi»: -88.0,
«mac»: «6c:00:6b:f2:33:89»
>,
«company»: «Xiaomi Communications Co Ltd»,
«rssi»: -78.14285714285714,
«mac»: «80:35:c1:54:00:d9»
>,
«company»: «Xiaomi Communications Co Ltd»,
«rssi»: -76.125,
«mac»: «60:ab:67:ba:e9:00»
>,
«company»: «Samsung Electronics Co.,Ltd»,
«rssi»: -86.8,
«mac»: «00:b5:d0:f5:e6:45»
>
]
Как изменить параметр False на True
Так как выделенные mac адреса точно рабочие
5c:77:76:c8:XX:XX TCT mobile ltd False
4c:4e:03:ce:XX:XX TCT mobile ltd False
В файле есть список компаний разрешенных на обработку
/home/pi/.local/lib/python3.7/site-packages/howmanypeoplearearound/__main__.py
cellphone = [
‘Motorola Mobility LLC, a Lenovo Company’,
‘GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD’,
‘Huawei Symantec Technologies Co.,Ltd.’,
‘Microsoft’,
‘HTC Corporation’,
‘Samsung Electronics Co.,Ltd’,
‘SAMSUNG ELECTRO-MECHANICS(THAILAND)’,
‘BlackBerry RTS’,
‘LG ELECTRONICS INC’,
‘Apple, Inc.’,
‘LG Electronics’,
‘OnePlus Tech (Shenzhen) Ltd’,
‘TCT mobile ltd’,
‘Xiaomi Communications Co Ltd’,
‘LG Electronics (Mobile Communications)’]
Мы добавили не достающую TCT mobile ltd
Правильность написания из файла
http://standards-oui.ieee.org/oui/oui.txt
Так же есть еще возможности по добавлению своих mac адресов
howmanypeoplearearound —targetmacs macs.txt
И macs.txt:
1A:DC:5C:8E:15:7B
Но на этом Мы не остановились, больно много интересного вокруг этой темы.
И так во первых как заставить работать данный скрипт постоянно и не выводить на экран никакой информации, да еще писать в указанное место.
nohup /usr/bin/python3 /home/pi/.local/bin/howmanypeoplearearound -o /home/pi/test.json -a mon0 —loop >/dev/null 2>/dev/null &
Но все равно чегото не хватает.
jq-for-parsing-json поможет нам в решении данной задачи.
wget https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz
tar xfvz jq-1.5.tar.gz
cd jq-1.5
./configure && make && sudo make install
Данные запросы помогут нам получить данные в нужных форматах
Получим данные для записи в MySQL
Или просто списком запишем в файл
cat test.json | jq -r ‘.cellphones[] | «\(.mac)»‘ > mac.txt
Ну и надо как-то забирать информацию
sudo pip install http
nohup /usr/bin/python3 -m http.server 8000 —directory /home/pi/ >/dev/null 2>/dev/null &
Удачи Всем, если придумали что то еще пишите нам на почту. Мы повесим как продолжение от вашего имени.