Récupérer le nom d'une machine cliente dans un contexte Intranet
(Olivier)

 

En fait, on ne récupère ici pas la nom de la machine lui même mais celui associé à l'IP connectée au serveur web.
Dans le cas d'un intranet, on peut par ce biais récupérer le nom réel de la machine si la résolution des noms est basé sur DNS comme dans le cas des réseaux Microsoft (W2000 et +).

Cette procédure appelle un programme NSLOOKUP, qui permet d'interroger le serveur de DNS par défaut de la machine (ou un autre).
Ici, on y fait appel pour faire un reverse lookup, c.a.d traduire une IP en nom.
Pour ce faire, on appelle le programme avec une commande stockant le résultat dans un fichier puis on lit ce fichier pour récupérer ce qui nous intéresse.
Si la requête n'a pas abouti, on renvoie "<Vide>".

PROCEDURE IPVersDNS(IP)
CmdExe est une chaîne = "cmd /c nslookup " + IP + " >res.txt"
Posfic est un entier
t est une chaîne

LanceAppli(CmdExe, exeInactif, exeBloquant, "c:\temp\")
t = fChargeTexte("c:\temp\res.txt")
SI ChaîneOccurrence(t, "Name:") = 0 ALORS
   Posfic = Position(t,"Nom")
SINON
   Posfic = Position(t,"Name:")
FIN

SI ChaîneOccurrence(t, "DNS request timed out") >=1 OU Taille(t) < 70 ALORS
   RENVOYER "< Vide >"
SINON
   RENVOYER SansEspace(Remplace(t[[Posfic+5 A
   Position(t,"Address",Posfic)-1]], CR, ""))
FIN
----------------------------------

Attention toutefois, ce code est bloquant.... Je vous laisse faire les ajustements pour ne pas pénaliser les perfs.

Programativement parlant, il serait plus "propre" de passer directement par le serveur DNS mais dans un souci de rapidité et de simplicité on peut utiliser cela.