3

我正在尝试制作一个没有互联网连接的设备,它将任何连接到其 wifi 的连接重定向到一个独特的页面,一个海盗盒之类的。我使用 NodeJS 服务器和 dnsmasq 将所有连接重定向到服务器。这工作得很好,但是当我尝试连接 Android 或 iOS 智能手机时,它会将其检测为强制门户,并且页面显示在身份验证弹出窗口中。

我看到该设备尝试连接到某些 IP,如果没有响应,则假定连接是通过强制门户进行的。

有没有办法避免这种情况?

非常感谢!

编辑:我找到了“白名单”的页面列表:

Android Captive Portal Detection:
Domain names to white list:
clients3.google.com

iOS for iPhone:
iPhone is more complicated, since it uses many different domain names, maybe for load balancing. It also changed its strategy using different domain names through different O.S. versions.
iOS 6:
Domain names to white list:
gsp1.apple.com
*.akamaitechnologies.com
www.apple.com
apple.com

iOS 7:
Domain names to white list:
www.appleiphonecell.com
*.apple.com
www.itools.info
www.ibook.info
www.airport.us
www.thinkdifferent.us
*.apple.com.edgekey.net
*.akamaiedge.net
*.akamaitechnologies.com


Windows Desktop O.S.
Domain names to white list:
ipv6.msftncsi.com
ipv6.msftncsi.com.edgesuite.net
www.msftncsi.com
www.msftncsi.com.edgesuite.net
teredo.ipv6.microsoft.com
teredo.ipv6.microsoft.com.nsatc.net

但是由于我的设备没有真正连接到互联网,我该如何发送这些页面?

4

1 回答 1

0

它会在弹出窗口中显示重定向页面,因为设备发出的请求(http 探测)以确定它是否位于强制门户之后并没有返回预期的成功消息。

另请参阅:https ://serverfault.com/questions/679393/captive-portal-popups-the-definitive-guide/

如果您想避免弹出窗口,但不允许 http 探测通过,那么您必须返回与 http 探测所期望的相同的成功消息 - 这会使其误以为它不在强制门户后面。

如果您没有返回 http 探针尝试获取的成功消息,它将认为它位于强制门户后面。有时成功消息只是“HTTP 200 OK”。

因此,为了欺骗它,您需要记录来自所有设备的 http 探测正在创建的 URL。将这些结果存储在执行重定向的路由器上。在封闭网络中,每当探测到其中一个 URL 时,都会返回预期的成功消息。该设备将认为它具有完整的 Internet 访问权限,并且不会弹出强制门户登录窗口。

如果您想让强制门户登录页面出现在设备上的强制门户身份验证弹出窗口中,只需将所有 HTTP 请求重定向到登录页面。设备登录后,所有来自 http 探针的 URL 都需要返回预期的成功消息,否则将继续假设设备未成功登录强制门户,并继续显示身份验证弹出窗口-向上。

于 2017-08-08T20:05:34.153 回答