Wi-Fi адаптер через OTG

Идея перевести сетевую карту телефона в режим монитора разрушилась по причине собственной наивности и незнания элементарной информации о том, что подавляющее большинство мобильных сетевых карт этот самый режим монитора и не поддерживают.
Идея реализации задумки с помощью внешнего беспроводного Wi-Fi адаптера или «свистка», поддерживающего желанный режим монитора, рушилась десятки раз из-за новых и новых ошибок и потери веры в то, что это вообще возможно, но переросла в данную статью.
Итак, как подключить внешний Wi-Fi адаптер к устройству на Android или бег с препятствиями на дистанции «вставил — netcfg wlan0 up»:
Должно быть в наличии:
- Телефон на Android
- Поддержка OTG и сам OTG
- Terminal Emulator
- ROOT
- Исходники ядра
FAQ — структура выглядит так:
- Samsung GT-P5100 Galaxy Tab 2 10.1, Андроид 4.2.2
- OTG «30-pin — USB»
- ROOT
- Исходники стокового ядра 3.0.31-1919150 с сайта Самсунг
- Адаптер TP-LINK TL-WN722N на чипсете AR9271
- ath9k_htc/htc_9271.fw
- Дистрибутив Ubuntu 15.04 в VMware
- android-tools-adb
I. Старт
Первым делом необходимо добыть фирмварь вашего адаптера. Вставляю адаптер в компьютер и выполняю команду dmesg . Нахожу:
Где слово правее слова driver — искомая информация. У меня это — ath9k_htc. Гуглю для него firmware. Качаю. Закидываю .fw-файл на телефон в /system/etc/firmware
Затем устанавливаю ADB:
apt-get install android-tools-adb
Третьим этапом качаю тулчейн (компилятор под ARM) отсюда. Там большой архив, мне нужна лишь папка android-platform_prebuilt-android-sdk-adt_r20-0-ga4062cc.zip\android-platform_prebuilt-a4062cc\linux-x86\toolchain\arm-eabi-4.4.3, которую я распаковываю в произвольное место.
II. Разгон
Для начала пишу терминале:
Затем перехожу в терминале в каталог с исходниками ядра, загруженными ранее, пишу
make help и получаю тучу информации, среди которой нужно найти нечто, заканчивающееся на _defconfig, у меня это:
И в завершении запускаю графическую конфигурацию ядра:
Появляется вот такое окно:
Продвигаюсь по маршрутам:
-
Networking support → Wireless
Спускаюсь к Generic IEEE 802.11 Networking stack (mac80211) и нажимаю на пробел, наблюдая появление значка М перед этим пунктом

