【问题标题】:Captive Portal Page with MITM带有 MITM 的强制门户页面
【发布时间】:2015-06-01 14:36:11
【问题描述】:

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

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

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

访问浏览器时,他们会看到门户页面,但行为缺失。 (连接到 Wi-Fi 然后会出现一个自动弹出窗口,提示您需要登录网络)。

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


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

塔尔。

【问题讨论】:

  • 您需要通过 DHCP/DNS 将您的 WiFi 接入点连接到另一台计算机。设置它更像是一个服务器配置问题(与编程相比),最好在其他地方问。
  • 我正在以编程方式进行,这就是为什么在这里问。我有一个 python dns 代理,它将所有请求指向我计算机的 apache 服务器,显示热点登录页面,但设备上没有触发任何内容。 (即使 dns 代理运行良好,也没有“您需要登录”消息)。

标签: android apache dns


【解决方案1】:

你的问题我不是很清楚。

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

我会试着从我认为你问的问题来回答: 对于浏览器,您可以使用 DNS 或 ICMP 将客户端重定向到您的 Captive Portal。 ICMP 是第 3 层协议,某些平台(如 Android)可能会自动向用户触发本机通知,例如“嘿,您需要登录”。但 DNS 重定向不会触发此操作,它需要用户在连接到网络后与浏览器进行交互。他们会打开浏览器,尝试访问 stackoverflow.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();
        }
    }
}

【讨论】:

  • 感谢您的回复,相信我完全理解这个话题。在连接到热点时自动从路由器内部(通过 DNS 触发的强制门户)执行此操作时,会将通知推送到设备。使用 MITM 应用程序执行此操作时,它不会。我是用电脑做的,用以太网线连接到路由器。
  • 查看触发事件的代码会很有帮助。我怀疑你的脚本有问题,或者某处的防火墙丢弃了事件。
  • 我检查了它,进入 MITM,ping 到所有网站,所有网站都返回例如 192.168.2.100(这是我的本地 apache)。进入浏览器我得到了正确的结果(我的本地 apache) - 但没有任何东西触发“你需要登录才能获得互联网连接”
【解决方案2】:

解决方案:

可能性一:

你的路由器需要有一个非常具体的配置,因为他是你的微型计算机的中继,而且我猜你的微型计算机是通过路由器上网的,你还需要考虑到这一点

  • 禁用路由器上的 DNS 服务
  • 将路由器上的 DNS 设置为 10.0.0.2
  • 禁用路由器上的 Internet 网关或将其设置为 10.0.0.2
  • 在您的微机上手动设置所有真实服务器/网关,在这种情况下,路由也非常重要。

可能性 2:

不要忘记某些设备的 DNS 是手动设置的,或者具有特定的网络配置,或者具有监视不常见 DNS 服务器/请求的特定防火墙,那么您必须考虑到这一点,避免这种情况的最佳解决方案是运行 DNS网关上的服务器 ip 这意味着您的 DHCP 服务器需要在迷你计算机上或在迷你计算机上使用网关或使用可能性 3... 这意味着检查您正在使用的网关我猜它是路由器网关.

另外你也有可能是router job和微机job有冲突,有的情况下客户端和微机之间的通讯被阻塞了ip冲突,那就检查一下你的ip配置吧。

可能性 3:

如果您的路由器是开源的或开源可转换的,您可以使用DDWRTOpenWRT 来管理您的热点,只需点击几下,您就可以将它们链接到您的微型计算机。服务器用于用户数据库或 dns 或代理或 dhcp 或将请求重定向到您的微型计算机或其他任何东西。

可能性 4:

看看这个 MITM Guide 并检查你是否遗漏了什么

注意:

如果我的回答没有帮助,请提供更多技术调试信息,因为除了对配置的描述之外,我们不太了解...我很乐意提供帮助:)...还提供完整的配置您的网络似乎是网络问题。

【讨论】:

  • 我可以在 stakoverflow 之外与您联系吗?我有一个具体问题不想在这里问。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-02-28
  • 2018-02-27
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多