【要約】Akamai Stagingをスマホ実機で検証したかったが、Windows ARM64でmitmproxyが入らなかったので自作した [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がAkamaiのプロパティ変更をモバイル実機で検証しようとした際、端末の制限とPC環境の制約により、名前解決の制御が困難になった。具体的には以下の問題に直面した。
- ・Android端末の/system/etc/hostsは、root権限がないと編集できない。
- ・DNS書き換えアプリ(personalDNSfilter)では、期待通りにマッピングが機能しなかった。
- ・Windows ARM64環境では、定番のmitmproxyが依存ライブラリのビルド失敗により導入できなかった。
// Approach
開発者はPCをプロキシとし、スマホの通信をPC経由で流す手法を採用した。これによりPCのhosts設定を強制的に適用できる。
- ・Pythonの標準ライブラリのみを用い、依存関係を排除したプロキシを実装した。
- ・socket.create_connection()を利用し、PCのOSリゾルバを介して名前解決を行う。
- ・HTTPS通信に対してはCONNECTメソッドによるTCPトンネリングを行い、証明書不要で中継する。
// Result
自作プロキシにより、特定のドメインのみをStaging IPへ、その他を本番IPへ正確に振り分ける環境を構築できた。
- ・対象ドメインが正しくStaging IPに解決されることをログで確認した。
- ・mitmproxyが動作しないARM64環境でも、最小限のコードで検証環境を構築できた。
- ・DNS書き換えアプリでは困難だった、解決結果の可視化を実現した。
Senior Engineer Insight
> 既存ツールが動作しない特殊環境下で、原理原則に基づき最小構成で解決を図る判断は極めて正しい。依存関係を排除し、標準ライブラリのみで目的を達成するアプローチは、環境構築のオーバーヘッドを最小化する。ただし、本実装は認証やアクセス制限がないため、あくまでローカルな検証用途に限定すべきだ。実戦では、ログの信頼性を疑い、ping等の低レイヤーな手段で事実を確認する姿勢が不可欠である。