安卓如何知道WiFi连接是否具有互联网访问权限

3
我工作的公司在城市周围建立免费wifi热点。为了连接到互联网,客户首先必须同意条款和条件,这是一个简单的表格,包括条款和接受按钮。在他们接受之前,他们无法获得完全的互联网访问权限。
我们遇到的问题是一些Android设备不再提示您使用“登录”表格,因为它们可以自动连接到wifi。相反,一个小的指示图标出现在左上角,说明需要进行额外的注册步骤才能获得互联网访问权限。同时,客户以为他们正在使用wifi上网,但实际上他们使用的是3G和移动数据,这会给客户带来费用。
我们提出的解决办法是通过让安卓设备使用的流量来伪造互联网访问,以便确定他们是否具有互联网访问权限。通过这样做,手机将不会使用客户的3G网络。相反,我们将阻止流量,直到他们弄清楚需要接受此电话中显示的小图标所指示的条款。这当然不是最好的解决方案,但它将有助于客户在月底不会收到意外的巨额账单。
我的问题是我们需要允许哪些流量才能使其工作?是否只是每个安卓手机在需要通过wifi查看互联网访问时使用的IP(对我来说听起来很不可能),或者它是如何工作的?

通过拦截安卓设备正在使用的流量来模拟互联网访问,以便确定它们是否具有互联网连接。抱歉,我不理解这是什么意思。发生了什么? - greenapps
无论wifi是否连接到互联网,是否可以在wifi上使用数据?据我所知,当启用wifi时,安卓会优先使用wifi而不是数据。 - Madhukar Hebbar
@GreenApps,它们已连接到互联网,但在接受条款之前访问受限。安卓手机以某种方式注意到没有互联网访问权限,我们唯一的解决方法是尝试连接到某个地方。如果我们允许该流量,它将使用WiFi连接进行互联网访问,并遵循我们的限制,直到他们接受条款为止。 - superhero
@JiangYD 所以,不同的设备使用不同的技术来检测其连接的WiFi是否提供互联网访问?如果手机正在使用WiFi,则应停用3G/4G,除非在某些特殊情况下已经违反了标准? - superhero
1
@ErikLandvall 第一个问题,我不知道。第二个问题,是的。 - Jiang YD
显示剩余5条评论
2个回答

16

这个问题有点老了,但我想分享一下我在实现自己的解决方案时对这个主题所学到的知识。

你想要做的基本上是一个强制门户。Android设备检测到强制门户请求一个特定的URL,目前是http://connectivitycheck.gstatic.com/generate_204。如果它们收到一个204响应,那么就有连接性;如果它们收到一个30x响应,那么就有一个强制门户阻碍了连接。在这种情况下,用户会在门户的登录页面上被提示接受条款或提供其他信息。

每次设备连接到网络时都会发生这种情况。一旦连接,它会继续检查以确保网络仍然具有可用连接(我不知道检查的时间间隔,但是它是几分钟)。

为了更好地进行调试,您应该记录客户端请求并查看它们在登录到您的网络时正在尝试访问什么。这是因为强制门户的概念很常见,并且每个客户端/平台都会请求自己的URL。

此外,您可以使用强制门户解决方案(如果还没有使用)。有许多可以实现您想要的功能的解决方案。只是举几个例子,看看NodosplashCoovaChilliWiFiDog


我接受你的回答,因为它是最接近问题的答案,但我的问题的真正答案是这是一个糟糕的问题 :) 我报告的行为是非标准的,正如江YD在我的问题的评论部分所解释的那样。 - superhero
1
好的,我只是想分享一些知识 :) - Diego Andrade

0

如果我理解正确,每次用户连接时都会要求确认。 如果是这样,解决方案将是使用类似于电话的MAC地址来识别用户并将其保留在数据库中,在用户尝试访问网络时进行检查。

这确实留下了重复MAC地址的(非常轻微的)可能性。 在这种情况下,第一个用户之后的新用户(对于给定的MAC地址)将永远不会被询问。

由于我不是Android程序员,我不知道提取每个新用户的MAC地址有多容易。 不指望它会很困难。


感谢您抽出时间回答,但这并没有解决问题。基本上,答案在评论中...因为这不是标准行为,所以没有答案...(现在有点喝醉了,不应该回复,但我知道否则我会忘记它) - superhero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接