wpa_supplicant - 如何切换到不同的网络?

时间:2016-02-12 12:09:41

标签: python linux unix archlinux wpa-supplicant

我需要什么: 通过调用python脚本连接到archlinux上的不同wifi网络。

我在做什么: 从python执行以下语句:

wpa_passphrase "MySSID" "MyPass"> /etc/wpa_supplicant/profile.conf
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/profile.conf
dhcpd wlan0

它仅适用于第一次尝试。第二次执行时,表示dhcpd已经打开。 我不知道如何切换到另一个网络。

我也尝试了wpa_cli,再次,不知道如何切换到另一个网络。

请建议一些修复或替代方案(简单)

3 个答案:

答案 0 :(得分:0)

编辑/etc/wpa_supplicant.conf

nano /etc/wpa_supplicant.conf

完成文件使其看起来像那样(当然用实际值替换wifi_name和wifi_key)。

network={
         ssid="wifi_name1"
         psk="wifi_key1"
}

network={
         ssid="wifi_name2"
         psk="wifi_key2"
}

然后保存并退出

现在配置了wifi网络,我们现在必须告诉我们要使用此配置文件连接到它。

wpa_supplicant -B -i wlan0 -c <(wpa_passphrase MYSSID passphrase)

如果你的界面没有被命名为wlan0,那么用接口的真实名称替换wlan0。 我们现在必须要求IP地址。

dhclient wlan0

如果一切顺利,你现在看到几行包含一些IP地址,命令ping应该有效。

答案 1 :(得分:0)

您的具体问题是您启动wpa_supplicant和dhcp而不是重新启动它们。我有一个读取

的脚本
#shutdown dhc
dhclient -r
#shutdown wpa_supplicant
killall wpa_supplicant
#down interface
ifdown --force wlan0
sleep 1
#your wpa startup here:
wpa_supplicant -t -fYOUR_LOG_FILE -cYOUR_wpa_supplicant.conf -B -iwlan0
sleep 1
#restart dhc
dhclient -nw

我想你可以通过适当配置你的/ etc / network /接口来做得更好。

顺便说一下。原则上,根本不需要重新启动dhc。一段时间后,它应该意识到它需要获取一个新的IP,但对我来说这需要很长时间。 ;)

答案 2 :(得分:-1)

当您使用 wpa_passphrase 生成新配置时,请将其放在与上一个不同的位置以使事情变得更容易。例如,您的家庭 wifi 可能在 /etc/wpa_supplicant/home.conf 中,而您的工作 wifi 可能在 /etc/wpa_supplicant/work.conf 中。

然后当您需要连接到您的家庭 wifi 时,您只需运行

killall wpa_supplicant # With root privileges
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/home.conf

当您需要连接到工作 wifi 时,您可以运行

killall wpa_supplicant # With root privileges
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/work.conf

对您要使用的任何新网络进行冲洗和重复。如果您不想保留网络,例如旅途中的星巴克 wifi,只需将其保存到您计划覆盖或删除的 conf 中,例如 /etc/wpa_supplicant/temp.conf

AFAIK,您永远不必重新运行 dhcpcd。我有 dhcpcd 作为启动过程,每当我切换 wifi 时,我都不需要触摸它。

编辑:您也不需要将其作为 python 脚本运行。你可以在 shell 中做到这一点。如果您需要编写快速更改wifi的脚本,我建议您使用如下所示的shell脚本。

#!/bin/sh
[ -z "$1" ] && exit 1
[ ! -f "/etc/wpa_supplicant/${1}.conf" ] && echo "$1 is not a wpa_supplicant config file" && exit 1
sudo killall wpa_supplicant
sudo wpa_supplicant -B -i wlan0 -c "/etc/wpa_supplicant/${1}.conf"

跑起来

wifichange home

wifichange work

[ -z "$1" ] 部分表示如果您没有输入任何内容就退出。 (喜欢)

wifichange

如果您没有输入真实配置文件的名称,那么 [ ! -f ...] 部分表示退出。

现在我测试了脚本。