IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Script d'auto-configuration Proxy (fichier PAC)


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut Script d'auto-configuration Proxy (fichier PAC)
    Bonjour à tous!

    Je me tourne vers vous aujourd'hui car je ne sais pas comment resoudre mon problème.

    Je dois créer un script d'auto configuration proxy pour internet explorer. Le but etant d'autoriser les url listées et les locales quoi qu'il arrive (au cas ou le server proxy tombe notamment), et de laisser gerer le proxy pour toutes les autres.

    Je débute en javascript (j'ai commencé hier matin, c'est pour dire), je pense que je ne suis pas trop mal parti, mais ca ne fonctionne pas du tout, voici le code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function FindProxyForURL(url, host) {
     
    // Variables.
    var proxy = "PROXY 174.21.4.110:3128";
     
     
     
    // Si le localhost ou le domaine correspondent, envoyer DIRECT.
    if localHostOrDomainIs(host, "http://www.nesle.fr") ||
    	localHostOrDomainIs(host, "http://mail.google.com/*") ||
    	localHostOrDomainIs(host, "http://www.google.fr/*") ||	
    	localHostOrDomainIs(host, "http://www.clubic.fr/*") ||
    	localHostOrDomainIs(host, "http://www.tf1.fr/*") ||
    	localHostOrDomainIs(host, "http://www.lafistiniere.fr/*") ||
    	localHostOrDomainIs(host, "http://www.mappa.fr"))
    		return "DIRECT";
    }
     
    {		
    // Exceptions pour adresses locales 
    if (isPlainHostName(host) ||
    	shExpMatch(host, "*.local") ||
    	isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0")  ||
    	isInNet(dnsResolve(host), "172.16.0.0",  "255.240.0.0")  ||
    	isInNet(dnsResolve(host), "192.168.0.0",  "255.255.0.0")  || 
    	isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
    		return "DIRECT";
     
    // Autres requêtes renvoyées au proxy
    else
    		return proxy;
    }
     
     
    FindProxyForURL();
    Voila ce qu'il y a dans mon fichier .pac
    Je rappelle que je suis totalement novice mais que ca m'interesse beaucoup, je sollicite donc votre savoir.

    Merci a tous messieurs

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Désolé, c'est du propriétaire Internet Explorer, ça ne me parle pas du tout

    La doc d'IE fait-elle mention d'outils de débogage pour ce genre de choses ?

  3. #3
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    Bonjour,

    Merci pour ta reponse quand meme. Je n'ai rien vu sur la doc ou l'aide de IE parlant d'outils de débogage, et ni meme de script .pac d'ailleurs...

    Ca me rends fou, je vais finir par abandonner l'idée...

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Il faudrait repartir d'un exemple officiel (il y en a plusieurs ici : http://technet.microsoft.com/fr-fr/l.../cc817412.aspx) et le faire évoluer peu à peu jusqu'à ta version en vérifiant par étapes intermédiaires que ça fonctionne toujours.

  5. #5
    Membre chevronné
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Par défaut En complément
    En ce qui concerne le format et d'après la RFC3040 https://www.ietf.org/rfc/rfc3040.txt la meilleure référence est
    http://web.archive.org/web/200101231...roxy-live.html

    C'est pas jeune ...

    Sinon, un site qui n'a pas l'air trop mal, où tu trouveras des exemples et des logiciels

    http://findproxyforurl.com/

    Si tu compares ton script et ces exemples tu devrais trouver ...
    Quelques indices : parenthèses, accolades et l'appel en fin de script FindProxyForURL() est à retirer.

    Un article interéssannt même si le fichier .pac n'est pas vraiment traité (juste un tout petit exemple)
    http://caleca.developpez.com/tutorie...id-squidguard/

  6. #6
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    Bonjour! (désolé, vacances et déplacements)

    Merci pour vos réponses, je jette un œil à tout ceci

  7. #7
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    Bon alors suite a de nombreuses recherche, je me suis rendu compte que la syntaxe n'était pas du tout bonne, après correction ca donne quelque chose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function FindProxyForURL(url, host) {
     
     
    // Si le protocol ou l'URL correspondent envoyer DIRECT, si différent envoyer vers PROXY.
     
     
    	if (shExpMatch(host, "(https://mail.google.com|mail.google.com|*.google.*|https://www.facebook.com|facebook.com|*.facebook.*)")){
    			return DIRECT;
    		}
    		else return "PROXY *.*.*.*:0000";
     
     
     
    	} 
    // Fin de la Fonction
    Dans cette configuration, nous avons 2 exceptions, l'une pour les mails google (https://mail.google.fr) et l'autre pour facebook (https://www.facebook.com).
    Donc tout le trafic est sensé passer par le proxy SAUF ces deux exceptions, comme il s'agit d'un proxy bidon, le trafic n'aboutira pas sauf mail google et Facebook.

    Le problème que je rencontre à présent c'est que ça marche parfaitement bien sous Firefox et Chrome, mais sous IE ça ne marche pas du tout! (J'ai testé IE 8, 9 et 10).

    Le plus étrange c'est que Chrome et IE utilise tout les deux les Options Internet de Windows, Firefox lui utilise une mécanique différente.

    Bref, je bloque, j'ai tout essayé, pointer le fichier .pac en local avec une syntaxe differente (file://c:/user/proxy.pac - file:\\\c:\user\proxy.pac - file:///c:/user/proxy.pac etc...), sur un serveur web... mais non.

    Si quelqu'un a une solution ou une idée je suis preneur

    Merci a vous!

  8. #8
    Membre chevronné
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Par défaut
    Bin ... j'ai bien une idée une petite recherche dans un moteur de recherche avec le nom de la fonction 'shExpMatch' ou encore un petit tour sur les sites déjà indiqués. En quelques minutes tu devrais résoudre ton cas. Une indication: que représente 'host' pour toi ? la syntaxe de la chaine de caractères passée à la fonction vient d'où ?

  9. #9
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    Merci pour tes idées mais tu te doute bien que j'ai déjà parcouru les site mentionnés plus haut, et une 10 aines qui traite du sujet d'ailleurs. Pour le host effectivement moi je veux faire exception des URL, donc j'ai remplacé HOST par URL mais hélas ça ne fonctionne plus du tout sous Firefox, Chrome et IE.

    La syntaxe viens d'un fichier .pac récupéré sur un site français qui propose un proxy personnalisé avec l'ajout de règles. Comme leurs proxy fonctionne, et que je trouve des tonnes de syntaxes différentes pour les fichiers d'auto config proxy ( chez findproxyforurl.com, le labo Microsoft ou dans des exemples de chez Alcatel notamment), j'ai pris celui qui fonctionnait au moins sous Chrome et Firefox.

    Donc comme ça fonctionne sous les deux autres navigateurs, le problème ne viendrait il pas juste d'IE?

  10. #10
    Membre chevronné
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Par défaut
    Bin avec mon moteur préféré un des premiers liens qui revient est justement un article du support de ms qui dit que IE ne supporte pas les expressions régulières dans cette fonction. T'as pas de chance. Il supporte par contre les caractères génériques '*' et le '?' comme dans un shell. Si je devais tester quelque chose, j'essaierai de ne mettre qu'une 'url' par appel de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( shExpMatch(url,"https://mail.google.com") ||
         shExpMatch(url,"https://www.facebook.com") ||
          ... ) {
        ...
    }
    ou avec 'host'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( shExpMatch(host, "*.google.*") ||
         shExpMatch(host,"*.facebook.*") ) {
        ...
    }
    Le deux bouts de code ne sont pas équivalents. Le deuxième ignore complétement le protocol que ce soit http ou https ou ftp ou ...
    et, qui plus est, doit même filtrer des url comme 'http://my.facebook.monsite.org' ... à tester

    Donc dans un premier temps, tester ce qu'il y a de plus spécifique dans tes navigateurs puis introduire les caractères génériques. Essaye déjà de bloquer url:'https://www.facebook.com' ...

  11. #11
    Membre expérimenté
    Homme Profil pro
    Consultant PLM
    Inscrit en
    Août 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant PLM

    Informations forums :
    Inscription : Août 2007
    Messages : 203
    Par défaut
    Pour autoriser les domaines facebook.com et google.com :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (/facebook\.com$/i.test(host) || /google\.com$/i.test(host)) {
       return "DIRECT";
    }

  12. #12
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    Citation Envoyé par lysandro Voir le message
    Bin avec mon moteur préféré un des premiers liens qui revient est justement un article du support de ms qui dit que IE ne supporte pas les expressions régulières dans cette fonction. T'as pas de chance. Il supporte par contre les caractères génériques '*' et le '?' comme dans un shell. Si je devais tester quelque chose, j'essaierai de ne mettre qu'une 'url' par appel de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( shExpMatch(url,"https://mail.google.com") ||
         shExpMatch(url,"https://www.facebook.com") ||
          ... ) {
        ...
    }
    ou avec 'host'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( shExpMatch(host, "*.google.*") ||
         shExpMatch(host,"*.facebook.*") ) {
        ...
    }
    Le deux bouts de code ne sont pas équivalents. Le deuxième ignore complétement le protocol que ce soit http ou https ou ftp ou ...
    et, qui plus est, doit même filtrer des url comme 'http://my.facebook.monsite.org' ... à tester

    Donc dans un premier temps, tester ce qu'il y a de plus spécifique dans tes navigateurs puis introduire les caractères génériques. Essaye déjà de bloquer url:'https://www.facebook.com' ...
    Et bien tu vois depuis le temps que je cherche sur le sujet, je n'etais jamais tombé sur ce lien et effectivement c'est ecris en gros en plus que les expressions régulières ne sont pas prise en charge... Merci à toi! Je vais reprendre le script pour voir où ca coince

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pour autoriser les domaines facebook.com et google.com :
     
    if (/facebook\.com$/i.test(host) || /google\.com$/i.test(host)) {
       return "DIRECT";
    }
    Je ne comprends pas le bout de code que tu as mis, quand j'essaye cela ne marche pas.

  13. #13
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    BOn et bien j'ai trouvé la syntaxe qui fonctionne partout, ca donne quelque chose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (shExpMatch(host, "*.google.*"))
    {
    return "DIRECT";
    }
    else
    return "PROXY *.*.*.*:0000";
    }
    Et la il n'y a que google qui passe, le reste échoue a cause du fake proxy.

    Maintenant reste a ajouter les centaines d'adresses que je dois mettre en exclusion... Je vous tiens au courant lorsque j'ai fini et que tout fonctionne correctement

  14. #14
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    Merci lysandro, grâce à tes remarques, j'ai pu finir mon travail!

    Donc pour ceux qui seraient succeptibles d'avoir le meme problème, voici le code avec la syntaxe gérée par IE, Firefox et Chrome:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    function FindProxyForURL(url, host) {
     
     
    // Si l'URL correspond, envoyer DIRECT (le site ne passe pas par le proxy, en cas de panne du serveur proxy les sites en excpetions seront toujours accessibles)
    // Si different envoyer vers PROXY.
     
    if (shExpMatch(host, "*.google.*"))
    {
    return "DIRECT";
    }
     
    if (shExpMatch(host, "*.pagesjaunes.*"))
    {
    return "DIRECT";
    }
     
    if (shExpMatch(host, "*.mail.google.*"))
    {
    return "DIRECT";
    }
     
    if (shExpMatch(host, "*.lafistiniere.*"))
    {
    return "DIRECT";
    }
     
    else
    return "PROXY adresse.IP.du.proxy:0000";
    }
    Merci à tous d'avoir participé a mon problème, tout est réglé

  15. #15
    Membre chevronné
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Par défaut
    L'adresse que tu as mis en exemple est une adresse publique (routable sur internet) qui appartient à Unicom un prestataire de Beijing en Chine, c'est une trés mauvaise idée. Tu as le choix entre le loopback (boucle sur la machine locale) 127.0.0.1 ce qui peut poser problème, ou une adresse comme 192.0.2.1 (masque:255.255.255.0) qui est une adresse de "tests" (cf RFC6890) ou autre chose mais qui ne soit pas ni publique, ni routable, ni sur un éventuel réseau local.

    edit: 11:04 Je viens de repenser à ça : dans la rfc je ne sais plus laquelle qui traite des URL, il est spécifié que le 'path' peut-être vide mais pas absent. Ca a pour conséquence que 'https://www.facebook.com' n'est pass une url valide, et comme les développeurs ont fait leur boulot, ils doivent te passer une url valide. Il faut donc tester plutot : shExpMatch(url,"https://www.facebook.com/*")

  16. #16
    Membre régulier
    Homme Profil pro
    Support Informatique
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Support Informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Par défaut
    Pour l'adresse que j'ai mis en exemple, je ne peux plus modifier mes anciens post...

    Sinon oui ce que tu m'as conseillé de tester marche, j'ai mis des astérisques a la place du protocole pour élargir le champ d'exclusion, idem pour le chemin des pages suivantes du site.
    Et effectivement, certains des liens dans les précédents exemples n'avait pas de path, ce qui a été réglé par l'ajout d'une astérisque.

    Mais l'exemple que j'ai mis en dernier fonctionne sous Chrome, Firefox et IE, donc le problème est résolu, j'espère que ça pourra servir a d'autres

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/01/2014, 13h15
  2. Script connexion auto proxy
    Par cellendhyll dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/01/2008, 10h41
  3. [Layout-Date] Configuration par fichier
    Par Koko22 dans le forum Struts 1
    Réponses: 4
    Dernier message: 28/07/2004, 09h39
  4. Auto suppression de fichier
    Par pato dans le forum Langage
    Réponses: 4
    Dernier message: 05/03/2004, 09h09
  5. [TP]Configuration du fichier Desktop
    Par Giovanny Temgoua dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 22/12/2003, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo