避免俘虏门户

时间:2016-03-17 17:25:15

标签: node.js raspberry-pi dnsmasq captivenetwork captiveportal

我正在尝试制作一个没有互联网连接的设备,将任何连接到其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

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

1 个答案:

答案 0 :(得分:0)

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

另请参阅:Bazel binary

如果你想避免使用弹出窗口,但不允许http探测器通过,那么你必须返回http探测所期望的相同的成功消息 - 这会欺骗它以为它不在后面俘虏门户网站。

如果你没有返回http探针试图获得的成功消息,它会认为它是一个强制门户的背后。有时,成功消息只是一个HTTP 200 OK'。

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

如果您希望在设备上的强制门户网站身份验证弹出窗口中显示强制网络门户登录页面,只需将所有HTTP请求重定向到登录页面即可。在设备登录后,来自http探测器的所有这些URL都需要返回预期的成功消息,否则它将继续假设设备未成功登录到强制门户,并将继续显示身份验证弹出起来。