避免强制门户

我试图做一个设备没有互联网连接,redirect到它的无线连接到一个独特的页面,像海盗一样的任何连接。 我使用NodeJS服务器和dnsmasq将所有连接redirect到服务器。 这是完美的工作,但是当我尝试与Android或iOS智能手机连接时,它将其检测为强制门户,并且页面显示在身份validationpopup窗口中。

我看到设备尝试连接到一些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 OS 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 OS 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 

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

它在popup窗口中显示redirect的页面,因为设备所做的请求(http探测)确定它是否在强制门户后面不会返回预期的成功消息。

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

如果你想避免popup窗口,但不允许HTTP探测通过,那么你必须返回相同的成功消息,http探测器所期待的 – 这会愚弄它,认为它不是一个强制门户后面。

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

所以,为了欺骗它,你需要logging来自所有设备的http探测的URL。 将这些结果存储在redirect的路由器上。 而在封闭的networking中,只要探测到这些URL中的一个,就返回预期的成功消息。 该设备将认为它具有完全的互联网访问,并不会popup强制门户login窗口。

如果您希望强制门户login页面出现在设备上的强制门户authenticationpopup窗口中,只需将所有HTTP请求redirect到login页面即可。 设备login后,所有来自http探测器的URL都需要返回预期的成功消息,否则会继续假设设备没有成功login到强制networking门户,并继续显示authenticationpopup窗口,向上。