Как я могу подключиться к определенному BSSID?

Существует несколько беспроводных сетей с одинаковым SSID. Я ищу решение для подключения к конкретному (по BSSID).

nmcli con up ifname ap выглядит хорошо, но, к сожалению, это не работает. Он просто подключается обратно к исходной сети.

5 ответов

Решение

Ты можешь использовать Network Manager Кли интерфейс, nmcli,

Я уверен, что у вас уже есть BSSID, Вы можете проверить и подтвердить это с помощью:
( $ это командная строка Строки, следующие за командой, являются выходными данными.)

$ nmcli -f in-use,ssid,bssid,signal,bars  dev wifi
*  SSID               BSSID              SIGNAL  BARS 
*  Apollo III (TWC)   XX:XX:XX:XX:XX:XX  98      ▂▄▆█ 
   Chromecast8481     XX:XX:XX:XX:XX:XX  97      ▂▄▆█ 
   --                 XX:XX:XX:XX:XX:XX  94      ▂▄▆█ 
   Apollo III (1)     XX:XX:XX:XX:XX:XX  87      ▂▄▆█ 
   TWCWiFi            XX:XX:XX:XX:XX:XX  80      ▂▄▆_ 
   CableWiFi          XX:XX:XX:XX:XX:XX  80      ▂▄▆_ 
   TWCWiFi-Passpoint  XX:XX:XX:XX:XX:XX  80      ▂▄▆_ 
   Apollo III (1)     XX:XX:XX:XX:XX:XX  70      ▂▄▆_

Кли для подключения к BSSID является:

$ nmcli d wifi connect XX:XX:XX:XX:XX:XX

Эта команда выдаст подсказку с графическим интерфейсом для пароля. Вы можете ввести пароль в командной строке (может быть из соображений безопасности):

$ nmcli d wifi connect XX:XX:XX:XX:XX:XX password "mypassword"

Последний не запрашивает пароль, но подключается к указанной сети с помощью BSSID в команде. Если вы ранее уже подключались к другой сети, она будет заменена на указанную в команде.

Команда также добавит информацию о соединении в /etc/NetworkManager/system-connections место нахождения. Местоположение защищено.

Последующие подключения могут быть выполнены с помощью значка сети в области уведомлений под созданным именем.

Самый простой способ сделать это - использовать графический интерфейс, предоставленный Network Manager.

Перейдите к значку сети в верхней панели, выберите Edit Connections найдите профиль беспроводного соединения для нужного SSID, откройте для EDIT, перейдите в поле BSSID и либо 1) откройте желаемый BSSID, либо 2) введите желаемый BSSID вручную.

Ниже приведен пример беспроводного соединения с его полем BSSID.

Этот ответ был впервые опубликован Konrad Höffner на SuperUser. Пожалуйста, рассмотрите возможность голосования там, если это поможет вам.

Вы можете сделать это, подключившись к точке доступа вручную.

Во-первых, проще всего отключить диспетчер сети, если вы его используете:

  sudo service network-manager stop

Затем вам нужно определить BSSID точки доступа, к которой вы хотите присоединиться: команда

 sudo iw dev wlan0 scan

(если вы используете wlan0 в качестве беспроводного интерфейса), вы получите много выходных данных, среди которых вы найдете что-то вроде:

  BSS f8:1a:67:aa:7f:b9 (on wlan0) -- associated
    TSF: 629432841083 usec (7d, 06:50:32)
    freq: 2417
    beacon interval: 100
    capability: ESS Privacy ShortPreamble SpectrumMgmt ShortSlotTime (0x0531)
    signal: -70.00 dBm
    last seen: 0 ms ago
    Information elements from Probe Response frame:
    SSID: MySSID_NAME

(вывод длиннее, чем этот). Соответствующая часть, конечно, BSS f8: 1a: 67: aa: 7f: b9.

Затем вам придется освободить свой интерфейс от любых предыдущих IP-адресов, на всякий случай:

  sudo ip link set wlan0 down
  sudo ip addr flush dev wlan0
  sudo ip link set wlan0 up

Теперь вы указываете, что хотите подключиться к конкретной точке доступа:

  sudo iwconfig wlan0 essid MySSID_NAME ap f8:1a:67:aa:7f:b9

