gpt4 book ai didi

arduino - 使用 ESP8266 连接到强制门户 wifi

转载 作者:行者123 更新时间:2023-12-04 23:42:37 24 4
gpt4 key购买 nike

我想在受强制门户保护的 wifi 网络上连接基于 ESP8266 的传感器(我没有其他选择,我不能要求克减)。
我有一个登录名/密码来连接。

在一台基本的计算机上,当我连接到网络并执行 Internet 请求时(例如,我在 google 上搜索“bl”),我得到了这样的页面:https://url:1003/fgtauth?12291a0aff04200a

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
...
</style>
<body>
<div class="oc">
<div class="ic">
<form action="/" method="post">
<input type="hidden" name="4Tredir" value= "https://www.google.com/search?q=test&ie=utf-8&oe=utf-8">
<input type="hidden" name="magic" value="12291a0aff04200a">
<input type="hidden" name="answer" value="0">
<h1 class="logo">
GENERAL CONDITIONS
</h1>
<p>
I. OBJET <br /> <br />
Some blabla..
</p>
<h2>
Do you agree to the above terms?
</h2>
<div class="fec">
<input type="submit" value= "Yes, I agree" onclick="sb('1')">
<input type="submit" value= "No, I decline" onclick="sb('0')">
</div>
</form>
</div>
</div>
<script>
function sb(val) {
document.forms[0].answer.value = val;
document.forms[0].submit();
}
</script>
</body>
</html>

所以,我们在这个页面中看到我们得到了一个“魔法值”,它实际上是 session 的 id。当我点击同意按钮时,我得到这个页面 https://url:1003/ :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
...
</style>

<title>
Firewall Authentication
</title>
</head>
<body>
<div class="oc">
<div class="ic">
<form action="/" method="post">
<input type="hidden" name="4Tredir" value= "https://www.google.com/search?q=bl&ie=utf-8&oe=utf-8">
<input type="hidden" name="magic" value="122713150676bec1">
<h1 class="logo">
Authentication Required
</h1>
<h2>
Please enter your username and password to continue.
</h2>
<div class="fer">
<label for="ft_un">
Username:
</label>
<input name="username" id="ft_un" style="width:245px">
<br>
</div>
<div class="fer">
<label for="ft_pd">
Password:
</label>
<input name="password" id="ft_pd" type="password" style="width:245px">
</div>
<div class="fer">
<input type="submit" value= "Continue">
</div>
</form>
</div>
</div>
</body>
</html>

在这里,我填写用户名和密码,它会将它们发送到服务器,然后返回一个空白页并确认。

所以,我想从 ESP8266 做这一步。我看到分两步:
  • 请求页面
  • 获取结果并存储魔法
  • 伪造“同意”请求页面
  • 伪造“user/id/magic”请求页面

  • 可以在此处找到请求 ESP8266 页面的示例:
    https://github.com/iobridge/ThingSpeak-Arduino-Examples/blob/master/Ethernet/Arduino_to_ThingSpeak.ino
    我们在这里看到,我们可以将 POST 请求发送为:
    client.print("POST /update HTTP/1.1\n");

    这里有一个解析页面的好例子: http://blog.nyl.io/esp8266-led-arduino/

    所以,我可能会这样做并发布答案,但首先我需要一些关于如何创建上述“假”请求的线索。

    有任何想法吗 ?

    最佳答案

    ESP8266 不仅能够使用 HTTPS,事实上最新的 ESP8226 Arduino 代码库包括一个 WiFiClientSecure 类,用于连接到 HTTPS 服务器。

    假设这个页面永远不会改变,并且您使用的是 Arduino 环境,您将需要编写一些基本功能。其中之一将是初始 GET您已经链接的功能,并检查您是否收到了您想要的页面,或者您是否被定向到门户。如果您被定向到门户,则需要编写等效的 POST函数发送“我同意”响应。

    现在,这个 POST函数将要求您将 HTTP 格式编码的有效负载发送到包含“答案”值的服务器 - 您可以在此处阅读该内容 http://www.w3.org/TR/html401/interact/forms.html#h-17.13 .由于您(可能)不希望页面发生变化,您可以将其硬编码为如下所示:

    client.println("POST / HTTP/1.1");
    // $PORTAL_HOST should be the host of the captive portal, e.g. 10.1.1.1
    client.println("Host: $PORTAL_HOST");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Content-Length: 8");
    client.print("\n");
    client.print("Answer=1");

    发送该有效负载后,您应该会收到辅助用户/密码页面。从那里通过 indexOf 提取魔法/ session 很简单。/ substring或类似的东西,然后用你现在提取的数据(如果需要)重复上面的代码。

    如果您需要更好地了解要发送的确切内容,我建议您打开浏览器上的调试/网络选项卡,并观察浏览器在定向到此门户页面时发送的确切数据。您将希望尽可能地模拟这一点。

    关于arduino - 使用 ESP8266 连接到强制门户 wifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33343273/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com