Android热点连接管理(二)

本文介绍如何在Android中获取未成功连接到热点的客户端MAC地址。由于WifiDevice类仅提供已连接设备信息,作者通过分析hostapd消息发现,连接尝试信息包含在ap_sta_set_authorized函数发送的消息中。通过在ap_sta_set_authorized中定义BLACKLISTED状态,并在interfaceMessageReceived方法中更新,将所有BLACKLISTED设备存储到HashMap。此外,添加了一个新接口用于查询曾尝试连接但未成功的STA地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      接着上一篇一开始提出的问题,如何获取没有连接成功的客户端信息,主要指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))
            return;
这个双非,真让人
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值