在ifconfig wlan0 up

时间:2017-07-20 14:03:21

标签: linux networking ifconfig wpa-supplicant

我目前正在编写两个脚本,一个用于连接到wifi网络,另一个用于断开连接。

连接脚本效果很好,但是当我这样做时

sudo ifconfig wlan0 down
sudo ifconfig wlan0 up

即使/ etc / network / interfaces中没有wlan0,接口也会自动重新连接到网络。

但是,如果我重新启动,则wlan0未连接。

这是我感兴趣的人的脚本

#!/bin/bash

SSID="ssid"
PASSWORD="pass"

CONF_FILE="/etc/wpa_supplicant/$SSID.conf"

if [ -f "$CONF_FILE" ]; then
    echo "wpa configuration file already exists"
else
    echo "wpa configuration file doesn't exists"
    #Generating configuration file
    sudo wpa_passphrase $SSID $PASSWORD > $CONF_FILE
    #Delete the line containing the password
    sudo sed -i '/$PASSWORD/d' $CONF_FILE
fi

#Connecting to network
sudo wpa_supplicant -c $CONF_FILE -i wlan0 &

我认为这是因为wpa_supplicant仍然在后台运行,是否有人知道如何在不知道其pid的情况下终止wpa_supplicant运行进程?

编辑: 我确认它来自在后台运行的wpa-supplicant。 我找到解决问题的唯一方法是打电话给

sudo killall wpa_supplicant 

然而,这个解决方案并不能让我满意,想象一下,我在另一个接口上运行另一个wpa_supplicant实例,我将丢失所有网络连接。 非常确定有更好的方法可以终止与此特定接口关联的进程。 我会四处寻找。 希望有人已经有这种情况。

2 个答案:

答案 0 :(得分:0)

我建议您使用wpa_supplicant前端程序wpa_cli来控制wpa_supplicant。

  1. 首先在wpa conf文件中添加ctrl_interface=/var/run/wpa_supplicant启用wpa_supplicant控件套接字,可以根据您的喜好更改确切的路径和名称。
  2. 使用wpa_cli -p /var/run/wpa_supplicant terminate来修复wpa_supplicant。
  3. 请参阅wpa_cli的帮助以获取更多信息。

答案 1 :(得分:0)

忘记ifconfig,它 也会启动wpa_supplicant 而是使用ip link set wifi0 upip link set wifi0 down上/下界面,wpa_supplicant / wpa_cli连接到网络。
调用请求者的示例:
wpa_supplicant -i wifi0 -D nl80211 -c /etc/wpa_supplicant/my_wpa_supplicant.conf 您可以直接在.conf文件中设置网络,也可以动态添加它们。 通过wpa_passphrase生成psk,将输出放在.conf文件中。

network={
    ssid="TOPGUN"
    #psk="qwerty123"
    psk=f910451a8a67c0e061d1a296955ad604b4fe6fb0e442b8a997f350f434e07f00
}

network={
    ssid="TOPGUN2"
    #psk="qwerty123"
    psk=538a2337031c5308082285cee3e433c62aaf49260cbb35768eeb3e6baa2d5191
}

现在您可以使用wpa_cli从脚本中更改这些网络,就像这样。

wpa_cli -iwifi0 select_network 0
wpa_cli -iwifi0 enable_network 0

wpa_cli -iwifi0 select_network 1
wpa_cli -iwifi0 enable_network 1

其中0是.conf文件中第一个网络的编号,1是第二个网络
每次在脚本中动态添加网络,这样您就可以更好地控制网络中的数字。请记住,那些不是持久的,应该在每次重启系统时运行。

wpa_cli -iwifi0 add_network <-- this command returns number of network which is used in following commands, you should remember returned value

wpa_cli -iwifi0 set_network 0 key_mgmt WPA-PSK
wpa_cli -iwifi0 set_network 0 psk '"qwerty123"'
wpa_cli -iwifi0 set_network 0 ssid '"TOPGUN"'
wpa_cli -iwifi0 select_network 0
wpa_cli -iwifi0 enable_network 0