web-dev-qa-db-ja.com

dnsResolveおよびisInNet関数の問題

Proxy.pacファイルがあります。

function FindProxyForURL(url, Host) {
  if (dnsResolve("ProxyServer") == "10.1.1.116")
    if (dnsDomainLevels(Host) == 0 ||
        isInNet(Host, "10.0.0.0","255.0.0.0") ||
        isInNet(Host, "125.0.0.0","255.0.0.0") ||
        isInNet(Host, "127.0.0.0","255.0.0.0") ||
        isInNet(Host, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(Host, ".muj.com") ||
        dnsDomainIs(Host, "sv.com.gt") ||
        dnsDomainIs(Host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}

は正常に機能していますが、proxy.pacのデプロイに時間がかかっているため、ナビゲーションのために不満を言うユーザーがたくさんいます。 dnsResolveisInNetが問題の原因のようです。このスクリプトを改善する他の方法はありますか?またはDNS解決を加速する方法は?

5
carloslone

組織内に複数のプロキシサーバーがあり、この.pacファイルはアドレス10.1.1.116のサーバーに固有であると想定されていますか?そうでない場合は、おそらくそのチェックを取り除くことができます。 FindProxyForURL()はリクエストごとに呼び出されるため、ブラウザーがdnsResolve()を作成する必要がある場合、DNSの動作状況によっては、ブラウザーをかなり長い時間ブロックする可能性があります。

dnsResolve()を呼び出す必要がある場合、それを回避する1つの方法は、FindProxyForURL()の外に移動することです。

_var myProxyServerIP = dnsResolve("ProxyServer");

function FindProxyForURL(url, Host) {
  if (myProxyServerIP == "10.1.1.116")
    if (dnsDomainLevels(Host) == 0 ||
        isInNet(Host, "10.0.0.0","255.0.0.0") ||
        isInNet(Host, "125.0.0.0","255.0.0.0") ||
        isInNet(Host, "127.0.0.0","255.0.0.0") ||
        isInNet(Host, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(Host, ".muj.com") ||
        dnsDomainIs(Host, "sv.com.gt") ||
        dnsDomainIs(Host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}
_

この変更により、dnsResolve()が呼び出されるのは、ブラウザにリクエストが行われるたびではなく、.pacファイルが読み込まれたときにのみ呼び出されるようになります。そのアドレスが変更される頻度に基づいて、これが環境で実行できることであるかどうかを自分で判断する必要があります。ただし、プロキシサーバーのアドレスは静的である必要があります。

isInNet()呼び出しでチェックしているサブネットは、dnsDomainIs()呼び出しでチェックしているドメインの1対1のマップを呼び出していますか?その場合は、冗長性があり、1つのコールセットを削除できます。

それ以外に、あなたの質問からあなたの環境を私が識別できることに基づいて推奨するものは他にありません。

5
squillman

ホストがIPアドレスでない場合、isInNet関数呼び出しごとにDNSルックアップが実行されます。これにより、4つのDNSルックアップを実行し、DNSサーバーからの応答を待つ必要があるため、プロセスが遅くなります。 DNS呼び出しの数を1つに減らすには、次の手順を実行できます。

 function FindProxyForURL(url, Host) {
  if (dnsResolve("ProxyServer") == "10.1.1.116")

    hostip=dnsResolve(Host);

    if (dnsDomainLevels(Host) == 0 ||
        isInNet(hostip, "10.0.0.0","255.0.0.0") ||
        isInNet(hostip, "125.0.0.0","255.0.0.0") ||
        isInNet(hostip, "127.0.0.0","255.0.0.0") ||
        isInNet(hostip, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(Host, ".muj.com") ||
        dnsDomainIs(Host, "sv.com.gt") ||
        dnsDomainIs(Host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}
2