android 如何知道 wifi 连接是否可以上网
How does android know if the wifi connection has internet access or not
我工作的公司正在镇上建立免费的 wifi 热点。要连接到互联网,客户首先必须同意条款和条件,这是一个包含条款和接受按钮的简单表格。在他们接受之前,他们不会被授予完全的互联网访问权限。
我们遇到的问题 是一些 android 设备,当您自动连接到 wifi 时,它们不再提示您使用此 "login" 表格。相反,一个小的指示图标会出现在左上角,表明在访问互联网之前需要额外的注册步骤。同时客户在使用互联网时认为他们使用的是 wifi,但实际上他们使用的是 3G 和移动数据,这让客户花钱。
我们提出的建议修复 是通过信件伪造互联网访问 android 设备正在使用的流量槽,以便能够确定它们是否有互联网与否。通过这样做,phone 将不会使用客户端的 3G 网络。相反,流量将被我们阻止,直到他们发现他们需要接受 phone 中的这个小图标所指示的条款。这当然不是最好的解决方案,但它可以帮助客户在月底不会收到意外的巨额账单:)
我的问题是我们需要允许什么样的流量才能工作?它只是世界上每个 android phone 每次需要查看他们是否可以通过 wifi 访问互联网时使用的 IP(对我来说这听起来不太可能),或者它是如何工作的?
如果我没理解错的话,用户每次连接时都会被要求确认。如果是这样,解决方案是使用类似电话的 MAC 的东西来识别用户并将其保存在数据库中,当用户尝试访问网络时该数据库会被检查。
这确实留下了重复 MAC 的(非常小的)可能性。在这种情况下,第一个(对于给定 MAC)之后的新用户将永远不会被询问。
由于我不是 android 程序员,我不知道提取每个新用户的 MAC 会有多容易。不要指望这会很困难。
这个问题有点老了,但我想分享一下我在实现自己的解决方案时对这个主题的了解。
你想做的基本上是一个强制门户。 Android 设备检测到请求特定 URL 的强制门户,当前为 http://connectivitycheck.gstatic.com/generate_204。如果他们收到 204 响应,则表示已连接。如果他们收到 30 倍的响应,则说明存在强制门户。在这种情况下,系统会提示用户使用门户的登录页面,他可以在其中接受条款或提供其他信息。
每次设备连接到网络时都会发生这种情况。连接后它会不断检查以确保网络仍然有可用连接(我不知道说检查的间隔,但它是几分钟)。
为了更好地调试,您应该记录您的客户请求并查看他们在登录您的网络时尝试访问的内容。这是因为强制门户的概念很普遍,每个 client/platform 都请求自己的 URL。
此外,您可以使用强制门户解决方案(如果尚未使用的话)。有很多可以完成你想要的。举一些例子,看看 Nodosplash、CoovaChilli 和 WiFiDog。
我工作的公司正在镇上建立免费的 wifi 热点。要连接到互联网,客户首先必须同意条款和条件,这是一个包含条款和接受按钮的简单表格。在他们接受之前,他们不会被授予完全的互联网访问权限。
我们遇到的问题 是一些 android 设备,当您自动连接到 wifi 时,它们不再提示您使用此 "login" 表格。相反,一个小的指示图标会出现在左上角,表明在访问互联网之前需要额外的注册步骤。同时客户在使用互联网时认为他们使用的是 wifi,但实际上他们使用的是 3G 和移动数据,这让客户花钱。
我们提出的建议修复 是通过信件伪造互联网访问 android 设备正在使用的流量槽,以便能够确定它们是否有互联网与否。通过这样做,phone 将不会使用客户端的 3G 网络。相反,流量将被我们阻止,直到他们发现他们需要接受 phone 中的这个小图标所指示的条款。这当然不是最好的解决方案,但它可以帮助客户在月底不会收到意外的巨额账单:)
我的问题是我们需要允许什么样的流量才能工作?它只是世界上每个 android phone 每次需要查看他们是否可以通过 wifi 访问互联网时使用的 IP(对我来说这听起来不太可能),或者它是如何工作的?
如果我没理解错的话,用户每次连接时都会被要求确认。如果是这样,解决方案是使用类似电话的 MAC 的东西来识别用户并将其保存在数据库中,当用户尝试访问网络时该数据库会被检查。 这确实留下了重复 MAC 的(非常小的)可能性。在这种情况下,第一个(对于给定 MAC)之后的新用户将永远不会被询问。 由于我不是 android 程序员,我不知道提取每个新用户的 MAC 会有多容易。不要指望这会很困难。
这个问题有点老了,但我想分享一下我在实现自己的解决方案时对这个主题的了解。
你想做的基本上是一个强制门户。 Android 设备检测到请求特定 URL 的强制门户,当前为 http://connectivitycheck.gstatic.com/generate_204。如果他们收到 204 响应,则表示已连接。如果他们收到 30 倍的响应,则说明存在强制门户。在这种情况下,系统会提示用户使用门户的登录页面,他可以在其中接受条款或提供其他信息。
每次设备连接到网络时都会发生这种情况。连接后它会不断检查以确保网络仍然有可用连接(我不知道说检查的间隔,但它是几分钟)。
为了更好地调试,您应该记录您的客户请求并查看他们在登录您的网络时尝试访问的内容。这是因为强制门户的概念很普遍,每个 client/platform 都请求自己的 URL。
此外,您可以使用强制门户解决方案(如果尚未使用的话)。有很多可以完成你想要的。举一些例子,看看 Nodosplash、CoovaChilli 和 WiFiDog。