68user's page 掲示板

Prev< No. 3450> Next  [最新発言に戻る] [過去ログ一覧]
No. 3450 # 68user 2003/12/06 (土) 05:31:08
>>3449 Mule
> $host = gethostbyaddr(pack("C4",split /\./,$addr),2) if($host eq '' || $host eq $addr);
逆引きに成功したら (つまりクライアントが FQDN を持って
いたら) proxy 経由でない、逆引きに失敗したら proxy 経由
という判定方法ですね。

これは proxy 判定にはなっていません。なぜなら技術的には、
      「FQDN を持つかどうかと proxy サーバであるかどうか」
は関係がないからです。

後は統計的に
      「proxy サーバは FQDN を持たないケースが多い」
と言えるかどうかですが、特にそういうこともないと思います。
むしろわたしは
      「proxy サーバは FQDN を持つ可能性が高い」
と思います。

> 素朴に疑問なのですが、最初にtelnetを起動して、接続元に
> 接続できるかどうかの判定を行わなければ、理屈的に無理
> なのでしょうか?
理屈的には、100% の精度の proxy 判定は不可能です。
ただ、完璧でなくていいなら、以下のような策はあります。

    1. proxy 特有のヘッダ、例えば以下のようなものが設定されて
          いるか調べる。
              HTTP_PROXY_CONNECTION
              HTTP_SP_HOST
              HTTP_VIA
              HTTP_X_FORWARDED_FOR

          http://taruo.net/e/ などで判定しているのはコレでしょう。
          http://www2s.biglobe.ne.jp/~cru/library/lq/index.html でも
          同様の判定を行っているようです。

          ただし、proxy サーバの管理者が適切に設定すれば、これらの
          ヘッダを渡さないようにすることは可能です。

    2. クライアント側の適当なポートに接続し、公開 proxy か
          どうか (誰でも接続できる proxy かどうか) 判断する。
          例えば 2ch ではこれをやっているんでしょう。
                http://info.2ch.net/guide/faq.html#F5

          ただし、以下のような欠点があります。
              - どのポート番号に接続するかは適当に決めなければならない。
                  全ポートをポートスキャンしていると時間がかかる。
              - あくまで「公開 proxy」かどうかの判定にしか使えない。
                  (世の中の proxy の大多数を占める) 特定のネットワーク内から
                  のみ使用可能な proxy は判定できない。
              - ポートスキャンは反社会的。やりすぎると相手からクレームを
                  付けられる可能性が高い。

    3. telnet・Java Applet などで直接接続させるよう仕向ける。
          詳しくは以下のサイトをどうぞ。
              http://akademeia.info/main/lecture3/tokubetu_IP_nuki.htm
              http://www.nurs.or.jp/~telnet/tips.html
                「telnetプロトコルによるIP抜き」

          ただしこれも反社会的です。いきなりこれをやられたら、
          わたしならそのサイトには二度と行きません。

普通は 1 でやめておくのがいいでしょう。2・3 は真面目な
ページでやるには過激すぎると思います。

Prev< No. 3450> Next  [最新発言に戻る] [過去ログ一覧]