5 votes

Fonctions dnsResolve et isInNet Problème

Nous avons un fichier 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";
}

Il fonctionne correctement, mais de nombreux utilisateurs se plaignent parce que la navigation depuis le déploiement de proxy.pac prend trop de temps. Il semble que dnsResolve y isInNet sont la cause du problème. Y a-t-il un autre moyen d'améliorer ce script ? ou comment accélérer la résolution dns ?

5voto

Warren Blanchet Points 881

Avez-vous plusieurs serveurs proxy dans votre organisation et ce fichier .pac est censé être spécifique au serveur avec l'adresse 10.1.1.116 ? Si ce n'est pas le cas, vous pouvez probablement vous débarrasser de cette vérification. Puisque FindProxyForURL() est appelé pour chaque requête que votre navigateur doit faire dnsResolve() peut potentiellement bloquer votre navigateur pendant un certain temps, en fonction de la façon dont votre DNS fonctionne.

Si vous avez besoin de ça dnsResolve() alors un moyen de contourner cela est de le déplacer en dehors de 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";
}

Cette modification fera en sorte que dnsResolve() n'est appelé que lorsque le fichier .pac est chargé et non à chaque fois qu'une demande est adressée au navigateur. Vous devrez déterminer vous-même si cela est possible dans votre environnement en fonction de la fréquence à laquelle l'adresse change. Mais encore une fois, l'adresse de votre serveur proxy doit être statique.

Est-ce que les sous-réseaux que vous vérifiez avec la fonction isInNet() appelle une correspondance biunivoque des domaines que vous vérifiez avec les dnsDomainIs() appels ? Si c'est le cas, vous avez une redondance et vous pouvez supprimer une série d'appels.

En dehors de cela, je ne vois rien d'autre à recommander sur la base de ce que je peux discerner de votre environnement à partir de votre question.

3voto

Francois Wolmarans Points 1560

Pour chaque appel à la fonction isInNet, une recherche DNS est effectuée si l'hôte n'est pas une adresse IP. Cela ralentit le processus car vous devez effectuer 4 recherches DNS et attendre la réponse du serveur DNS. Vous pouvez faire ce qui suit pour réduire le nombre d'appels DNS à un seul.

 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";
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X