где, конечно, AP предшествует BSSID, который вы только что определили. Теперь вам нужно запустить wpa_supplicant,

 sudo wpa_supplicant -Dnl80211 -i wlan0 -B -c FILE_with_WPA_Secrets

(если вы не знаете, как настроить файл с вашими учетными данными WPA, вы можете посмотреть его здесь, например; просто будьте осторожны, когда написано, что сеть = {, это должна быть сеть = { без пробела). И, наконец,

 sudo dhclient -v wlan0

(флаг -v не работает на всех дистрибутивах Linux, мне это нравится, потому что я могу следить за происходящим).

РЕДАКТИРОВАТЬ

Приведенные выше инструкции работают для сети с безопасностью WPA. Для обеспечения безопасности WEP замените команду wpa_supplicant:

  sudo iwconfig wlan0 key s:Your_WEP_password

Помните, что два символа s: перед вашим паролем необходимы. После этого еще раз

  sudo dhclient -v wlan0

Надеюсь это поможет.

Это скорее расширение ответа TheOdd. Поскольку iwconfig устарел во многих дистрибутивах, вместо него можно использовать iw для связи с определенной точкой доступа. iw работает немного иначе, чем iwconfig, поскольку вы указываете конкретные точки доступа по частоте, а не по BSSID. Кроме того, я счел необходимым разблокировать аренду DHCP, прежде чем запрашивать еще одну с другой точки доступа. Предполагая, что вы уже подключены к точке доступа в той же сети, вам не нужно повторно отправлять аутентификацию с помощью wpa_supplicant. Я использую wlan0, но у вашего WNIC может быть другое имя. Вот полный процесс переключения между точками доступа с одинаковым ESSID:

показать информацию о подключении:

снять wlan0:

sudo ip link set wlan0 down

бесплатный WNIC любых предыдущих IP-адресов:

sudo ip addr flush dev wlan0

удалить старую аренду dhcp:

sudo dhclient -r wlan0

вернуть WNIC обратно:

sudo ip link set wlan0 up

сканируйте, обратите внимание на частоту:

sudo iw dev wlan0 scan

укажите ESSID и частоту с помощью iw (не iwconfig), чтобы связать с конкретной точкой доступа:

sudo iw wlan0 connect <ESSID> <freq>

Например:

sudo iw wlan connect fly-for-wifi 2462

запустить dhcp:

sudo dhclient -v wlan0

Проверьте:

iw wlan0 link

Этот ответ эквивалентен ответу, который объясняет, как использовать графический интерфейс NetworkManager, но использовать CLI.

  1. (необязательно, используется для отображения всех доступных Wi-Fi и их BSSID)
            nmcli device wifi list
    
  2. Отредактируйте поле BSSID:
            nmcli connection edit ConnectionName
    set 802-11-wireless.bssid 12:34:56:AB:CD:EF
    save
    quit
    
    или:
            nmcli connection modify ConnectionName 802-11-wireless.bssid 12:34:56:AB:CD:EF
    
    гдеConnectionNameобычно идентичен ESSID, если он создается автоматически (вы можете перечислить все сохраненные имена соединений с помощьюnmcli connection), заменять12:34:56:AB:CD:EFс идентификатором соединения.
  3. Используйте профиль подключения:
            nmcli connection up ConnectionName
    

Обратите внимание: таким образом, если этот BSSID недоступен, он не будет автоматически подключаться к какому-либо другому BSSID.

Есть некоторые возможные исправления.

  • Вручную отмените изменения.

    Сделайте то же самое, но на шаге 2 вам нужно сделать:

            nmcli connection edit ConnectionName
    remove 802-11-wireless.bssid
    save
    quit
    

    или

            nmcli connection modify ConnectionName 802-11-wireless.bssid ''
    
  • Создайте новое соединение, клонировав существующее.

            nmcli connection delete ConnectionName-cloned  # delete all existing connections named "ConnectionName-cloned"
    nmcli connection clone ConnectionName ConnectionName-cloned  # create a new connection with name "ConnectionName-cloned" copying from the connection named "ConnectionName". Note that if there is an existing one it will create a new one with the same name
    nmcli connection modify ConnectionName-cloned 802-11-wireless.bssid 12:34:56:AB:CD:EF  # as above
    nmcli connection up ConnectionName-cloned  # as above
    
Другие вопросы по тегам