2019独角兽企业重金招聘Python工程师标准>>>

interface  gtk  makefile  wrapper  buffer  methods

目录(?)[-]

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

    1. 官方的模块框图



    1. 大致流程For WPAPSK

    2. WPAPSK配置文件的写法

    3. 编译方法

    4. 启动方法Atheros Driver

    5. 主要参数含义

    6. 源码关键函数

 

本来以为这个东西只有在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 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

何时会从黑名单中删除。

 

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

wpa_supplicant学习相关推荐

  1. (一百零二)Android O wpa_supplicant初始化学习

    前言:之前在 有提及"通过 "setprop ctrl.start wpa_supplicant" 来触发init进程去fork一个子进程来完成supplicant的启动 ...

  2. ​【安全牛学习笔记】WPS及其他工具WPS

    WPS及其他工具 root@kali:~# service network-manager stop root@kali:~# airmon-ng check kill Killing these p ...

  3. Android Wi-Fi子系统学习笔记

    一.学习目的 了解Android  Wi-Fi模组的移植及调试 二.基础知识 1.wifi的两个标志: (1)无线 (2)基于IEEE802.11协议 2.Android wifi模块的三个作用 (1 ...

  4. 移植wpa_supplicant软件与DHCP软件解密WPA/WPA2 加密的无线网络

    加qq1126137994与微信:liu1126137994 一起学习更多技术! 现在的无线网络基本都是 WPA/WPA2 加密方式的,当我们在嵌入式Linux平台要实现无线网卡连接无线网时,我们需要 ...

  5. 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环

    目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...

  6. Linux学习之CentOS6下Mysql数据库的安装与配置

    转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  7. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--Cen ...

  8. [Android]Android P(9) WIFI学习笔记 - HAL (1)

    目录 前文回顾 前言 入口 WifiNative 初始化 打开WIFI IWifiChip IWifiCond ISupplicant 前文回顾 WIFI学习笔记 - Framework (1) WI ...

  9. Linux目录结构,命令,文件类型学习

    2019独角兽企业重金招聘Python工程师标准>>> [toc] Linux目录结构,命令,文件类型学习 一. 系统目录结构 简述 对于目录,我们大致能够理解,像书本学的章节,每个 ...

最新文章

  1. 高斯混合模型图像聚类、图像生成、可视化分析实战
  2. 语言模型如何为大象“称”体重?斯坦福提出“尺度探测”新思路
  3. 清北学堂模拟赛d5t4 套路
  4. Net 4.0 Parallel 编程(六)Task(下)
  5. VTK:几何对象之OrientedArrow
  6. 牛客 - 焦糖布丁(线性基+博弈)
  7. 编程语言里函数方法类型检查的重要性
  8. CMake 入门与进阶
  9. SQL Tuning Advisor使用实例
  10. Javascript设计模式(五)代理模式
  11. Linux的WIFI架构,Linux Wireless架构总结
  12. MD5文件加解密工具类 MD5Utils
  13. 京东云的区块链“经”
  14. SAP UI5 在 PC 端浏览器和移动设备使用摄像头进行条形码扫描的几种解决方案介绍
  15. PROFINET转EtherCAT网关方案设计
  16. 一位软件实施工程师的自述(转)
  17. Python爬虫:爬取某鱼颜值主播图片并保存到本地升级版!
  18. matplotlib 绘制三角函数图像
  19. 时序图神经网络总结(1)
  20. GBA程序开发入门1

热门文章

  1. C#中如何得到机器的IP地址
  2. 如何有效的使用C#读取文件
  3. 如何在asp.net中动态生成验证码
  4. Windows自动启动程序的十大藏身之所(转载)
  5. 一种二维条码图像处理流程
  6. 用计算机辅助实验系统做验证牛顿第三定律,用计算机辅助实验系统(
  7. java uiautomation_Java UiAutomation類代碼示例
  8. mysql语句生成工具_强烈推荐一款MySQL语句优化辅助工具,值得收藏
  9. python如何创建不同元素的矩阵_python – 如何在数据帧中创建矩阵元素的数...
  10. 1 23 456c语言,2014年计算机二级考试C语言模拟题(1)