Оглавление
1. Что такое dev и phy для команды iw
2. Одновременное использование Wi-Fi адаптера в разных режимах
3. Добавление интерфейса в режиме монитора
4. Как удалить виртуальный интерфейс
5. Типы виртуальных интерфейсов
6. Как в iw добавить AP интерфейс
7. Как как одну Wi-Fi карту использовать в качестве клиента и Точки Доступа
8. Команды для показа имён сетевых интерфейсов
Что такое dev и phy для команды iw
Программа airmon-ng для беспроводных адаптеров показывает такие данные как PHY и Interface.
Программа iw позволяет управлять сетевым адаптером обращаясь к нему либо как к устройству phy, либо как к интерфейсу dev. При этом набор команд разный.
PHY (аббревиатура от англ. Physical layer — физический уровень) — интегральная схема, предназначенная для выполнения функций физического уровня сетевой модели OSI.
Микросхемы PHY позволяют другим микросхемам канального уровня, называемым MAC, подключиться к физической среде передачи, такой как оптическое волокно или медный кабель.
То есть в Linux PHY — это номер, который устройству присвоил драйвер/фреймворк PHY для обращения к нему и настройки на канальном уровне.
Что касается dev (имя устройства, имя интерфейса), то это то условное имя присвоенное устройству системой. Имеются разные схемы наименования, поэтому в разных дистрибутивах Linux сетевые интерфейсы могут называться по-разному. При желании, имя сетевого интерфейса можно изменить.
Одновременное использование Wi-Fi адаптера в разных режимах
Казалось бы, ну и что? Через phy можно управлять настройками, значение которых без чтения специальной технической документации непонятно. Через имя интерфейса dev можно управлять более привычными настройками (перевести в режим монитора, переключиться на определённый канал и так далее).
Дело в том, что для беспроводных адаптеров сетевой интерфейс это не просто имя, идентифицирующее устройство. Интерфейсы бывают разных типов и для доступа к некоторым возможностям беспроводных адаптеров нужно добавлять интерфейсы. Более того, один Wi-Fi адаптер может иметь сразу несколько сетевых интерфейсов, выполняющих разные функции, например, комбинация интерфейсов в управляемом режиме и в режиме монитора, либо комбинация интерфейсов в управляемом режиме и в режиме Точки Доступа, при этом беспроводной адаптер будет одновременно выполнять сразу две функции! Причём разным интерфейсам одного Wi-Fi адаптера можно присвоить разные MAC адреса.
Смотрите также:
- Как узнать MAC-адрес и Как по MAC-адресу узнать производителя
- Как поменять MAC-адрес в Linux, как включить и отключить автоматическую смену (спуфинг) MAC в Linux
Выполните следующую команду для вывода полного списка возможностей всех ваших беспроводных интерфейсов:
iw list
Поищите следующие строки:
- software interface modes (can always be added) — программные режимы интерфейсов (всегда могут быть добавлены)
- valid interface combinations — возможные комбинации интерфейсов
Пример для первого Wi-Fi адаптера:
software interface modes (can always be added):
* AP/VLAN
* monitor
valid interface combinations:
* #{ managed, P2P-client } <= 2, #{ AP, mesh point, P2P-GO } <= 2,
total <= 2, #channels <= 1
То есть вместо того, чтобы переводить интерфейс из управляемого режима в режим монитора или запускать на нём Точку Доступа, можно к уже имеющемуся добавить виртуальный интерфейс в режиме monitor или в режиме AP.
Также у данного беспроводного адаптера может быть до двух сетевых интерфейсов в режимах managed, P2P-client, до двух интерфейсов AP, mesh point, P2P-GO, но в любом случае общее количество интерфейсов не может быть более двух, при этом у всех у них должен быть один канал (#channels <= 1).
Следующий пример:
software interface modes (can always be added):
* AP/VLAN
* monitor
valid interface combinations:
* #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
total <= 3, #channels <= 2
Опять же можно добавить интерфейс в режиме монитора, интерфейс в управляемом режиме может быть только один, всего может быть до трёх интерфейсов и они могут использовать до двух разных каналов (#channels <= 2).
Ещё пример:
software interface modes (can always be added):
* AP/VLAN
* monitor
valid interface combinations:
* #{ AP, mesh point } <= 4,
total <= 4, #channels <= 1
Можно добавить до четырёх AP интерфейсов.
И ещё пример:
software interface modes (can always be added):
* AP/VLAN
* monitor
valid interface combinations:
* #{ AP, mesh point } <= 8,
total <= 8, #channels <= 1
Можно сделать аж до 8 интерфейсов AP, но все они могут использовать один канал.
Добавление интерфейса в режиме монитора
Предпочитаемый мной способ получить режим монитора — это перевести существующий беспроводной интерфейс из режима managed в monitor:
sudo ip link set <ИНТЕРФЕЙС> down
sudo iw <ИНТЕРФЕЙС> set monitor control
sudo ip link set <ИНТЕРФЕЙС> up
В результате Wi-Fi карта, пока она находится в режиме монитора, теряет способность подключаться к Точкам Доступа, то есть Интернет-подключение отсутствует.
Смотрите также: Памятка по Wi-Fi в Linux: подсказки и решение проблем
С помощью добавления нового интерфейса эту проблему удаётся решить.
Добавление интерфейса в режиме монитора выполняется следующим образом:
sudo iw ИНТЕРФЕЙС interface add НОВЫЙ_ИНТЕРФЕЙС type monitor
В качестве ИНТЕРФЕЙС укажите имя существующего интерфейса, а в качестве НОВЫЙ_ИНТЕРФЕЙС можно указать произвольное имя.
При желании, вы можете назначить новому интерфейсу произвольный MAC-адрес:
sudo iw ИНТЕРФЕЙС interface add НОВЫЙ_ИНТЕРФЕЙС type monitor addr MAC_АДРЕС
Посмотрим, какие беспроводные интерфейсы имеются в системе:
iw dev
Видим, что Wi-Fi карта wlp0s20f0u1 подключена к сети с именем Jenechka.
Добавим к wlp0s20f0u1 интерфейс с именем wlanmon в режиме монитора и установим на нём MAC-адрес:
sudo iw wlp0s20f0u1 interface add wlanmon type monitor addr 'ca:fe:de:ad:be:ef'
Вновь посмотрим на наши интерфейсы:
iw dev
Обратите внимание, что появился новый интерфейс wlanmon.
Запустим airodump-ng используя только что созданный виртуальный интерфейс:
sudo airodump-ng wlanmon
А в другом окне запустим пинг, чтобы убедиться, что подключение к сети по-прежнему доступно:
ping suip.biz
Обратите внимание, что не смотря на то, что Wi-Fi адаптеру нужно находиться на одном канале для связи с ТД, тем не менее, при этом интерфейс в режиме монитора переключается по каналам.
Причём уже после остановки записи экрана, airodump-ng даже сумела поймать рукопожатие.
Я не заметил, чтобы виртуальный интерфейс в режиме монитора, если он используется для захвата данных, мешал Интернет-подключению. Но если попытаться с него что-либо отправить (например, для деаутентификации беспроводных клиентов), то Интернет-подключение разрывается. Скорее всего, это связано со сменой используемого канала.
Как удалить виртуальный интерфейс
Для удаления виртуального интерфейса используйте команду:
sudo iw ИНТЕРФЕЙС del
Например:
sudo iw wlanmon del
Типы виртуальных интерфейсов
Выше были показаны примеры команды в которых мы указывали имя сетевого интерфейса:
sudo iw dev DEV-ИМЯ interface add ИМЯ type ТИП [mesh_id ] [4addr on|off] [flags *] [addr ]
Также можно добавить виртуальный интерфейс по имени PHY:
sudo iw phy PHY-ИМЯ interface add ИМЯ type ТИП [mesh_id ] [4addr on|off] [flags *] [addr ]
Наверное, это может быть полезным, если вы удалили все имеющиеся интерфейсы (если такое возможно).
Доступные типы интерфейсов:
- managed
- ibss
- monitor
- mesh
- wds
Флаги используются только для monitor интерфейсов, валидные флаги:
none: без специальных флагов
fcsfail: показывать кадры с ошибками FCS
control: показывать контрольные кадры
otherbss: показывать кадры от других BSS
cook: использовать режим cooked
active: использовать режим active (ACK входящие одноадресные пакеты
mumimo-groupid <GROUP_ID>: использовать MUMIMO в соответствии с групповым id
mumimo-follow-mac <MAC_ADDRESS>: использовать MUMIMO в соответствии с MAC-адресом
mesh_id используется только для режима mesh.
Как в iw добавить AP интерфейс
Вы могли заметить, что в приведённом выше списке валидных типов интерфейсов отсутствует AP. Данный интерфейс с типом AP будет создан автоматически при создании Точки Доступа.
Для простоты, воспользуемся программой create_ap (по ссылке показано, как её установить).
Использование:
sudo create_ap [опции] ИНТЕРФЕЙС-AP ИНТЕРФЕЙС-С-ИНТЕРНЕТОМ [ИМЯ-AP [ПАРОЛЬ]]
К примеру, на интерфейсе wlo1 я хочу создать ТД с именем HackWare и паролем 12345678, в качестве источника Интернета должен использоваться интерфейс wlp0s20f0u1, тогда команда следующая:
sudo create_ap wlo1 wlp0s20f0u1 HackWare 12345678
Я могу подключиться к этой ТД и пользоваться Интернетом:
На компьютере же был создан новый интерфейс типа AP с именем ap0:
Interface ap0
ifindex 21
wdev 0x6
addr c0:b6:f9:da:af:3f
ssid HackWare
type AP
channel 1 (2412 MHz), width: 20 MHz (no HT), center1: 2412 MHz
txpower 22.00 dBm
multicast TXQ:
Как как одну Wi-Fi карту использовать в качестве клиента и Точки Доступа
Показанный выше способ подразумевает, что у вас два сетевых интерфейса — причём обязательно один из них должен быть Wi-Fi адаптером, а второй может быть как Wi-Fi адаптером, так и проводным соединением.
Предположим, что у меня отсутствует проводное соединение и имеется только один адаптер, можно ли одну Wi-Fi карту одновременно использовать для подключения к Точке Доступа и как Точку Доступа? Да, можно. Один сетевой интерфейс может одновременно работать в качестве клиента и в качестве ТД, то есть выполнять роль усилителя сигнала (беспроводной повторитель).
Начнём с того, что остановим NetworkManager, иначе в моём случае у меня постоянно возникала ошибка «RTNETLINK answers: Device or resource busy»:
sudo systemctl stop NetworkManager
sudo airmon-ng check kill
Если у вас NetworkManager убран из автозагрузки, то начать нужно с активации беспроводного интерфейса:
sudo ip link set ИНТЕРФЕЙС up
Теперь нам нужно создать два виртуальных интерфейса в режиме managed с разными MAC-адресами:
sudo iw dev wlp0s20f0u1 interface add wlan0_sta type managed addr 00:c0:ca:00:00:02
sudo iw dev wlp0s20f0u1 interface add wlan0_ap type managed addr 00:c0:ca:00:00:01
Один из этих интерфейсов будет выполнять роль станции, а другой роль ТД.
Поскольку мы отключили NetworkManager, то теперь нам нужно подключиться к удалённой ТД вручную.
Создаём конфигурационный файл:
wpa_passphrase Jenechka ПАРОЛЬ > wpa_Jenechka.conf
Выполняем подключение:
sudo wpa_supplicant -i wlan0_sta -c wpa_Jenechka.conf
Если вы хотите, чтобы процесс wpa_supplicant ушёл в фон, то добавьте опцию -B:
sudo wpa_supplicant -B -i wlan0_sta -c wpa_Jenechka.conf
Подключение требует некоторого времени:
# sleep 5 # если запускать через скрипт, то в этом месте нужно дать время на подключение
Запускаем службу DHCP для автоматического получения IP адреса:
sudo dhclient wlan0_sta
Смотрим на состояние интерфейсов:
iw dev
Видим, что интерфейс wlan0_sta подключён к ТД — именно это нам и нужно.
Очень важно — посмотрите, на каком канале работает ТД и клиент. Этот канал обязательно нужно указать в следующей команде, иначе ничего не получится. В данном случае они работают на 8 канале.
Наконец, запускаем ТД с именем HackWare и паролем 12345678 на 8 канале:
sudo create_ap -c 8 wlan0_ap wlan0_sta HackWare 12345678
Всё получилось, и у нашего усилителя Wi-Fi сигнала даже есть подключённый клиент:
Команды для показа имён сетевых интерфейсов
Небольшая памятка по командам для получении информации о доступных в системе сетевых интерфейсах.
Показать только беспроводные интерфейсы:
iw dev
Вывод беспроводных интерфейсов вместе с их PHY, информации о драйвере и чипсете:
sudo airmon-ng
Вывод некоторой аппаратной информации:
sudo lshw -class network
Имена и описание интерфейсов:
sudo lshw -class network -short
Вывод всего, что напоминает сетевые интерфейсы (вместе с виртуальными):
ip link show
Смотрите также: Как использовать команду ip в Linux
Следующим образом можно посмотреть имена интерфейсов и оборудование:
ls -l /sys/class/net
Так можно вывести имена интерфейсов кроме виртуальных:
find /sys/class/net -type l -not -lname '*virtual*' -printf '%f\n'
Обратите внимание, что создаваемые в этой инструкции интерфейсы в данном случае не считаются виртуальными, поскольку привязаны к физическому оборудованию.
Статистику по интерфейсам можно посмотреть следующим образом:
cat /proc/net/dev
Дополнительные источники
- About iw: https://wireless.wiki.kernel.org/en/users/documentation/iw
- Software access point: https://wiki.archlinux.org/title/Software_access_point
- https://ru.wikipedia.org/wiki/PHY
- https://www.kernel.org/doc/html/latest/driver-api/phy/phy.html
- https://www.kernel.org/doc/html/latest/networking/phy.html












