android - 带有 MITM 的强制门户页面

标签 android apache dns

我有一台微型计算机,用于在客户登录 Wi-Fi 网络时向他们显示一个门户页面。

问题是,由于某种原因,他们无法从手机/PC 上获得通常的弹出窗口,而当我对路由器执行相同的操作时,它会正常工作。

我正在通过将所有 dns 请求传输到本地网络(即 10.0.0.2)来完成整个过程。

当转到浏览器时,他们会获得门户页面,但缺少行为。 (连接到 Wi-Fi 后会自动弹出提示您需要登录网络)。

在本地 Apache 上,我有一个简单的 index.php 文件,状态代码为 401(未授权)。


微型计算机通过以太网端口连接到路由器,我可以完全控制路由器,但我希望从微型计算机本身管理强制网络门户,这就是为什么我不使用基于路由器的原因强制门户。

塔尔。

最佳答案

我不是很清楚你的问题。

您使用的是手机/PC 上的浏览​​器还是应用程序?您能否提供预期行为的屏幕截图?

我会尝试根据我认为您的问题来回答: 对于浏览器,您可以使用 DNS 或 ICMP 将客户端重定向到您的 Captive Portal。 ICMP 是第 3 层协议(protocol),某些平台(如 Android)可能会自动向用户触发 native 通知,例如“嘿,您需要登录”。但 DNS 重定向不会触发此操作,它需要用户在连接到网络后与浏览器进行交互。他们会打开浏览器,尝试访问 stack overflow.com 并重定向到您的强制门户。

此外,对于 Android 上的应用程序,您必须检查 URL 连接。这是一个取自 AOSP 的示例:

private static final String mWalledGardenUrl = "http://clients3.google.com/generate_204";
private static final int WALLED_GARDEN_SOCKET_TIMEOUT_MS = 10000;

private boolean isWalledGardenConnection() {
    HttpURLConnection urlConnection = null;
    try {
        URL url = new URL(mWalledGardenUrl); // "http://clients3.google.com/generate_204"
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setInstanceFollowRedirects(false);
        urlConnection.setConnectTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
        urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);
        urlConnection.setUseCaches(false);
        urlConnection.getInputStream();
        // We got a valid response, but not from the real google
        return urlConnection.getResponseCode() != 204;
    } catch (IOException e) {
        if (DBG) {
            log("Walled garden check - probably not a portal: exception "
                    + e);
        }
        return false;
    } finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
    }
}

关于android - 带有 MITM 的强制门户页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576319/

相关文章:

dns - "Send Mail As"功能在 Gmail 中如何工作(在技术层面)?

c - 验证电子邮件域的更好方法?

android - MPAndroidChart LineChart 自定义突出显示可绘制

android - 在 Android 上实现应用内购买

android - 接近传感器在屏幕关闭时不起作用?

java - 如何将一堆照片同步到 firebase

Apache 模块可以在运行时注入(inject)配置吗?

java - 从 apache HttpResponse 获取响应 Uri 参数

java - 为什么 Apache Tomcat7 在设置虚拟主机后无法启动?

Android,SocketAddress 和套接字的问题。反向查找?