博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wpa_supplicant学习
阅读量:6501 次
发布时间:2019-06-24

本文共 2569 字,大约阅读时间需要 8 分钟。

hot3.png

         

目录

 

本来以为这个东西只有在Atheros的平台上用的,突然发现Ralink的平台也可以用,甚至还看到还有老美把这个东西往android上移植。看来是个好东西,学习一下。

官方的模块框图

 

 

一般来说很多模块可以根据需要选用的

EAP methods EAP state machine

如果你不需要支持wpa-enterprise那么这两个模块都不需要编译。

wpa_cliGUI

这两个可以不要,直接写个控制脚本,把用户的参数变为配置文件,重启wpa_supplicant

driver event

driver event 无线驱动和本程序通讯的接口,一般高级的无线驱动都支持WEXT。就是驱动里面通过wireless_send_event把一些状态信息发到本程序处理。

driver i/f

一些ioctl接口,同样用于无线驱动和本程序之间传递信息。

EAPOL state machine

负责处理PTK 4-way HSGTK 2-way HS

l2_package

EAPOLpre auth都要通过这个接口收发包。

configuration

负责处理用户配置文件的模块

大致流程(For WPAPSK)

1           读取配置文件

2           初始化配置参数,驱动函数wrapper

3           让驱动scan当前所有bssid(包括wpa APnon-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配置文件的写法

一般这样写可以兼容WPAWPA2 CCMPTKIP

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 interfaceEAPOL 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这个eventauth timeout

 

wpa_supplicant_event_disassoc

wpa_blacklist_add

 

wpa_supplicant_timeout

wpa_blacklist_add

何时会从黑名单中删除。

 

wpa_supplicant 扫描的结果是从madwifi中得到的,由于linux kernel里面设置了扫描buffer的大小,wireless.h中定义这个大小为#define IW_SCAN_MAX_DATA    4096,所以这个buffer很容易就溢出了,导致一些结果无法传送到wpa_supplicant,为此madwifi在扫描的时候设置了一个过滤条 件,现提取wpa的AP,再提取none-wpa的,这样改善了很多,但是通常在公司研发环境中还是很容易出现溢出。

转载于:https://my.oschina.net/u/994235/blog/164421

你可能感兴趣的文章
oracle
查看>>
java SpringUtil获取bean
查看>>
Centos6.4最小化安装系统初始化脚本
查看>>
PaaS变厚了
查看>>
赛门铁克开启“容灾即服务”时代
查看>>
复杂度归纳--小结
查看>>
基础篇9-python基本数据结构-列表
查看>>
PHP学习笔记 第八讲 Mysql.简介和创建新的数据库
查看>>
【git】git入门之把自己的项目上传到github
查看>>
js获取鼠标位置
查看>>
2016.8.11 DataTable合并及排除重复方法
查看>>
php 魔术方法 说明
查看>>
Mysql
查看>>
POJ-1860-Currency Exchange
查看>>
跨越企业的“中等收入陷阱”
查看>>
Android 开发者必知的开发资源
查看>>
软件工程技术基础-(软件复用技术)
查看>>
给django视图类添加装饰器
查看>>
DVWA默认用户名密码
查看>>
简述 clearfix 的原理
查看>>