2009年9月11日金曜日

真偽判定(1)ーホスト名を判定する関数

 条件判定をするときに、基準とする指標としてあらかじめ用意された関数があります。大きく分けると以下のように分類できます。
  • ホスト名
  • IPアドレス
  • URL
  • 日時
 ここでは、ホスト名の判定について取り上げます。


■dnsDomainIs(host, domain)

 この関数は、アクセスしようとするURLのホスト名が、特定のドメイン名から委譲されたホストであるか(と一致しているか)を判定することができます。

例:
host = www.example.com のとき、

dnsDomainIs(host, ".com") は真を返します。
dnsDomainIs(host, ".org") は偽を返します。

 hostはURLである必要があり、ポート番号は取り除かれます。


localHostOrDomainIs(host, hostdom)

 この関数は、ホスト名もしくはドメイン名が、指定したFQDNと一致するかどうかの判定ができます。

例:
localHostOrDomainIs("www", "www.example.com") は真を返します。
localHostOrDomainIs("mail", "www.mail.example.com") は偽を返します。
localHostOrDomainIs("www.example.com", "www.example.com") は真を返します。
localHostOrDomainIs("mail.example.com", "www.example.com") は偽を返します。

 hostはURLである必要があり、ポート番号は取り除かれます。


isPlainHostName(host)

 この関数は、Windows OSでの「サッフィックス」に頼って、FQDNではないURLでアクセスしているかどうかの判定に用いることができます。

例:
isPlainHostName("www") は真を返します。
isPlainHostName("www.example.com") は偽を返します。

 hostはURLである必要があり、ポート番号は取り除かれます。hostがFQDNでなければ真を返します。正確には、URLのホスト名の部分に"."(ドット)が1文字以上含まれていると偽を返す関数です。

dnsDomainLevels(host)
 使用頻度として必ずしも高いと言えそうにありませんが、URLのドメイン名についてレベルの数を調べることができます。"."(ドット)の数を返します。

2009年9月8日火曜日

proxy.pacファイルの全体構成

Javascript言語で記述します。したがって、コメントを記述する方法は2種類あります。

// This is a comment.

/* This
is a
comment.*/


ファイルでは、決まった関数を定義します。関数名および引数の名前は以下の通りでなければなりません。

function FindProxyForURL(url, host)
{
// ここで条件判定とプロキシサーバの決定を行います
}


引数
  • url アクセスしようとしているURLが入ります。具体的には、プロトコルハンドラから、拡張子やCGIの末尾までの全体が入ります。
  • host アクセスしようとするホストの情報(FQDN, IP Address)が入ります。
条件判定が終了すると、アクセスを委任すべきプロキシサーバがどれなのかを指定しなければなりません。これを返却値として渡すことによって、目的を達成できます。

返却値の種類
  • DIRECT プロキシサーバを経由せずにブラウザが直接アクセスします
  • PROXY host:port プロキシサーバ(宛先ホスト:host, 宛先ポート番号:port)にアクセスを委任します

宛先ホストの値は名前解決できれば、IP Addressである必要もありません。

はじめに

 組織がインターネットへのWebアクセスを提供させるとき、イントラネットにキャッシュサーバを設置することが当たり前になっています。キャッシュサーバを設置する理由として、もともとは帯域幅が低速で高価格なWANの有効活用をするためにありましたが、有害サイトへのアクセス制限やフォレンジックのためのロギングとして使われるようになりました。
しかも、組織によってその利用形態は異なり、様々な理由でサーバを複数立てることは珍しくありません。そのためには、何らかの状況の違いによって委任先を振り分けする必要性があります。また、ユーザが設定をすることなく(意識せずに)キャッシュサーバへアクセスさせたい。これらを柔軟に実現できるのが、WPAD(Web Proxy Auto-Discovery Protocol)といわれるプロトコルです。
 ブラウザでの具体的な設定方法については@ITにあるものの、"proxy.pac"ファイルの記述(プログラミング)については簡素な例しか記載がありません。以前は、"proxy.pac"ファイルの文法は、「関連リンク」の項にあるNetscapeMicrosoftのリンク先を参照すれば詳細を知ることができました。しかし、残念なことに現在はいずれもリンク切れとなっており、頼れる他のWebサイトもないのが実情です。
 そこで、たまたま残していたアーカイブなどをもとに整理をして、皆様にご活用いただければとの思いから、このサイトを公開するに至りました。