Forum Linux.général Fichier proxy .pac ou wpad.dat

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
29
jan.
2014

Bonjour,
j'utilise depuis quelques années des fichiers .pac assez complexes (multi proxys).
Ce fichier est récupéré dans les Navigateurs grâce à l'option "Détection automatique…" et à une entrée wpad au niveau de mon DNS.

J'utilise la fonction FindProxyForURL(url, host).

Aujourd'hui, j'aurai besoin de spécifier une règle "return direct;" pour une plage IP source spécifique.
Je précise bien source et non destination (que j'utilise déjà avec du isInNet).
Je ne trouve pas cette info dans les différentes documentations consultées, ni sur DLFP.
Si quelqu'un a l'info, je suis preneur.

Merci

  • # chez wouam

    Posté par  (site web personnel) . Évalué à 3. Dernière modification le 29 janvier 2014 à 15:35.

    j'ai ça sur mon proxy pac :

    isInNet (dnsResolve (host), "10.15.*.*", "255.255.*.*")
    

    ou ça :

     var myip = myIpAddress();
        // alert(myip);
        // si ip siege
        if ( myip.substring(0,8) == "10.120.1" )
    
  • # isInNet et myIpAddress

    Posté par  (Mastodon) . Évalué à 4.

    Avec isInNet(myIpAddress(),"w.x.y.z","255.255.255.255"), ça doit fonctionner pour un poste http://www.proxypacfiles.com/proxypac/index.php?option=com_content&view=article&id=52&Itemid=82

    • [^] # Re: isInNet et myIpAddress

      Posté par  (site web personnel) . Évalué à 3. Dernière modification le 29 janvier 2014 à 22:01.

      Je confirme, à condition que l'ipv6 soit désactivée …
      Tu peux même faire des fonctions au besoin (ici pour boucler sur une 20ene d'entrées)

      var debug=0;  // 0 a 3 de plus en plus verbeux
      
      function isItNetwork(reseaux,iptest) {
         var find=false;
         var i = 0;
         var nbNet = reseaux.length;
      
         for (i=0; i< nbNet; i++) {
           reseau=reseaux[i].split("/");
           if (debug>=3) alert(iptest+" est-il dans "+reseau[0]+"/"+reseau[1]+"?");
           if (isInNet(iptest, reseau[0], reseau[1])) {
             if (debug>=2) alert(iptest+" est dans "+reseau[0]+"/"+reseau[1]);
             find=true;
             break;
           }
         }
         return find;
      }
      
      var reseaux_test = new Array (
         "192.168.1.0/255.255.255.0",
         "192.168.2.0/255.255.255.0",
         "192.168.3.0/255.255.255.0",
         "192.168.4.0/255.255.255.0"
       );
      
      var myip = myIpAddress();
      
      // Sur mon IP
      if (isItNetwork(reseaux_test,myip)) {
         if (debug>=1) alert("2.1 Proxy : "+proxy_no);
         return proxy_no;
      }
      
      // Sur le host de destination
      if (isItNetwork(reseaux_test,host)) {
         if (debug>=1) alert("2.1 Proxy : "+proxy_no);
         return proxy_no;
      }

      Fonction sympa aussi pour détecter les hosts ayant un noms courts

      // Si SRC sans point dans le nom on est en local
      if (isPlainHostName(host)) {
         if (debug>=1) alert("0.0 Proxy : "+proxy_no);
         return proxy_no;
      }

      Is it a Bird? Is it a Plane?? No, it's Super Poil !!!

  • # Merci de votre aide...

    Posté par  . Évalué à 1.

    …mais ça ne fonctionne que depuis IE.

    Hors j'utilise principalement Firefox.

    Ni la fonction myIpAddress(); ni même alert; ne fonctionne. Les 2 fonctionnant sous IE, j'ai concentré mes tests sur "alert" car si je debug l'un, je suis convaincu que l'autre fonctionnera.

    Une simple page javascript fonctionne bien (donc Firefox accepte le Javascript, mon serveur Apache aussi…)

    Voici mon protocole de test :

    Soit sur Serveurproxy :/var/www/ 2 fichiers

    test.html

    <script>
    alert("hello");
    </script>

    proxy.pac

    function FindProxyForURL(url, host)
    {
       alert("hellopac");
    }

    depuis un PC (Windows XP)
    Sous Firefox, sans proxy, j'affiche test.html. J'ai bien mon "hello" qui s'affiche.
    Maintenant, je lui demande d'utiliser http://Serveurproxy/proxy.pac, rien ne s'affiche.
    Sous IE, je lui demande d'utiliser http://Serveurproxy/proxy.pac, j'ai bien mon "hellopac"

    Après une petite recherche, j'ai essayer sans succès plusieurs choses :

    // add predefined functions to pac
    this._sandBox.importFunction(myIpAddress);
    this._sandBox.importFunction(dnsResolve);
    this._sandBox.importFunction(proxyAlert, "alert");
    
    pacver = "company.net PAC file version 7.2, January 4th, 2008";
    
    // Convert everything to lower case.
    var lhost = host.toLowerCase();
    host = lhost;

    … je sèche !

    Peut-être l'un d'entre vous a été confronté à ce cas ?

    • [^] # Re: Merci de votre aide...

      Posté par  (site web personnel) . Évalué à 2. Dernière modification le 07 février 2014 à 20:43.

      Sous firefox il faut ouvrir la console d'alerte (Ctrl+Maj+K) pour avoir les alertes du proxy.pac

      Il y a de grande chance que tu aies de l'IPv6 sur ton client (même non configurée), et c'est cette IP qui est remontée par la fonction "myIpAddress"

      Tu peux tenter dans about:config de firefox un network.dns.disableIPv6 = true

      Is it a Bird? Is it a Plane?? No, it's Super Poil !!!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.