Get hostname and DNS suffix for pac file usage

musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011 - 20 avril 2007 à 16:27
musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011 - 31 août 2011 à 16:57
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
A voir également:

15 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 avril 2007 à 11: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    
0
musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011
23 avril 2007 à 10:04
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 avril 2007 à 11:15
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    
0
musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011
23 avril 2007 à 12:01
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 avril 2007 à 12:25
>>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    
0
musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011
23 avril 2007 à 13:19
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).
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 avril 2007 à 13:54
    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    
0
musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011
23 avril 2007 à 14:16
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.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 avril 2007 à 15:19
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    
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
23 avril 2007 à 15:31
erreur sur le lien..
ici ça devrait aller mieux
<hr />


Cordialement            Bul    
0
musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011
23 avril 2007 à 17:39
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
24 avril 2007 à 08:03
    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    
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
24 avril 2007 à 08:05
euh.. en me relisant :




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





<hr />



Cordialement        Bul    
0
0DTFeldunost Messages postés 1 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 18 août 2011
18 août 2011 à 11:29
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 !
0
musashi75 Messages postés 7 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 31 août 2011
31 août 2011 à 16:57
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.
0
Rejoignez-nous