httptap は、Linuxプログラムが実行する HTTP および HTTPS リクエストを簡単に確認できるツール
httptap -- を使って、特定のコマンドのネットワークリクエストを追跡できる
- たとえば
curl コマンドで特定の URL にリクエストを送ると、httptap はそのリクエストとレスポンスを出力する
httptap は root 権限を必要とせず、システム全体にも影響しない
- 現時点では Linux でのみ動作し、他の OS への移植は難しい
- インストール方法
- クイックスタート
curl コマンドで HTTP リクエストを送り、httptap でリクエストとレスポンスを確認できる
-L オプションでリダイレクトを追跡する場合、追加の HTTP リクエストが発生する
- Google Cloud と kubectl の使用例
gcloud compute instances list コマンドを使って Google Cloud のコンピュートインスタンスを一覧表示する際に発生する HTTP リクエストを追跡できる
kubectl get all コマンドを使って Kubernetes クラスターのリソースを一覧表示する際に発生する HTTP リクエストを追跡できる
- DNS-over-HTTP
curl の --doh-url オプションを使って DNS-over-HTTP リクエストを実行できる
httptap を使って DNS リクエストとレスポンスを確認できる
- HAR 出力
- HTTP リクエストとレスポンスを HAR ファイルとしてダンプできる
- HAR ファイルはさまざまなビューアで可視化できる
- 動作原理
httptap はネットワーク名前空間を使ってコマンドを分離環境で実行する
- TUN デバイスを作成してネットワークトラフィックを追跡し、HTTPS トラフィックを復号するために一時的な認証局を生成する
- 注意事項
- プロセスは着信ネットワーク接続を受信できない
/dev/net/tun へのアクセス権が必要
- すべての ICMP エコーリクエストは、実際のネットワークに ICMP パケットを送信せずにエコーされる
2件のコメント
it was developed at the Monastic Academy in Vermont in the US. We believe that a monastic schedule, and the practice of the Buddhist spiritual path more generally, provide ideal conditions for technological development.
Hacker Newsのコメント
READMEの「How it was made」セクションは、ツール自体と同じくらい興味深い
http_proxyと似た問題が発生する可能性があり、プログラムがその変数を無視することがある/etc/resolv.confにオーバーレイファイルシステムをマウントしているが、一時CAバンドルを使って/etc/ca-certificatesディレクトリをマウントするのも有効なのか気になるhttptapは、root権限なしで実行できるプロセス単位のHTTPトレーサー
httptap <command>で実行し、HTTP/HTTPSリクエストとレスポンスを標準出力に追跡できるroot権限なしでネットワークトラフィックを分析できる別のツールとして、rootless PodmanとPastaがある
--network=pasta:--pcap,myfile.pcapオプションを追加して、ネットワークトラフィックをPCAPファイルに記録するTUNデバイスを使うのはすばらしいアイデアで、「How it was made」セクションはGithub READMEの中でも最高クラス
nginx設定のデバッグにすぐ使うつもり
最近mitmproxyに似た機能を実装したが、トレードオフは異なる
LD_PRELOADを使う別の方法は、静的リンクされたELF、たとえばgolangバイナリでは失敗することがある
gVisorのユーザー空間TCP/IPスタックの見事な活用例
Mitmproxy v11.1でも同様のことができる