Несколько и тот же SSID в WPA_Supplicant.conf

Есть много команд более высокого уровня, которые почти сделают то, что вы хотите, но это хорошая демонстрация того, как сделать то же самое в сценарии оболочки. Это должно работать на любой системе, где есть /bin/sh. Он не зависит ни от каких других команд.

Вы можете сохранить этот сценарий под любым именем, а затем набрать sh ./whatever_you_named_it для его выполнения.

Я разделил это на две части, Перечисление файлов и Подсчет файлов. Перечисление файлов рекурсивно является самым сложным, но как только у нас есть список, их легко подсчитать.

Listing the Files

Этот скрипт рекурсивно перечисляет все файлы и каталоги в вашем домашнем каталоге или каталоге, который он получает в качестве параметра. При отсутствии параметров по умолчанию используется домашний каталог.

#!/bin/sh

if test $# -eq 0
then
    startdir="$HOME"
else
    startdir="$1"
fi

for f in "$start"/*          # step through all files in the starting directory
do
     echo "$f"               # print the file name
     if test -d "$f"         # is the file a directory? (-d)
     then
        sh "$0" "$f"         # yes call this script with the dir as arg
     fi
done

Давайте обсудим каждый шаг:

  1. Если скрипту не было передано никаких параметров, то в качестве начального каталога используйте "$HOME", в противном случае используйте первый параметр. ($# содержит количество параметров, переданных этому скрипту, и мы используем встроенную в shell команду test, чтобы узнать, равно ли оно нулю):

    if test $# -eq 0
    тогда
     startdir="$HOME"
    else
     startdir="$1"
    fi
    
  2. Итерация по файлам в вашем домашнем каталоге. "$HOME"/* расширяется до всех не скрытых файлов и каталогов на верхнем уровне вашего домашнего каталога:

    for f in "$HOME"/*
    do
    
  3. Выведите имя файла. Думаю, вы знаете echo:

     echo "$f" # вывести имя файла
    
  4. Вызов встроенной в shell команды test с опцией -d. test возвращает true, если аргумент, "$f", является каталогом. Для краткости это чаще всего записывается как [ -d "$f" ], но на самом деле это команда. [Поиск "test expr" в sh man page]:

     if test -d "$f" # является ли файл каталогом? (-d)
     тогда
    
  5. В этом следующем утверждении мы повторяемся. Мы запускаем новую копию текущего сценария и передаем ей имя текущего каталога "$f". $0 расширяется до имени файла текущего сценария оболочки. Вместо того чтобы вводить здесь имя файла, мы используем $0, чтобы этот скрипт работал, даже если его имя изменится. Например, если скрипт назывался rlist, то можно написать sh rlist "$f", но если переименовать скрипт, то он перестанет работать правильно, потому что будет вызывать несуществующий или неправильный скрипт. [См. раздел "Специальные параметры" на странице sh руководства]:

     sh "$0" "$f" # да вызывает этот скрипт с dir в качестве arg
    
  6. Завершает оператор if и цикл for.

     fi
    done
    

Подсчет файлов

До сих пор сценарий перечислял файлы, но не подсчитывал их. Если вы хотите получить подсчет всех файлов и каталогов, выполните следующее:

sh ./scriptname | wc -l

wc -l - это команда "word count", а с опцией -l подсчитывает только строки. Приведенный выше конвейер выводит число, которое является количеством файлов в вашем домашнем каталоге.

2
24.10.2018, 05:29
2 ответа

В пространстве пользователя wpa_supplicantможно управлять с помощью wpa_cli.
Текущую информацию можно подтвердить с помощью следующей команды.

$ wpa_cli -p /var/run/wpa_supplicant status

Информация statusможет использоваться для проверки различной информации о подключенной в данный момент точке доступа.
Я уверен, что вы можете судить об этой информации.

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

ssid: test_ap
password: 12345678

Ниже приведен пример использования команды.
Возможно, pskизменится в соответствии с вашим паролем.

root@test:~# wpa_cli -p /var/wpa status
Selected interface 'wlan0'
bssid=12:34:56:78:90:a1
ssid=test_ap
id=0
passphrase=12345678
psk=?????????????????????????????
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
address=11:22:33:44:55:66
signal_level=-22
root@test:~#
2
27.01.2020, 22:17

Если вы хотите узнать, к какой сети вы подключены, вы также можете использовать BSSID для ее идентификации. Обычно это MAC-адрес точки доступа (, нотация :xx:xx:xx:xx:xx:xx). Это зависит от системы, как найти BSSID. ifconfigобычно показывает эту информацию для BSD и, возможно, других систем Unix.

Вы также можете использовать параметр bssidдля дальнейшего ограничения выбора точки доступа, чтобы это не сбивало с толку.

Пример:

network={
    ssid="My network"
    bssid=00:11:22:33:44:55
   ...
}

Один BSSID (одна точка доступа)

В случае, если вы просто забыли, какая конфигурация является правильной (, это означает, что у вас есть только одна сеть/AP )прокомментируйте один блок конфигурации (используйте#)и посмотрите, не запрошен ли еще запрос wpa соединяется.

Первая попытка будет выглядеть так:

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
#Disable wifi direct
p2p_disabled=1

network={
    ssid="SameSSID"
    psk="12345678"
    id_str="CorrectPSK"
}

#network={
#    ssid="SameSSID"
#    psk="00000000"
#    id_str="WrongPSK"
#}

Затем перезапустите wpa _саппликант и посмотрите, соединяется ли он с точкой доступа. Если это не так, это другая конфигурация в другом блоке network { }, которая является допустимой.

0
27.01.2020, 22:17

Теги

Похожие вопросы