我正在创建一个无法访问 Internet 的访问点。用户可以查看本地托管在 Raspberry Pi 上的内容
我想要一个用户可以在 Facebook 上分享内容的起点。此时,我需要将他们从 WiFi 网络中踢出,以便他们可以使用自己的 3G/4G 连接。
如何在不重新启动 hostapd 的情况下立即强制关闭接入点的 MAC 地址?
我正在创建一个无法访问 Internet 的访问点。用户可以查看本地托管在 Raspberry Pi 上的内容
我想要一个用户可以在 Facebook 上分享内容的起点。此时,我需要将他们从 WiFi 网络中踢出,以便他们可以使用自己的 3G/4G 连接。
如何在不重新启动 hostapd 的情况下立即强制关闭接入点的 MAC 地址?
您可以使用 hostapd_cli 命令来控制 hostapd 守护进程。要强制客户端关闭 wifi,您可以使用“取消关联”或“取消身份验证”命令。
hostapd_cli deauthenticate 00:5e:3d:38:fe:ab
确保您在 hostapd 配置中正确设置了 ctrl_interface!
默认是这样的:
ctrl_interface=/var/run/hostapd
不过,它是否会立即重新连接取决于客户端。这可以通过使用 iptables 过滤他的数据包来“补救”,这样他就不再获得 IP,因此很可能不会再次尝试连接。
注意:使用 iptables 执行后者可能会使客户端将您的 AP“列入黑名单”,至少在一段时间内如此!
注意 2:如果您没有为 DHCP 服务器提供默认路由,则根本不需要断开它们与 wifi 的连接。尽管大多数设备(智能手机)都会完全避开 wifi,因为这不是他们所期望的(互联网连接)。
就像 Badmaster 的回答一样,在我的情况下,客户端将尝试重新连接到 AP 并且它已连接。但在我的情况下,我想强制客户端断开连接,并且 AP 在重新连接时不会接受它。
所以我只是在函数的相关函数中添加了一些代码disassociate
,然后在函数中调用hostapd_drv_sta_disassoc()
文件ctrl_iface_ap.c
中的函数hostapd_ctrl_iface_disassociate
。我添加了将客户端的mac地址添加到mac拒绝列表的代码hapd->conf->deny_mac
。在使这些代码工作之前,您应该确保文件中的 mac 访问控制设置hostapd.conf
是正确的。
然后 then 命令hostapd_cli deauthenticate 00:5e:3d:38:fe:ab
可以强制客户端断开连接,并且不会再次连接。
同时,我创建了一个函数,从 mac 拒绝列表中删除 mac 地址,以允许 Client 连接。
修改源代码示例如下:
防止您的 sta 自动重新加入网络,在 'hostapd_cli deauthenticate' cmd之前,您可以运行下面的 cmd 以启用允许的 macaddr list hostapd_cli macaddr_acl 1
假设 macaddr 没有被添加到允许列表中,它将被阻止加入。
稍后通过禁用它,hostapd_cli macaddr_acl 0
以便 sta 可以加入