Testar existência / credenciais de WiFi antes do dhclient chamar?

3

Eu tenho o script a seguir que é desconectado da rede Wi-Fi atual e reconectado com base no conteúdo de wpa_supplicant.conf :

#!/bin/bash

if iwgetid; then
    sudo wpa_cli terminate
    sudo ip addr flush wlan0
    sudo ip link set dev wlan0 down
    sudo rm -r /var/run/wpa_supplicant > /dev/null
fi

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null 2>&1
sudo service ntp restart
sudo ip link set dev wlan0 down
sudo ip link set dev wlan0 up
sudo dhclient wlan0

O problema é que, se as credenciais em wpa_supplicant não estiverem corretas (elas são baseadas na entrada do usuário no meu aplicativo, isso é muito possível), dhclient trava por um bom tempo, tentando se conectar a um servidor DHCP e atribuir um endereço IP antes de falhar.

Existe uma maneira de testar se as credenciais estão corretas antes de chamar dhclient ?

    
por Ryan Bobrowski 08.03.2018 / 17:32

2 respostas

2

Eu dividiria em funções separadas, permitindo-me testar a conexão com o Wi-Fi antes de reconfigurar a rede.

#!/usr/bin/env bash
CONF="/etc/wpa_supplicant/wpa_supplicant.conf"

function connect_wifi() {
    wpa_supplicant -B -i wlan0 -c $CONF >/dev/null 2>&1
}

function connect_tcpip() {
    service ntp restart
    ip link set dev wlan0 down
    ip link set dev wlan0 up
    dhclient wlan0
}

FUNC_CW=$(declare -f connect_wifi)
FUNC_CT=$(declare -f connect_tcpip)

if (sudo bash -c "$FUNC_CW; connect_wifi"); then
    sudo bash -c "$FUNC_CT; connect_tcpip"
else
    echo "Error Connecting to Wifi.  Please check your credentials and try again."
fi
    
por 08.03.2018 / 18:15
2

Esta é uma amostra ./script incluindo o comando wpa_passphrase para configurar O SSID e o password :

#!/bin/bash

if iwgetid; then
    wpa_cli terminate
    ip addr flush wlan0
    ip link set dev wlan0 down
    rm -r /var/run/wpa_supplicant > /dev/null
    ip link set dev wlan0 up
fi

wpa_supplicant -B -i wlan0 -c<(wpa_passphrase "$1" "$2") > /dev/null 2>&1
dhclient wlan0
service ntp restart
exit

Uso:

sudo ./script "My SSID" "My-Password"

Atualizar

Se o wpa_supplicant for bem-sucedido e autenticado com o ssid e pass , você receberá WPA: Key negotiation completed no arquivo de log.

A opção -f adicionada ao comando wpa_supplicant para fornecer um arquivo log .

Você pode verificar o status de saída de grep antes de executar o comando dhclient .

#!/bin/bash

if iwgetid; then
    wpa_cli terminate
    ip addr flush wlan0
    ip link set dev wlan0 down
    rm -r /var/run/wpa_supplicant > /dev/null
    ip link set dev wlan0 up
fi
# A minimal wpa_supplicant.conf configuration file.

echo -e "\nctrl_interface=/run/wpa_supplicant \nupdate_config=1\n" > /etc/wpa_supplicant/wpa_supplicant.conf

# A prompt for SSID and WPA passphrase. The -f option to get a log file.
# sleep command will be useful because the authentication will take a few 
# second before executing grep.

echo "" > logfile

wpa_supplicant -B -i wlan0 -c<(wpa_passphrase "$1" "$2") -f logfile

sleep 10

grep -c "WPA: Key negotiation completed" logfile

if [ $? -eq 0 ] 
   then
   echo "Key negotiation completed successfully" 
   timeout 15 dhclient wlan0
   exit 0
else
  echo "Authentication failed"
fi
exit 1

Uso:

sudo ./script "My SSID" "My-Password"
    
por 08.03.2018 / 18:36