Во-первых, есть кое-что, о чем вы должны знать при попытке передать необработанные кадры 802.12 - драйвер устройства должен поддерживать внедрение пакетов.
Вы упомянули режим монитора, который на высоком уровне является эквивалентом возможности впрыска, который не является «режимом», а именно возможностью / функцией. Я говорю это потому, что некоторые драйверы устройств 892.11 в Linux:
- Поддержка режима монитора и инъекции кадра
- Поддержка режима монитора и не вставки кадров
- Ни поддержки
Я не знаю какого-либо простого способа проверить, поддерживает ли драйвер инъекцию кадра, кроме попытки инъекции кадра и обнюхивания воздуха на другом устройстве, чтобы убедиться, что он был замечен.
Режим монитора обычно легко проверить, используя sudo wlan0 set monitor
и просмотрев код возврата и / или вывод.
Прошло несколько лет с тех пор, как я работал над этим, но в то время очень немногие устройства поддерживали режим монитора и внедрение кадров «из коробки». Многие поддерживали только режим монитора с модифицированной версией поставщика или драйвера ядра.
Убедитесь, что на вашем устройстве есть драйвер, полностью поддерживающий оба варианта. Такого рода задачи (мониторинг кадров и внедрение) обычны для тестировщиков проникновения, которые склонны использовать Kali Linux, который на самом деле представляет собой просто дистрибутив Ubuntu с кучей «взломанных» инструментов и (модифицированных) драйверов устройств 802.11, предварительно загруженных и находящихся в его репозиториях. Часто вы можете сэкономить время на поиске хорошо поддерживаемой карты, используя поисковую систему, чтобы найти устройство и драйвер, рекомендуемые для пользователей Kali.
Я раскрываю эту возможность мониторинга / внедрения напрямую, потому что, когда я впервые работал над подобным проектом несколько лет назад, мне нужно было использовать исправленную версию официального драйвера ядра для поддержки режима монитора - это был набор микросхем rtl8812au. В то время я сделал неверное предположение, что поддержка режима монитора в драйвере подразумевает полную поддержку впрыска. Я два дня бился головой о стену, убеждаясь, что мои фреймы неправильно построены в моем приложении, из-за чего фреймы не уходили с карты. Оказалось, что мне нужна была более свежая ветка драйвера, которую я использовал, чтобы получить полную поддержку инъекций. . Этот драйвер, в частности, теперь поддерживает как режим монитора, так и внедрение кадров. Самым неприятным в диагностике этой проблемы было то, что я не получал никаких ошибок из системных вызовов или в сообщениях ядра при попытке передать кадры - они просто незаметно отбрасывались где-то, предположительно в драйвере.
На ваш главный вопрос о том, как это сделать, ответ почти наверняка будет libpcap, если вы пишете свое приложение. в C / C ++, поскольку libpcap предоставляет не только API захвата пакетов, но также API внедрения пакетов
Если вы делаете это на Python, scapy - отличный вариант. Преимущество Python / scapy в том, что
- Код на Python писать намного быстрее, чем на C
- scapy предоставляет значительное количество классов, которые можно использовать для интуитивно понятного создания кадра слой за слоем.
- Поскольку слои реализованы как классы, вы также можете расширять и «регистрировать» существующие классы, чтобы упростить создание определенных кадров (или синтаксический анализ при получении).
Вы можете сделать это на прямом C, используя API сокетов UNIX напрямую с необработанными сокетами, но вам придется иметь дело с вещами, которые libpcap существует для абстрагирования от вас, например, с базовыми системными вызовами, которые могут потребоваться при передаче сырых кадров, помимо стандартные звонки socket()
, send()
, recv()
. Я предполагаю, что есть несколько ioctl
вызовов, которые могут вам понадобиться, по крайней мере, специфичных для подсистемы / инфраструктуры ядра 802.11x, и эти ioctl()
вызовы и их значения могут быть не полностью переносимы между различными основными версиями ядра. Должен признать, что в итоге я не использовал подход на чистом C (без libpcap), поэтому я не уверен на 100% в этой потенциальной проблеме. Это то, на что вам следует обратить внимание, если вы планируете делать это без libpcap. Я не рекомендую это, если у вас нет действительно веской причины
person
adam
schedule
25.10.2020