Сохраняю. Возвращаюсь в терминал, а если вы его закрыли, то в и каталог с исходниками тоже, и выполняю сначала make modules_prepare , а следом просто make . Результат потребует ожидания. Мой итоговый набор:
Потребуются модули (.ko-файлы), включающие слово ath и mac80211.ko. Переношу их на телефон.
Можно использовать adb, работая через компьютер, а можно не использовать и работать через терминал телефона, печатая команды пальцами по экрану. Я выбрал adb.
Напомню, как он работает. Подключаю телефон через USB (отладка, естественно, включена) и выполняю:
adb start-server
adb shell
su
Я в телефоне и под рутом.
Смотрю, какие модули уже есть командой lsmod и выгружаю их все, если это возможно, командой rmmod имямодуля
Затем перехожу в каталог с вышеперечисленными модулями:
cd /sdcard/ваш путь/
Можно убедиться в их наличии командой ls .
Загружаю их командой insmod имямодуля в такой и только такой последовательности (иначе просто не загрузится, выдавая ошибку):
ath.ko
ath9k_hw.ko
ath9k_common.ko
mac80211.ko
ath9k_htc.ko
III. Препятствия
В этом и вся соль, без которой статья была бы слишком простой.
1. Версии
Естественно, первая ошибка возникает на первом этапе.
Смотрю, что скажет об этом буфер сообщений ядра, выполнив команду dmesg :
Не совпадают версии. 3.0.31 не есть 3.0.31-1919150.
Открываю тот самый Makefile в исходниках ядра и в самом верху файла нахожу:
И сохраняю.
Заключительный этап пройдет в каталоге /include/config, где в файле kernel.release я поменяю 3.0.31 на 3.0.31-1919150
Снова make modules_prepare , make и далее по предыдущему пункту.
2. ewma
Загружая mac80211.ko снова имею ошибку, о которой dmesg скажет следующее:
Чудом прочитав на одном из англоязычных форумов опасное, но единственное в интернете, «решение», я перехожу в /net/mac80211/ и в файлах rx.c и sta_info.c и просто удаляю [либо комментирую (//)] строки ewma_add(&sta->avg_signal, -status->signal); и ewma_init(&sta->avg_signal, 1024, 8); соответственно.

Опять перекомпилирую модули и двигаюсь дальше.
3. Светодиод
При загрузке ath9k_htc.ko и mac80211.ko очередные ошибки, у mac80211.ko это:
А у ath9k_htc.ko это:
Если ieee80211_-ошибки от ath9k_htc.ko это потому что я пытаюсь его загрузить до mac80211.ko, то led_-ошибки от обоих модулей от того, что телефон не понимает, что делать со светодиодом на моем адаптере. Тут два варианта развития событий.
В первом просто убирается в графической конфигурации ядра значок [*] напротив
Networking support → Wireless → Enable LED triggers и Device Drivers → LED Support.
А во втором этот самый значок заморожен и снять его нельзя. Это значит, что при выборе моего адаптера, автоматически выбирается «поддержка» светодиода, убрать которую нельзя. Конечно же, это мой случай:


Кнопка помощи по Device Drivers → LED Support выводит следующую информацию по разделу:
и сохраняю. Теперь можно снимать галочки:

Здесь и вовсе исчез пункт:
Опять и снова перекомпиляция, новые модули и т.п.
Вуаля. Все модули загружены. Выключаю Wi-Fi на телефоне и подключаю адаптер. Но светодиод на нем, как вы уже догадались, работать не будет. Оно и не нужно.
4. Версия firmware
Просто качаем другой фирмварь, но уже требуемой версии, и кладем его вместо прошлого.
IV. Финиш
Теперь никаких проблем быть не должно. Выключаю родной Wi-Fi, все модули загружены, фирмварь нужной версии. Вставляю адаптер и netcfg впервые приносит счастье. Устанавливаю для появившегося сетевого интерфейса режим монитора и поднимаю его. Успех!

Ну а как и зачем зачастую используется режим монитора, вы и так все знаете. Спасибо за внимание!
D-Link WiFi-адаптер через OTG
Я не могу утверждать однозначно, сможет ли работать программа reaver со встроенным wifi адаптером.
Легче попробовать и узнать ответ на вопрос ))
Для работы с внешним адаптером нужно будет найти и установить ядро Android для твоего девайса. В этом ядре должна быть поддержка твоего адаптера. В этом случае, на твой девайс можно установить не только reaver, но и весь комплект программ для аудита wifi сетей.
- Router Keygen
- AndroDumper
- WPSApp Pro
- Wps Wpa Tester
- WiFi Warden
- Wifi WPS Plus
- Wps Wpa Tester Premium
VitalijKo
- 02.07.2019
- #5
Я не могу утверждать однозначно, сможет ли работать программа reaver со встроенным wifi адаптером.
Легче попробовать и узнать ответ на вопрос ))
Для работы с внешним адаптером нужно будет найти и установить ядро Android для твоего девайса. В этом ядре должна быть поддержка твоего адаптера. В этом случае, на твой девайс можно установить не только reaver, но и весь комплект программ для аудита wifi сетей.
Телефон на Android как Wi-Fi адаптер для компьютера
Сегодня в комментариях мне задали очень интересный вопрос. Можно ли в качестве Wi-Fi адаптера для компьютера использовать телефон на Android. Чтобы телефон, или планшет был подключен к Wi-Fi сети, и в режиме модема по USB кабелю передавал интернет на стационарный компьютер. У которого нет Wi-Fi адаптера и соответственно нет возможности напрямую подключатся к беспроводным сетям. И как оказалось – можно.
У меня почему-то никогда не было такой необходимости, и я не интересовался этим вопросом. Еще вроде со второй версии, на Android появился режим модема. И практически все телефоны и планшеты могут раздавать интернет на другие устройства по Wi-Fi, Bluetooth и по USB кабелю. Но как оказалось, Android устройства могут делится не только мобильным интернетом (EDGE, 3G, 4G) , но и Wi-Fi. А это значит, что с телефона можно сделать полноценный Wi-Fi адаптер для ПК.

