ESP8266 ベースのセンサーを、キャプティブ ポータルで保護された Wi-Fi ネットワークに接続したいと考えています (他に選択肢がなく、例外を求めることはできません)。接続するためのログイン/パスワードがあります。
基本的なコンピューターから、ネットワークに接続してインターネット リクエスト (たとえば、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>
したがって、このページでは、実際にはセッションの 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>
ここで、ユーザーとパスワードを入力すると、それらがサーバーに送信され、サーバーは空白のページを OK で返します。
したがって、ESP8266 からこの手順を実行したいと思います。私は2つのステップでそれを見ます:
- ページをリクエストする
- 結果を取得して魔法を保存する
- 「同意」リクエストページを偽造する
- 「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/
それで、私はそれでそれをして答えを投稿するかもしれませんが、最初に上記の「偽の」リクエストを作成する方法についての手がかりが必要です.
何か案は ?