0

我需要有一些使用 wpa_supplicant 代码经验的人的帮助。

我的理解是,wpa_supplicant 为请求者连接到 AP(如果你是什么)做了所有的事情。因此步骤如下:

  1. 扫描
  2. 获取扫描结果
  3. 授权
  4. 协会
  5. 4手摇
  6. 数据交换

据我了解,前 4 个步骤仅由 wpa_supplicant 管理。也就是说,wpa_supplicant 只是调用底层驱动程序来执行这些步骤,并且在主事件循环接收到 EVENT_ASSOC 消息之后。它开始 4 次握手。

就我而言,前两个步骤可以在驱动程序中执行,即 wpa_supplicant 发送扫描请求,驱动程序执行扫描并提供扫描结果。

我的问题是,wpa_supplicant 不能生成必要的数据包并使用例如第 2 层(rawsocket)向 AP 发送身份验证请求是否正确?然后是一个关联请求?...是否应该简单地提供这些作为驱动程序层的句柄?

从 wpa_supplicant.c 中的代码可以看出(void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,struct wpa_bss *bss,struct wpa_ssid *ssid))

该函数调用指向所选驱动程序的函数指针,例如。“.associate = wpa_driver_nl80211_associate”,然后驱动程序将其发送到 udnerlaying nl80211 驱动程序代码?....所以 wpa_supplicant 不能自己生成这些数据包?

我希望这有任何意义,如果没有,请询​​问:)

4

1 回答 1

1

是的,你的理解是正确的。为了发送 auth/assoc req,wpa_supplicant 应该在以下不同的场景中构造相应的 NL80211 命令: a) 如果 SME 维护在 wpa_supplicant 中

  • NL80211_CMD_AUTHENTICATE
  • NL80211_CMD_ASSOCIATE

b) 如果 SME 由司机维护

  • NL80211_CMD_CONNECT

并且这些命令会触发wifi驱动注册的相应cfg80211_ops hooks(.auth, .assoc, .connect)被调用来构造帧然后发送帧。

于 2016-03-13T14:29:05.157 回答