Это очень полезная функция. Не редко бывает ситуация, когда после установки роутера, или покупки ПК нет возможности протянуть сетевой кабель к компьютеру. А с помощью этой функции можно подключить его к интернету. Пускай временно, пока вы не купите обычный Wi-Fi адаптер (что это такое я писал здесь, а о том как выбрать адаптер, можете почитать тут).
Я все настроил и проверил на телефоне Samsung Galaxy J5. Нашел только такой. Понимаю, что на других телефонах и планшетах, с другой версией Android и оболочкой, настройки могут немного отличатся. Но, думаю, не критично. Разберетесь. Или спросите в комментариях, если не сможете найти настройки.
Хочу еще добавить, что подключение к Wi-Fi сети через телефон работает очень стабильно и быстро. Интернет на компьютере «летает». В телефонах устанавливают хорошие беспроводные модули (не на всех, конечно) .
Подключаем компьютер к Wi-Fi сети через Android-устройство в роли адаптера
Сначала советую отключить мобильный интернет на своем телефоне. Просто отключите передачу данных через сотовую сеть. Это на всякий случай. Чтобы точно знать, что используется подключение по Wi-Fi.
Конечно же, ваш телефон должен быть подключен к Wi-Fi сети.

С помощью USB кабеля подключаем телефон к компьютеру. Он будет работать не только как адаптер, но еще и будет заражаться.

На телефоне заходим в настройки, в раздел «Подключения», дальше переходим в «Точка доступа и модем» и включаем «USB-модем» (общий доступ к интернет-подключению на этом телефоне) .

На компьютере сразу появится доступ к интернету через телефон.

Появится просто еще один сетевой адаптер. У меня Ethernet 4 (Remote NDIS based Internet Sharing Device) . У вас может быть другой. Это не важно.

Чтобы перестать использовать свой смартфон в качестве Wi-Fi приемника, просто отключите функцию «USB-модем» в настройках, или отключите телефон от компьютера.
Точно так же можно использовать и планшет на Android.
Надеюсь, эта статья вам пригодилась. Обязательно оставляйте в комментариях свои отзывы.
Подключиться к вай фай через внешний адаптер на андроид
Имеется внешний адаптер и андроид смарт с установленными модулями и прошивкой, при подключении определяется как wlan1, поиск сетей через iw работает, как подключиться если андроид кроме wlan0 ни с чем не работает?

Через udev делать симлинк wlan0
Не совсем понял. Udev в андройде вроде как нет, что значит делать симлинк?

Сетевой интерфейс это не файл, симлинк не создашь. Тут надо конфигурацию wpa_supplicant менять. Или удалить интегрированный wlan0, чтобы внешний стал wlan0.
Вот в этом и проблема) Удалить встроенный wlan0 можно только удалив встроенную сетевуху(отключив), но да же при анбинде драйвера(она удаляется это проверено) не удаляется phy0 — т.е. её сетевой интерфейс — а если подключить внешку даже если она станет wlan0 wpa_supplikant по какой то причине завершается(светодиод моргнет и все) в выводе dmesg — reseived control message stop for wpa_supplicant from pid 781(system/bin/wificond), т.е.работает это только когда одна сетевуха подключена-либо встройка либо внешка. Что примечательно — даже если юзать виртуалку(chroot точнее как в linux deploy) и подключать через местный wpa_supplicant — даже установив соединение(на роутере отображается как подключенное) трафик через него не идёт. Единственный способ подключения это когда работает встроенный интерфейс вай фая в андройде(я про индикатор в шторке сейчас) если подключаться без него — просто из терминала- ничего не работает.
Даже если просто-откинув все в сторону,юзая только встройку, подключаться к вай фай через терминал а не через встроенное меню — трафик не идет хотя интерфейс подключен.