wpa_supplicant/hostapd是Linux下用做sta/ap网卡操作的接口,项目基本做完,整理在此。
一、wpa_supplicant部分
wpa_supplicant是一个连接、配置WIFI的工具。它主要包含两个程序:wpa_supplicant与wpa_cli。二者的关系就是server与client的关系。通常情况下,我们可以通过wpa_cli来进行WIFI的配置与连接,如果有特殊的需要,可以编写应用程序直接调用wpa_supplicant的接口直接开发。
本文主要讲述如何通过wpa_cli进行WIFI的配置与连接。
2. 使用方法
2.1 启动wpa_supplicant应用
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
注意:/etc/wpa_supplicant.conf文件里,添加下面代码。
ctrl_interface=/var/run/wpa_supplicant
update_config=1
2.2 启动wpa_cli应用
wpa_cli -i wlan0 scan 搜索附近wifi网络
wpa_cli -i wlan0 scan_result 打印搜索wifi网络结果
wpa_cli -i wlan0 add_network 添加一个网络连接
2.21 如果要连接加密方式是:[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] (wpa加密) wifi名称是:wifi_name wifi密码是:wifi_psk
wpa_cli -i wlan0 set_network 0 ssid '"wifi_name"'
wpa_cli -i wlan0 set_network 0 psk '"wifi_psk"'
wpa_cli -i wlan0 enable_network 0
2.22 如果要连接加密方式是:[WEP][ESS] (wep加密)
wifi名称是:wifi_name
wifi密码是:wifi_psk
wpa_cli -i wlan0 set_network 0 ssid '"wpa_name"'
wpa_cli -i wlan0 set_network 0 key_mgmt NONE
wpa_cli -i wlan0 set_network 0 wep_key0 '"wap_psk"'
wpa_cli -i wlan0 enable_network 0
2.23 如果要连接加密方式是:[ESS] (无加密)
wifi名称是:wifi_name
wpa_cli -i wlan0 set_network 0 ssid '"wifi_name"'
wpa_cli -i wlan0 set_network 0 key_mgmt NONE
wpa_cli -i wlan0 enable_network 0
2.3 分配ip,netmask,gateway,dns
udhcpc -i wlan0 -s /etc/udhcpc.script -q
执行完毕,就可以连接网络了。
2.4 保存连接
wpa_cli -i wlan0 save_config
2.5 断开连接
wpa_cli -i wlan0 disable_network 0
2.6 连接已有的连接
$ wpa_cli -i wlan0 list_network 列举所有保存的连接
$ wpa_cli -i wlan0 select_network 0 连接第1个保存的连接
$ wpa_cli -i wlan0 enable_network 0 使能第1个保存的连接
2.7 断开wifi
$ ifconfig wlan0 down
$ killall udhcpc
$ killall wpa_supplicant
二 、 hostapd 部分
hostapd 是 Host Access Point 守护进程,提供对基于 Linux 的无线接入点的强 WPA2 加密和身份验证。
配置 hostapd 非常简单,它支持 WPA2-Personal 和 Enterprise,提供了对 WPA2-Personal 的独特修改,可让管理它变得更复杂或更简单。
udhcpd -f /etc/wificfg/udhcpd.conf &
hostapd -t /etc/wificfg/hostapd.conf &
/*************************************************************************************************************************/
三、实际操作脚本:
上面是根据平时的工作写的备忘,查询使用;下面记着使用的 sta/ap的操作,以及在嵌入式下面的几个配置文件:
1. wpa-supplicant常用手顺:
wpa_supplicant -D nl80211 -i wlan0 -c/home/ky/wpa_supplicant.conf -B
wpa_cli -i wlan0 scan
wpa_cli -i wlan0 scan_result
wpa_cli -i wlan0 add_network
wpa_cli -i wlan0 set_network 0 ssid '"ky"'
wpa_cli -i wlan0 set_network 0 psk '"12345678"'
wpa_cli -i wlan0 enable_network 0
udhcpc -i wlan0
wpa_cli -i wlan0 disable_network 0
wpa_cli -i wlan0 disable_network 1
wpa_cli -i wlan3 remove_network 0
wpa_cli -i wlan0 save_config
wpa_cli -i wlan0 list_network
wpa_cli -i wlan0 select_network 2
wpa_cli -i wlan0 enable_network 2
udhcpc -i wlan0
wpa_supplicant.conf 配置文件内容:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
ssid="hky"
psk="12345678"
}
2.hostapd手顺:
ap模式比较简单
udhcpd -f /etc/wificfg/udhcpd.conf &
hostapd -t /etc/wificfg/hostapd.conf &
udhcpd.conf 配置文件内容:和路由器配置界面的内容差不多
值得注意的是 租约文件(lease_file ) 这个配置文件,通常都建立在/var/tmp/目录下的,WiFi AP模式分配不了IP可能是没有建立这个文件,用touch建立一个就可
start 192.168.219.2
end 192.168.219.254
interface wlan1
lease_file /etc/wificfg/udhcpd.lease
opt dns 168.95.1.1 192.168.10.2 192.168.10.10
option subnet 192.168.0.0 netmask 255.255.255.0
opt router 192.168.10.2
opt wins 192.168.10.10
option dns 129.219.13.81
option domain local
option lease 864000
hostapd.conf配置文件内容:制定了AP的ssid 密码 加密方式 a/b/g/n等工作模式,当然工作模式也可以由WiFi模组的命令来改动
#
# This will give you a minimal, insecure wireless network.
#
# DO NOT BE SATISFIED WITH THAT!!!
#
# A complete, well commented example configuration file is
# available here:
#
# /usr/share/doc/hostapd/hostapd.conf
#
# For more information, look here:
#
# http://wireless.kernel.org/en/users/Documentation/hostapd
#
ctrl_interface=/var/run/hostapd
ctrl_interface_group=root
# Some usable default settings...
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
# Uncomment these for base WPA & WPA2 support with a pre-shared key
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
# DO NOT FORGET TO SET A WPA PASSPHRASE!!
wpa_passphrase=12345678
# Most modern wireless drivers in the kernel need driver=nl80211
driver=nl80211
# Customize these for your local configuration...
interface=wlan1
hw_mode=g
channel=11
ssid=ssidtest
over 了