Get hostname and DNS suffix for pac file usage

Signaler
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011
-
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011
-
Bonjour à toutes et à tous !

Je suis en train de mettre en place des scripts de configuration automatique d'Internet Explorer (pac file).
Un pac file est composé d'une fonction javascript:  function FindProxyForURL(url, host) où url est la ressource que l'on cherche à atteindre et host le nom court de la ressource (exemple: si l'URL vaut http://www.javascriptfr.com/infomsg.aspx?ajout=1 , host vaudra www.javascriptfr.com).

Je cherche à récupérer via une seconde fonction javascript le nom complet de la machine source (soit le client, pas le serveur) afin de définir un proxy en fonction du nom de machine. Dans mon cas particulier je ne peux pas utiliser la fonction myIPAddress car il s'agit d'adresses aléatoires.

Savez-vous s'il existe une fonction javascript qui permettrait de récupérer le suffixe DNS de la machine ?

En vous remerciant par avance pour votre aide préciseuse,
Jérôme

15 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
Bonjour,

    pas tout compris.... ( normal, je suis un peu niais )

    un ch'tit début de  piste ?

<script type= "text/javascript">
    var wn = new ActiveXObject("WScript.Network");
    alert(    "Nom PC\t\t : "+wn.ComputerName+
                "\r\nDomaine\t\t : "+wn.UserDomain+
                "\r\nUtilisateur\t : "+wn.UserName
        );
   
</script>

par contre pour le DNS :
    le DNS fut inventé en 1983 par Paul Mockapetris. Il permet d'associer à une adresse IP,
    un nom intelligible, humainement plus simple à retenir, appelé nom de domaine.



lu chez wikipedia...

alors qu'entends tu par
le suffixe DNS de la machine ?





<hr />



Cordialement            Bul    
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011

Bonjour et merci pour cette première réponse (qui m'aide).
Je n'avais pas encore utilisé d'ActiveX dans Javascript.

Ce que j'entends par suffixe DNS, c'est en fait le domaine dans lequel la machine est enregistrée, au sens DNS du terme.
Je m'explique:

C:\Program Files\Support Tools>ipconfig
Configuration IP de Windows

Carte Ethernet Connexion au réseau local:
        Suffixe DNS propre à la connexion : domaine.forêt.com
        Adresse IP. . . . . . . . . . . . : 192.168.0.1
        Masque de sous-réseau . . . . . . : 255.255.255.0
        Passerelle par défaut . . . . . . : 192.168.0.2

Je cherche à récupérer cette information.
Ainsi, en l'associant au nom de machine, j'obtiens un identifiant unique que je peux ensuite exploiter via une variable.

Merci encore pour votre aide
Jérôme
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
ce que je ferais/tenterais.... ( mais je dis peut-être
       des conneries et il y a probablement plus simple ? )

    _ lancement ipconfig >fichier.tmp et relecture de ce fichier.tmp
 
   _ lien ( ou ajax ) vers cet IP ==> on doit pouvoir retrouver le domaine.

    _ ...

<hr />


Cordialement            Bul    
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011

mon seul problème, c'est que je suis assez limité par l'utilisation d'un fichier pac.
Pour info:

References to Object Model objects, properties,
or methods cause the .pac file to run unsuccessfully. For example, all
of the following references cause the .pac file to run unsuccessfully
on IExplorer:

, window.open(...), ----
, alert(...), ----
, password(...)

Je ne pense donc pas que l'on puisse écrire dans un fichier puis lire son contenu (malheureusement).
La seule solution est de récupérer l'info directement dans une variable afin de l'exploiter dans la fonction FindProxyForURL(url, host) qui permet de renvoyer l'adresse d'un ou plusieurs proxys au navigateur.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
>>limité par l'utilisation d'un fichier pac.               
    c'est quoi un fichier pac ?

    la gestion de fichiers, le lancement d'exécutable ce fait simplement par des ActiveX
    si


new ActiveXObject("WScript.Network") permis, FileSystemObject aussi non  ?

>>

La seule solution est de récupérer l'info directement dans une variable

        il faut bien quelque chose pour alimenter cette variable.
        un truc externe ( programme, dll, ActiveX ... ) ou ... un lien



<hr />



Cordialement            Bul    
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011

Un fichier pac est un fichier chargé par le navigateur afin de connaître le serveur proxy à utiliser. Ce fichier est codé en javascript.
Pour plus d'info sur les fichiers pac : http://www.ac-creteil.fr/reseaux/internet/inet/proxy/proxy-pac.htm

A la base, le fichier pac n'est conçu que pour faire des tests sur le nom d'host (ou l'url complète) en destination de la requête HTTP.
Je pense qu'il est peut-être possible, via effectivement ActiveX & Co, de récupérer certaines informations supplémentaires, comme le nom complet de la machine par exemple (concaténation du nom de machine + suffixe DNS).
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
    je me cite :




    _ lancement ipconfig >fichier.tmp et relecture de ce fichier.tmp
             avec ActiveX donc
                ActiveXObject("WScript.Shell");   ou autre  pour lancer un exécutable
                new ActiveXObject("Scripting.FileSystemObject") pour gérer les fichiers





 
  _ lien ( ou ajax ) vers cet IP ==> on doit pouvoir retrouver le domaine.
    _ ...


<hr />



Cordialement            Bul    
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011

Je ne suis pas familier du tout avec le javascript et necore moins avec les ActiveX.
Pour mes tests, j'ai un fichier html vide dans lequel j'ai mis les lignes que tu m'as indiqué auparavant:

<html>

<script type="text/javascript">
    var wn = new ActiveXObject("WScript.Network");
    alert(    "Nom PC\t\t : "+wn.ComputerName+
                "\r\nDomaine\t\t : "+wn.UserDomain+
                "\r\nUtilisateur\t : "+wn.UserName
        );
</script>

</html>

Pour ajouter une section relative au suffixe DNS:
var temp = new ActiveXObject("Scripting.FileSystemObject");

par contre, après, je ne vois pas trop comment faire pour mettre l'IPconfig dans un fichier, etc.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
gestion des fichiers, [quelques explications ici quelques explications ici]

lancer un exécutable, ch'tit exemple

        var w = new ActiveXObject("WScript.Shell");
        //w.run ('start "nom_exécutable"');   // windows 98
        w.run ('cmd /c "nom_exécutable"');    // windows XP

    (  il y a d'autres manières )

<hr />


Cordialement            Bul    
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
erreur sur le lien..
ici ça devrait aller mieux
<hr />


Cordialement            Bul    
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011

Merci pour ce lien et ces info.
Voilà ou j'en suis:

<html>

<script type="text/javascript">
    // je récupère le nom de machine
    var wn = new ActiveXObject("WScript.Network");
    var machine = wn.ComputerName;
   
    // je crée et ouvre en écriture mon fichier temporaire
    var ws = new ActiveXObject("Scripting.FileSystemObject");
    var temp=ws.GetFile("ipconfig.txt",2,true);
       
    // je lance ipconfig et redirige la sortie dans un fichier
    var w = new ActiveXObject("WScript.Shell");
    ws.Write(w.run ('cmd /c "ipconfig"'));
   
    // je récupère le suffixe DNS dans le fichier
    var ligne;
    while (!ws.AtEndOf Stream)
        { ligne=ws.ReadLine();
          if ( //MA LIGNE CONTIENT "DNS" ALORS JE STOCKE LE CONTENU DE LA LIGNE DANS UNE VARIABLE A PARTIR DES ':' ET EN RETIRANT LE PERMIER ESPACE
            {
          // EXEMPLE :
          //   Suffixe DNS propre à la connexion : domain.forest.com     -> je dois garder domain.forest.com
            }
        }
    ws.close();
   
    // je détruis mon fichier temporaire
    var temp=ws.DeleteFile("ipconfig.txt");
</script>

</html>

Je ne suis pas sûr que c'est de cette manière que l'on peut rediriger la commande dans un fichier (ws.Write(w.run ('cmd /c "ipconfig"'));).

De plus, les manipulation de fichier sous javascript ne sont pas non plus mon fort (je ne trouve pas de grep :)
Merci pour ton aide préciseuse en tout cas.
Jérôme
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
    var w = new ActiveXObject("WScript.Shell");  
    w.run ('cmd /c "ipconfig >ipconfig.txt"');  


   








    var ws = new ActiveXObject("Scripting.FileSystemObject");



        var temp=fso.OpenTextFile("ipconfig.txt",1,false);



    var ligne;
    while (!temp.AtEndOf Stream)
    {
        ligne=temp.ReadLine();
        ...






    pour tester le contenu de la ligne voir, par exemple,
    ligne.indexOf("DNS")>=0 ( il y a d'autres solutions )
   

    ( pas testé, il reste peut-être des erreurs ! )



<hr />



Cordialement            Bul    
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
35
euh.. en me relisant :




            var temp=ws.OpenTextFile("ipconfig.txt",1,false);





<hr />



Cordialement        Bul    
Messages postés
1
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
18 août 2011

Bonjour,


Je suis confronté au même problème que toi musashi, j'ai besoin de récupérer le suffixe dns pour faire une comparaison et aboutir à quelque chose du genre:


if (fonction_get_dns() == "blabla.fr")
Return "DIRECT";
else
Return "PROXY 192.168.1.1:8080";


Les fonctions existantes compatibles avec les fichiers PAC ne sont pas utiles d'après ce que j'ai pu observer pour ce cas de figure.

Bon le javascript pour les fichiers pac ne peuvent être imbriquées dans un fichier HTML, c'est pas possible car la normalisation est très précise.


Si j'obtiens une réponse après les 4 années d'existence de ce topic, ce serait formidable !
Messages postés
7
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
31 août 2011

Bonjour,

De mon côté, j'ai changé d'approche pour résoudre ce problème.

A ma connaissance, il n'est pas possible de récupérer le suffixe DNS de la machine cliente téléchargeant le fichier PAC sur le serveur Web.

L'option que j'ai retenue a été de définir des règles sur la base du réseau IP de la machine cliente :

if(isInNet(myIpAddress(),"1.1.1.1","255.255.255.0"))

return "DIRECT";

En espérant que cela t'aide.