ESP32で作るIoTハニーポット
ESP32開発ボードでBLE広告と簡易HTTPを動かす記事に対応した学習ラボです。PCでのフラッシュ・シリアル観察、スマホでのBLE確認、監視用Piでのtcpdump観察を教材用サンプルで体験します。
この記事で得られること
このガジェットで何ができるかを短く説明します。ESP32開発ボードを使って、近くのスマホやスキャナが反応する「見せかけサービス」を出します。具体的には:
- BLE(Bluetooth Low Energy:低消費電力の近距離無線)広告を流す
- 簡易HTTPサーバを動かし、アクセスがあればログに記録する
- シリアルログと自宅ネットワーク内のパケットを観察して“誰が、どう試しているか”を学ぶ
専門用語は出たときに短く説明します。
準備と前提:デバイスとネットワークの範囲
対象デバイス/前提:
- 実機:Espressif ESP32‑DevKitC(ESP32‑WROOM‑32等)などUSBで書き込みできる開発ボード
- 操作場所:操作用PC(Windows/macOS/Linux)でArduino IDEまたはESP‑IDFを使用してビルド・フラッシュ
- 観察範囲:実験は必ず自分のESP32と自分が管理するローカルネットワークで行ってください。第三者の機器や公衆網を巻き込まないこと。
注意:BLEやWi‑Fiの電波範囲は狭くはありません。近隣に影響が出ないよう家庭内で実施し、他人の機器へ意図的に接触しないでください。
ESP32に載せるハニーポットの設計

目的は“呼び水”を作ることです。ESP32は二つの見せかけを同時に出します。
- BLE広告:端末が近くでスキャンすると反応します。これは「ビーコン」と呼ばれる短い告知です。
- 簡易HTTP:Wi‑Fi接続後にブラウザやスキャナがアクセスしてくることを想定した小さなWebページ
観察ポイントはシリアルログ(ESP32の出力)と、同一APに接続した観察用機(Raspberry Pi等)でのパケットキャプチャです。次に図で全体像を示します。
ESP32に載せるハニーポットの設計(図)
[ここに概念図が自動挿入されます]
ファームの最小サンプル(BLE広告+簡易HTTP)

まずはArduinoコア向けの最小サンプルを示します。これは学習用の簡素な例です。
操作用PC / Arduino IDE スケッチ
#include <WiFi.h>
#include <WebServer.h>
#include "BLEDevice.h"
const char* ssid = "your_ssid"; // 実験用の自宅AP
const char* password = "your_pass";
WebServer server(80);
void handleRoot(){
Serial.println("HTTP: / hit");
server.send(200, "text/plain", "Hello from honeypot");
}
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); }
Serial.println("WiFi connected");
Serial.print("IP: "); Serial.println(WiFi.localIP());
// BLE広告
BLEDevice::init("HG-Honeypot");
BLEAdvertising *pAdv = BLEDevice::getAdvertising();
pAdv->setScanResponse(false);
pAdv->setMinInterval(0x20);
pAdv->start();
Serial.println("BLE advertising started");
server.on("/", handleRoot);
server.begin();
Serial.println("HTTP server started");
}
void loop(){
server.handleClient();
}
説明:
- BLEDeviceはESP32用のBLEライブラリです。
- WebServerは簡易HTTPを提供します。
- 実行後、シリアルにIPアドレスや"BLE advertising started"が出れば動いています。
Interactive Lab
ここまでの記事の内容を、機材不要の仮想Labで試します。実機ではなく教材用のシミュレーションです。
記事の内容をもとにした仮想教材です。操作し、表示された結果を確認してください。
書き込みとシリアル観察の接続図(図)
[ここに接続図が自動挿入されます]
ESP‑IDFを使う場合は公式サンプル(esp-idf/examples/protocols)を参考に、BLEアドバタイズとHTTPサーバ(esp_http_server)を組み合わせます。ビルド・フラッシュ・モニタは次のコマンド例です。
操作用PC / ターミナル
# ESP-IDFプロジェクトのルートで
idf.py build
idf.py -p /dev/ttyUSB0 flash
idf.py -p /dev/ttyUSB0 monitor
注:ポート名はOSで変わります。WindowsはCOMx、macOS/Linuxは/dev/ttyUSBxや/dev/tty.SLAB_USBxなど。
ビルドと書き込み手順(Arduino / ESP‑IDF)
Arduino手順(要点):
- Arduino IDEでESP32ボードマネージャを入れる
- 上のスケッチを貼る。SSID等を書き換える
- ボード選択とポートを確認し「アップロード」
- シリアルモニタで115200bpsを見る
ESP‑IDF手順(要点):
- ESP‑IDFをインストール(公式ガイド参照)
- サンプルをコピーしてBLEとHTTPのコードを組む
- idf.py build / flash / monitor で書き込みと監視
観察方法:安全なローカル監視とパケット収集

目的は自分のネットワーク内で起きていることを可視化することです。手順例:
監視用Pi / ターミナル
# ESP32のIPが分かっている場合の簡単なtcpdump例
sudo tcpdump -i wlan0 host 192.168.1.50 -w esp_capture.pcap
説明:
- tcpdumpはパケットキャプチャツールです。
- wlan0などインターフェース名は環境依存です。
- キャプチャをWiresharkで開くとHTTPリクエストやIPのやり取りが見えます。
BLE観察はスマホのスキャンアプリや、PCのBLEスニファツールで行います。BLEは802.11と違ってパケットミラーが難しいため、近距離での観察が中心です。
ログの読み方と攻撃者が注目する手がかり
ログで見るべき簡単なポイント:
- BLE広告の表示頻度と内容(端末名やサービスUUID)
- HTTPのUser‑Agentやアクセスされたパス
- 短時間に何度も来るIPやMACアドレス(スキャンツールやボットの可能性)
具体例:シリアルに“HTTP: / hit”が連続して出れば、誰か(あるいはツール)が自動でURLを叩いています。User‑Agentがcurlやmasscanならスクリプトによる試行です。
運用上の注意と制限
- 範囲:必ず自分のESP32と自宅ネットワーク内だけで実施すること。他人の端末や公共ネットワークで行ってはいけません。
- 無害化:ハニーポットは観察用です。侵害や認証情報を誘導するような仕組みは作らないでください。パスワード要求やファイル受け取りを有効にしないこと。
- 法的側面:居住国の法律・プロバイダ規約に従ってください。意図せず第三者に負荷をかけると問題になります。
- 技術差:BLEやWi‑Fi挙動はモジュールの種類やファームウェアで変わります。ESP32‑C3とWROOMは違う動作をすることがあります。
まとめと次の一歩
このガイドではESP32を使い、BLE広告と簡易HTTPで“学習用ハニーポット”を作る基本を示しました。まずはArduinoスケッチで動作確認し、シリアルログとローカルパケットの二つの観察点を持つことが重要です。次は:
- ログに基づく簡単な解析(頻度、User‑Agent分類)
- ESP‑IDFでより細かいイベントログを取る
- 監視用Raspberry Piで長期キャプチャと可視化
関連リンク(Hack Gadget内):
- ESP32が反応する怪しいビーコンを試す
- Raspberry Piで自宅ネットワークを見える化
参考資料
今回使った機材・商品リンク
ここまでの内容を実際に試したい場合に、候補になる機材です。購入前に対応環境や仕様を確認してください。
USBシリアルで書き込み・シリアルログが簡単に取れる定番のESP32開発ボード。BLE/Wi‑Fi両対応でハニーポット実験に最適。