带有 MITM 的强制门户页面
Captive Portal Page with MITM
我有一台微型计算机,用于在客户登录 Wi-Fi 网络时向其显示门户页面。
问题是由于某些原因,他们没有从 phone/pc 中获得通常的弹出窗口,而当我对路由器执行相同的操作时,它可以正常工作。
我正在通过将所有 dns 请求传输到本地网络(即 10.0.0.2)来完成整个过程。
当转到浏览器时,他们会看到门户页面,但缺少行为。 (连接到Wi-Fi后自动弹出提示需要登录网络)
在本地 Apache 上,我有一个简单的 index.php 文件,状态代码为 401(未授权)。
微型计算机通过以太网端口连接到路由器,我可以完全控制路由器,但我希望从微型计算机本身管理强制网络门户,这就是我不使用的原因基于路由器的强制门户。
总计
你的问题我不是很清楚
您使用的是 phone/pc 上的浏览器还是应用程序?您能否提供预期行为的屏幕截图?
我会尝试根据我认为您的问题来回答:
对于浏览器,您可以使用 DNS 或 ICMP 将客户端重定向到您的 Captive Portal。 ICMP 是第 3 层协议,某些平台(如 Android)可能会自动触发对用户的本机通知,如 "Hey you need to sign in"。但 DNS 重定向不会触发此操作,它需要用户在连接到网络后与浏览器进行交互。他们将打开浏览器,尝试进入堆栈 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();
}
}
}
解决方案:
可能性1:
你的路由器需要有一个非常具体的配置,因为他是你微电脑的中继,而且我猜你的微电脑是通过路由器上网的,你也需要把它带进去考虑
- Disable DNS Service on your router
- Set DNS on your router to 10.0.0.2
- Disable gateway to Internet on your router or set it to 10.0.0.2
- Set all real servers/gateway manually on your Micro-Computer, and also routes are very important in this case.
可能性2:
不要忘记某些设备的 DNS 是手动设置的,或者具有特定的网络配置,或者具有监视不常见 DNS 的特定防火墙 server/request 那么您必须考虑到这一点,这是避免这种情况的最佳解决方案是 运行 网关 ip 上的 DNS 服务器 这意味着您的 DHCP 服务器需要在迷你计算机上或使用迷你计算机上的网关或使用可能性 3...这意味着检查您的网关正在使用我猜它是路由器网关。
还有可能是你的router job和Micro-Computer Job有冲突,有的时候客户端和Micro-Computer之间的通信阻塞等ip冲突,检查你的ip配置。
可能性3:
如果您的路由器是开源的或可转换的开源路由器,您可以使用 DDWRT or OpenWRT 来管理您的热点,只需点击几下即可有大量可配置的热点,您可以 link您的微型计算机服务器用于用户数据库或 dns 或代理或 dhcp 或将请求重定向到您的微型计算机或其他任何东西。
可能性 4 :
看看这个 MITM Guide 并检查你是否遗漏了什么
注:
如果我的回答没有帮助,请提供更多技术调试信息,因为除了配置描述之外,我们了解的不多...我很乐意提供帮助:)...也提供完整的信息您的网络配置似乎是网络问题。
我有一台微型计算机,用于在客户登录 Wi-Fi 网络时向其显示门户页面。
问题是由于某些原因,他们没有从 phone/pc 中获得通常的弹出窗口,而当我对路由器执行相同的操作时,它可以正常工作。
我正在通过将所有 dns 请求传输到本地网络(即 10.0.0.2)来完成整个过程。
当转到浏览器时,他们会看到门户页面,但缺少行为。 (连接到Wi-Fi后自动弹出提示需要登录网络)
在本地 Apache 上,我有一个简单的 index.php 文件,状态代码为 401(未授权)。
微型计算机通过以太网端口连接到路由器,我可以完全控制路由器,但我希望从微型计算机本身管理强制网络门户,这就是我不使用的原因基于路由器的强制门户。
总计
你的问题我不是很清楚
您使用的是 phone/pc 上的浏览器还是应用程序?您能否提供预期行为的屏幕截图?
我会尝试根据我认为您的问题来回答: 对于浏览器,您可以使用 DNS 或 ICMP 将客户端重定向到您的 Captive Portal。 ICMP 是第 3 层协议,某些平台(如 Android)可能会自动触发对用户的本机通知,如 "Hey you need to sign in"。但 DNS 重定向不会触发此操作,它需要用户在连接到网络后与浏览器进行交互。他们将打开浏览器,尝试进入堆栈 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();
}
}
}
解决方案:
可能性1:
你的路由器需要有一个非常具体的配置,因为他是你微电脑的中继,而且我猜你的微电脑是通过路由器上网的,你也需要把它带进去考虑
- Disable DNS Service on your router
- Set DNS on your router to 10.0.0.2
- Disable gateway to Internet on your router or set it to 10.0.0.2
- Set all real servers/gateway manually on your Micro-Computer, and also routes are very important in this case.
可能性2:
不要忘记某些设备的 DNS 是手动设置的,或者具有特定的网络配置,或者具有监视不常见 DNS 的特定防火墙 server/request 那么您必须考虑到这一点,这是避免这种情况的最佳解决方案是 运行 网关 ip 上的 DNS 服务器 这意味着您的 DHCP 服务器需要在迷你计算机上或使用迷你计算机上的网关或使用可能性 3...这意味着检查您的网关正在使用我猜它是路由器网关。
还有可能是你的router job和Micro-Computer Job有冲突,有的时候客户端和Micro-Computer之间的通信阻塞等ip冲突,检查你的ip配置。
可能性3:
如果您的路由器是开源的或可转换的开源路由器,您可以使用 DDWRT or OpenWRT 来管理您的热点,只需点击几下即可有大量可配置的热点,您可以 link您的微型计算机服务器用于用户数据库或 dns 或代理或 dhcp 或将请求重定向到您的微型计算机或其他任何东西。
可能性 4 :
看看这个 MITM Guide 并检查你是否遗漏了什么
注:
如果我的回答没有帮助,请提供更多技术调试信息,因为除了配置描述之外,我们了解的不多...我很乐意提供帮助:)...也提供完整的信息您的网络配置似乎是网络问题。