dhclient 호출 전에 WiFi 존재/자격 증명을 테스트하시겠습니까?

dhclient 호출 전에 WiFi 존재/자격 증명을 테스트하시겠습니까?

현재 WiFi 네트워크에서 연결을 끊고 다음을 기반으로 다시 연결하는 다음 스크립트가 있습니다 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

문제는 자격 증명이 wpa_supplicant올바르지 않은 경우(내 응용 프로그램의 사용자 입력을 기반으로 하므로 그럴 가능성이 매우 높음) dhclientDHCP 서버에 연결하고 IP 주소를 할당하려고 시도하면서 꽤 오랜 시간 동안 멈추고 결국 실패한다는 것입니다. .

전화하기 전에 자격 증명이 올바른지 테스트하는 방법이 있습니까 dhclient?

답변1

다음은 The 및 the를 설정하는 명령을 ./script포함한 예입니다 .wpa_passphraseSSIDpassword

#!/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

용법:

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

고쳐 쓰다

wpa_supplicant주어진 인증으로 인증이 성공 하면 로그 파일을 받게 됩니다 ssid.passWPA: Key negotiation completed

-fwpa_supplicant파일에 대한 옵션을 제공하려면 명령 에 추가하십시오 log.

grep명령을 실행하기 전에 종료 상태를 확인할 수 있습니다 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

용법:

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

답변2

네트워크를 재구성하기 전에 Wi-Fi 연결을 테스트할 수 있도록 이를 별도의 기능으로 나누어 보겠습니다.

#!/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

관련 정보