接着上一篇一开始提出的问题,如何获取没有连接成功的客户端信息,主要指MAC地址,其他的信息未必拿得到。
WifiDevice类是指望不上了,因为它只代表连接成功的客户端。
不过从前面的分析可以看出来,连接成功的客户端信息,全部来自于hostapd发送的消息中携带了我们所需的信息。
找找消息是从哪发来的?ap_sta_set_authorized(struct hostapd_data *hapd, struct sta_info *sta, int authorized)
中发送的。
<pre name="code" class="java"> if (authorized) {
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_CONNECTED "%s", buf);
if (hapd->msg_ctx_parent &&
hapd->msg_ctx_parent != hapd->msg_ctx)
wpa_msg_no_global(hapd->msg_ctx_parent, MSG_INFO,
AP_STA_CONNECTED "%s", buf);
sta->flags |= WLAN_STA_AUTHORIZED;
} else {
wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_DISCONNECTED "%s", buf);
if (hapd->msg_ctx_parent &&
hapd->msg_ctx_parent != hapd->msg_ctx)
wpa_msg_no_global(hapd->msg_ctx_parent, MSG_INFO,
AP_STA_DISCONNECTED "%s", buf);
sta->flags &= ~WLAN_STA_AUTHORIZED;
}
就这个里,什么时候发送connect和disconnect已经很清楚了,不过这里是连接成功的,连接失败的走不到这里,看看这段代码的上面。
if (!!authorized == !!(sta->flags & WLAN_STA_AUTHORIZED))
re