免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1451 | 回复: 0
打印 上一主题 下一主题

wpa_supplicant学习 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-18 15:46 |只看该作者 |倒序浏览
本来以为这个东西只有在Atheros的平台上用的,突然发现Ralink的平台也可以用,甚至还看到还有老美把这个东西往android上移植。看来是个好东西,学习一下。
官方的模块框图


一般来说很多模块可以根据需要选用的
EAP methods EAP state machine
如果你不需要支持wpa-enterprise那么这两个模块都不需要编译。
wpa_cli和GUI
这两个可以不要,直接写个控制脚本,把用户的参数变为配置文件,重启wpa_supplicant
driver event
driver event 无线驱动和本程序通讯的接口,一般高级的无线驱动都支持WEXT。就是驱动里面通过wireless_send_event把一些状态信息发到本程序处理。
driver i/f
一些ioctl接口,同样用于无线驱动和本程序之间传递信息。
EAPOL state machine
负责处理PTK 4-way HS和GTK 2-way HS
l2_package
EAPOL和pre auth都要通过这个接口收发包。
configuration
负责处理用户配置文件的模块
大致流程(For WPAPSK):
1           读取配置文件
2           初始化配置参数,驱动函数wrapper
3           让驱动scan当前所有bssid(包括wpa AP和non-wpa AP)
4           检查扫描的参数是否和用户设置的相符
5           如果相符,设置associate request ie 通知驱动进行auth assoc步骤
4           Four-way handshake for PTK
5           Two-way handshake for GTK
6           接收AP发出的指令,定期更换GTK

这个程序和madwifi通信主要通过wirelessEXT,其实就是netlink,在madwifi驱动中会调用wireless_event_send这个函数把相关的东西发到wpa_supplicant

WPAPSK配置文件的写法
一般这样写可以兼容WPA和WPA2 CCMP和TKIP
network={
    ssid="myssid "
    key_mgmt=WPA-PSK
    proto=WPA RSN
    pairwise=TKIP CCMP
    psk="myasciipsk"
}

编译方法:
Makefile需要读取一个.config文件,这个文件里面包含交叉编译路径设置,模块配置选项。
参考配置文件For wpapsk madwifi
#*******************************************************
CROSS_COMPILE=/opt/mips-linux-
CC=${CROSS_COMPILE}gcc
CONFIG_DRIVER_MADWIFI=y
CFLAGS += -I../src/802_11/madwifi/madwifi
CONFIG_DRIVER_WIRED=y
CONFIG_IEEE8021X_EAPOL=y
CONFIG_BACKEND=file
#*******************************************************

启动方法(Atheros Driver):
#创建无线interface模式设置为managed
wlaconfig ath create wlandev wifi0 wlanmode sta
#设置ath0到自动模式,这样scan的时候会扫所有的频道2.4g 5g 11nagb。
iwpriv ath0 mode auto
#设置好配置文件,启动wpa_supplicant
wpa_supplicant –i ath0 –b br0 –c /tmp/supplicant.conf -B
主要参数含义:
ath0是无线interface,通过这个参数,函数就可以通过iotcl调用无线驱动中的接口。
br0 是bridge interface,EAPOL L2 package都通过这个接口收发。
-c 表示配置文件
-B daemonlise

源码关键函数
wpa_supplicant_add_iface
       wpa_supplicant_init_iface
wpa_supplicant_set_driver
              wpa_config_read
wpa_supplicant_init_iface2
       wpa_supplicant_init_eapol
       wpa_drv_init
       wpa_drv_set_param
       wpa_supplicant_init_wpa
       wpa_supplicant_driver_init
              wpa_supplicant_req_scan // trigger scan state

wpa_supplicant_scan

wpa_supplicant_set_suites
wpa_sm_set_assoc_wpa_ie_default  //add wpa rsn ie in associate req

有时候AP会被加到blackList中,主要原因可以参考下面的代码。主要是收到deauth这个event和auth timeout

wpa_supplicant_event_disassoc
wpa_blacklist_add

wpa_supplicant_timeout
wpa_blacklist_add
何时会从黑名单中删除。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/96145/showart_1968852.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP