このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
パケットをキャプチャして書き換えるのは、
ソフトウェアベースでは無理があるので、
FTP サーバプロキシを作成することにした。
もちろん、全部実装するような無駄なことはしたくないので、
基本的には全てそのまま、元の FTP サーバに転送する。
PASV を受けた場合のみ、ルータの持つ UPnP を利用して、
動的に NAPT テーブルを書き換えて、WAN 側 IP を返す。
C <=> P <=> S (クライアント、プロキシ、サーバ)
S から 227 Entering Passive Mode (192,168,0,77,5,55) を
受けた場合、S が待機するのはポート 1335(5 << 8 | 55)
P では UPnP を使いこれを WAN 側の適当なポートに割り当て、
C には 227 Entering Passive Mode (<WAN IP/Port>) を返す。
とはいうものの、ソケットの待機や最低限のコマンドの解析、
そして FTP の複雑さもあるので、結構いい練習になるかも。
幸い、家のルータは、UPnP NAT Traversal に対応していた。