Embedded Test 11 · Wi-Fi とネットワークをつつく — IP が喋る機器

Chapter 11

Wi-Fi とネットワークをつつく — IP が喋る機器

この章のゴール.

Wi-Fi や有線 LAN を持つ組み込み機器を、ネットワーク側から観測・テストする—— 何のポートを開け、どんなプロトコルを喋り、どう振る舞うかを、 スキャン・パケットキャプチャ・API 叩きで外から確かめられるようになること。

この章で使う既出の用語(定義は各リンク先). オラクル(01 章 8 節)、デバッグポート(01 章 2 節)、SDR(02 章 4 節)、I²C(06 章 1 節)、SPI(06 章 1 節)、接続(09 章 2 節)、ファジング(10 章)

1. ネットワーク機器という広い面

Wi-Fi が載った瞬間、機器はIP ネットワーク上のサーバ/クライアントになる。BLE と違って、ここには成熟した道具(nmap、Wireshark、curl、mitmproxy)が山ほどあり、PC 側の経験をそのまま流用できる。反面、面(テスト対象)が急に広がる: TCP/UDP ポート、HTTP API、MQTT、mDNS、クラウド連携……。生成 AI 製ファームは「とりあえず動くサーバ」を建てがちで、余計なポートや無防備な API が残りやすい。

Wi-Fi が載ると PC 用の道具がそのまま使える① スキャン地図を描くnmap / mDNS② キャプチャ会話を覗くWireshark③ プロキシ割り込むmitmproxy④ API 叩き直接試すcurl / MQTT面が一気に広がる(TCP/UDP ポート・HTTP API・MQTT・mDNS)。余計なポートや無防備な API が残りやすい
図11-1 ネットワークテストの 4 段階。

2. まず地図を描く — スキャンと発見

対象がどこにいて何を開けているかを最初に把握する。

nmap -sV -p- 192.168.1.50      # 全ポートを走査してサービス版を推定
avahi-browse -art              # mDNS で広告されているサービスを列挙

3. 会話を覗く — パケットキャプチャ

I²C/SPI をロジアナで覗いた(06 章)のと同じ発想を、ネットワークで行うのがパケットキャプチャである。

PC を「間」に置いて会話を覗く・書き換えるテスト対象(機器)PC(観測/改変)Wiresharkmitmproxyサーバ / クラウド本物 or 偽物平文の秘密が流れていないか、意図しない接続先がないか。応答を異常値に差し替えて反応も試せる
図11-2 中間者としてのパケット観測・注入。

平文で秘密(トークン、測定値)が流れていないか、想定外のサーバ(解析用の外部ホスト)へ繋いでいないか——キャプチャは設計ミスをよく暴く。

4. 間に割り込む — プロキシと中間者

HTTP/HTTPS API を叩く機器なら、PC を中間に置いて通信を観測・改変できる。

中間者(man-in-the-middle) とは、通信の当事者の間に割り込んで内容を読む/書き換える立場のこと。攻撃手法の名だが、テストでは正当な観測・注入の手段として使う(自分の機器を、自分の PC 経由で通す)。

5. API を直接叩く

機器が REST API や WebSocket、MQTT を提供するなら、それは外から呼べるテスト面である。

import requests
r = requests.get("http://192.168.1.50/api/status", timeout=3)
assert r.status_code == 200 and r.json()["state"] == "idle"   # オラクル
requests.post("http://192.168.1.50/api/cmd", json={"n": 10**9})  # 境界値攻め

6. 接続の乱れに耐えるか

BLE(10 章)と同様、ネットワークの異常への耐性が重要。

7. 何をオラクルにするか

8. 手を動かす

ポートとレイテンシを観測する


この章のポイント