106 votes

Puis-je effectuer une recherche DNS (du nom d'hôte à l'adresse IP) à l'aide de Javascript côté client ?

J'aimerais utiliser Javascript côté client pour effectuer une recherche DNS (du nom d'hôte à l'adresse IP) telle que vue depuis l'ordinateur du client. Est-ce possible ?

7 votes

De nombreuses réponses à cette question semblent recommander d'effectuer la résolution côté serveur. Selon le cas d'utilisation, cela peut s'avérer insuffisant. Par exemple, si le service que vous recherchez utilise GSLB, il peut renvoyer une IP différente en fonction de l'endroit où se trouve l'utilisateur ; par conséquent, la réponse que reçoit le code côté serveur sera très probablement différente de celle que le navigateur aurait reçue. Ceci étant dit, je n'ai pas encore de solution alternative pour ceux qui se soucient de cette différence.

78voto

Zach Points 9869

Editer : Cette question m'a donné envie, j'ai donc mis en place un webservice JSONP sur Google App Engine qui renvoie l'adresse IP du client. Utilisation :

<script type="application/javascript">
function getip(json){
  alert(json.ip); // alerts the ip address
}
</script>

<script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"> </script>

Yay, pas besoin de serveur proxy.


La JS pure ne le peut pas. Si vous avez un serveur script sous le même domaine qui l'imprime, vous pouvez envoyer un XMLHttpRequest pour le lire.

4 votes

Pourriez-vous afficher la source de votre service web ? Il serait intéressant d'exécuter une instance.

28 votes

Désolé, mais j'ai dû rétrograder car je ne pense pas que cela réponde à la question initiale. Ils veulent juste une recherche DNS standard, pas l'IP publique de l'utilisateur.

1 votes

Votre url semble être en panne

39voto

Hans Sjunnesson Points 5748

Il n'y a pas de notion d'hôte ou d'adresse IP dans la bibliothèque standard du javascript. Vous devrez donc faire appel à un service externe pour rechercher les noms d'hôtes pour vous.

Je recommande d'héberger un cgi-bin qui recherche l'adresse IP d'un nom d'hôte et d'y accéder via javascript.

28 votes

Cgi-bin ? C'est de la vieille école. Je l'aime bien !

11 votes

C'était le cas au moment de la rédaction du présent rapport (2008). Ce n'est plus le cas 6 ans plus tard : Voir mon commentaire sur WebRTC dans cette même page. (Malheureusement, Google pointe toujours vers ce fil de discussion lorsqu'il recherche une solution au problème de l'adresse IP, ce qui peut orienter les gens dans la mauvaise direction).

2 votes

@earizon - votre réponse est pour une question différente - comment découvrir votre propre adresse IP privée.

12voto

tcole Points 928

La version JSONP hébergée fonctionne comme un charme, mais il semble qu'elle dépasse ses ressources pendant la nuit la plupart des jours (heure de l'Est), j'ai donc dû créer ma propre version.

Voici comment j'ai procédé avec PHP :

<?php
header('content-type: application/json; charset=utf-8');

$data = json_encode($_SERVER['REMOTE_ADDR']);
echo $_GET['callback'] . '(' . $data . ');';
?>

Le Javascript est alors exactement le même que précédemment, mais il ne s'agit pas d'un tableau :

<script type="application/javascript">
function getip(ip){
    alert('IP Address: ' + ip);
}
</script>

<script type="application/javascript" src="http://www.anotherdomain.com/file.php?callback=getip"> </script>

C'est aussi simple que cela !

Note complémentaire : Veillez à nettoyer votre $_GET si vous utilisez cette méthode dans un environnement public !

0 votes

Merci tcole ! C'est exactement ce que je cherchais :)

1 votes

Attendez une minute, pourquoi utiliser $_GET ? comme vous l'avez dit, il s'agit d'une vulnérabilité. Ne pourrait-on pas simplement utiliser : echo 'getip(' . $data . ');' ;

0 votes

@deweydb Si vous contrôlez à la fois le client et le serveur, vous pouvez le faire. Si ce n'est pas le cas, alors ce que tcole est la façon appropriée de configurer un rappel JSONP avec un nom de fonction configurable (ce qui est très standard).

4voto

Ilan Rabinovitch Points 164

De nombreuses réponses à cette question semblent recommander d'effectuer la résolution côté serveur. Selon le cas d'utilisation, cela peut s'avérer insuffisant. Par exemple, si le service que vous recherchez utilise GSLB, il peut renvoyer une IP différente en fonction de l'endroit où se trouve l'utilisateur ; par conséquent, la réponse que reçoit le code côté serveur sera très probablement différente de celle qu'aurait reçue le navigateur.

Cela dit, je n'ai pas encore de solution alternative pour ceux qui se soucient de cette différence.

-2voto

Nick Craver Points 313913

Je ne pense pas que cela soit autorisé par la plupart des navigateurs pour des raisons de sécurité, dans un contexte purement JavaScript comme le demande la question.

6 votes

Ce n'est pas une réponse. Il s'agit plutôt d'un commentaire !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X