パケットの気持ち(透過型プロキシの有無を調べる)

パケットの気持ちになって透過型プロキシの有無を調べたい!

まずは透過型プロキシの復習.

ユーザはウェブサーバにアクセスしているつもりでも,中継ルータが強制的にプロキシサーバに向けてしまう.
つまり,ウェブサーバだと思っていた通信相手は実はプロキシサーバだったんだよ!!!
ってことが観測できれば私の勝ち.

ここでユーザから送信されるパケットの気持ちになって考えると,ウェブサーバ(破線)かプロキシサーバ(実線)との通信で何が違うかというと,サーバまでのホップ数が違う.ホップ数が違うってことは,サーバから戻ってくるのパケット(ACKとか)のTTLが違うはず!!!

サーバからのパケットのTTLを予想:

  • プロキシサーバがある場合:TTL=62(ユーザ〜プロキシサーバ間のルータは2台なので64-2)
  • プロキシサーバがない場合:インターネット経由なので,62よりもずっと小さい

という予想の元で,やってみた.

環境

上図の環境でやってみた.

ウェブアクセスは

hping3 -c 1 -S -p 80 www.freebsd.org

でやった.最低限のパケットキャプチャで済むので,キャプチャ解析がやりやすい.

まずはプロキシサーバがある場合


TTL=62で予想通り!!!

続いてプロキシサーバがない場合


TTL=62よりずっと小さいので,こちらも予想通り!!!

ちなみにプロキシサーバを介さないであろう icmp のパケットも覗いてみた.


プロキシサーバが無い場合と同じTTL.言い換えると,サーバから来るicmpパケットのTTLと,ウェブアクセスでサーバから来るパケットのTTLが一緒だとプロキシサーバが無い.違う値だとあるってことがわかる.

まとめ

pingあたりを打って,echo-replyのTTLを調べた後,適当にウェブアクセスをしてサーバから来るパケットのTTLをみて,同じならプロキシサーバ無し,違うならプロキシサーバあり.