1

我正在编写一个应用程序,其中我想检查用户是否连接到接入点,但不允许网络访问(由于存在强制门户)。

以下 URL 是 Microsoft 的测试服务器,如果一切顺利,则返回 HTTP 200 ,内容为“Microsoft Connect Test” http://www.msftconnecttest.com/connecttest.txt

要将状态返回给用户,我想再次检查另一台测试服务器,它会在 HTML 响应中返回一些内容。

Google 有一个测试服务器为“ http://connectivitycheck.gstatic.com/generate_204 ”,但这会给出空的 HTML 响应。

Mozilla 和 Apple 提供了几个服务器,但都在 HTML 响应中返回“SUCCESS”。

为什么我不喜欢在 HTML 正文中仅返回“SUCCESS”的任何测试服务器,因为它不允许我测试内容篡改攻击的场景。

如果您知道任何其他标准服务器来测试强制门户,请回复...

~阿什什

4

2 回答 2

2

我知道这是一个非常古老的问题,但我可能会为其他登陆这里的人提供一些额外的信息。

尽管 Google generate_204 链接似乎什么也没返回,但它实际上返回了 204 状态。如果您的连接上有一个强制门户,您将不会收到 204 回复。

我们在我们的应用程序中使用它来检测强制门户,并且效果很好。我们的 API 上有一个“Hello”端点,它返回 204。

于 2020-01-09T16:59:57.613 回答
2

要知道您已连接到尚未通过身份验证的强制门户,您可以使用任何 https(基于 SSL/TLS 的 http)URL,因为强制门户将无法完成正确的握手,因为它没有与已由已知根 CA 或中间 CA 签名的有效 X.509 证书关联的密钥。此外,这可以保护您免受内容篡改攻击。

一旦通过强制门户的身份验证,您可以检查强制门户是否使用具有 HTTP/1.0 协议的任何 http URL 使用透明代理,因为大多数强制门户会寻找 « Host: » 标头(出现在 HTTP/1.1 ) 以获取您想要连接的真实主机。

于 2018-12-23T02:17:33.770 回答