强制门户如何在幕后工作,我如何在 Java 中编写一个以在 Windows 热点上使用?

How does a captive portal work under the hood, and how can I write one in Java to use on a Windows Hotspot?

我想创建一个强制门户,首先用于 Windows 热点,然后用于移动热点和所有 wifi 网络。所以我想了解强制门户网站在幕后是如何工作的,然后我如何在 Java 中开发一个门户网站。我知道Java套接字编程

什么是强制门户?

当无线客户端未被授权访问网络资源时,会显示身份验证屏幕。身份验证页面称为强制门户登录。

可以通过两种方式在客户端设备上触发强制网络门户

  1. DNS 重定向
  2. 初始页面

DNS 重定向就像简单的 DNS 劫持一样工作,其中所有用户 DNS 请求都被劫持并解析到强制门户登录页面。但是,在广泛使用 HSTS header 实施后,DNS 重定向的成功率很低,无法为用户提供更好的服务。

然而,初始页面的工作方式略有不同。它还使用 DNS 重定向,但它会响应请求 acc。欺骗 O.S 相信存在强制门户登录并强制 O.S 自动触发用户登录页面的操作系统。


什么是初始页面?

当客户端设备连接到 WiFi 时,如果未经授权访问互联网,将自动弹出一个屏幕显示强制网络门户。

Splash 页面不仅可以绕过大多数网站上的 HSTS 实现,还可以让您灵活地显示 O.S 特定的登录页面。


常规强制门户和启动页面的唯一区别是启动页面会自动拉出强制门户登录页面。然而,基于 DNS 重定向的方法需要用户手动打开网站。

想象一下,如果用户只使用移动应用程序,用户怎么知道他需要登录?如果您是黑客,您将失去您的受害者,因为该设备会在无法访问互联网时自动断开连接。因此,这使我们找到了更好、更灵活的选项来触发强制门户登录页面,启动画面。

作为业务运营商,您可以向不同的客户端设备显示不同类型的服务,而作为攻击者,您可以自动识别受害机器并相应地提供有效负载。我将展示它的症结所在,并根据您的创造力和要求实现。


不同的客户行为:

每个操作系统都有自己不同的检测 Internet 访问的方式。
机制基本上是这样的:

GET/POST http://foo.ir/bar.html
If bar.html == [expected content] > Open Internet
If bar.html != [expected content] > Captive Portal
If bar.html[status] != SUCCESS > No Network

如果 Captive Portal 不存在,结果将与预期相匹配,OS 将知道可以完全访问 Internet。

如果 URL returns 的结果不是预期的结果,那么 OS 将检测到存在强制门户并且需要它来继续进行身份验证为了获得对 Internet 的完全访问权限:在这种情况下,OS 将自动打开初始页面。

所有客户端设备都使用 above-described 策略来确定它们是否位于强制门户之后,但 URL 可能会因智能手机、平板电脑、笔记本电脑的具体型号以及具体 OS 版本。在下文中,您可以找到每个模型为了检测强制门户而联系的域列表。


每个设备,也 Android 不同的制造商,行为不同。例如,查看 this list

xperia z5:
connectivitycheck.gstatic.com:80
clients3.google.com:80
---------------------
galaxy j3 2016:
172.217.21.14:80
connectivitycheck.android.com
---------------------
galaxy j7 2015:
172.16.98.10:80
connectivitycheck.gstatic.com:80
---------------------
galaxy note4:
nothing!
---------------------
ios 11:
captive.apple.com/hotspot-detect.html
---------------------
windows 10:
www.msftconnecttest.com

此列表显示了我在不同设备上的测试。但是,android 设备、Windows 操作系统、iOS 版本的不同版本在您的测试中会有所不同,在这种情况下。
Source