Je voudrais utiliser Javascript côté client pour effectuer une recherche DNS (nom d'hôte vers adresse IP) comme vu de l'ordinateur du client. Est-ce possible?
javascript
dns
Noah Jacobson
la source
la source
Réponses:
Il n'y a aucune notion d'hôtes ou d'adresses IP dans la bibliothèque standard javascript. Vous devrez donc accéder à un service externe pour rechercher les noms d'hôte à votre place.
Je recommande d'héberger un cgi-bin qui recherche l'adresse IP d'un nom d'hôte et y accède via javascript.
la source
Edit : Cette question m'a donné une démangeaison, alors j'ai mis en place un service Web JSONP sur Google App Engine qui renvoie l'adresse IP du client. Usage:
Oui, aucun proxy de serveur n'est nécessaire.
Pure JS ne peut pas. Si vous avez un script serveur sous le même domaine qui l'imprime, vous pouvez envoyer un XMLHttpRequest pour le lire.
la source
Très tard, mais je suppose que beaucoup de gens atterriront encore ici via "Google Airlines". Une approche moderm consiste à utiliser WebRTC qui ne nécessite pas de support serveur.
https://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/
Le code suivant est un copier-coller de http://net.ipcalf.com/
la source
La version hébergée de JSONP 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 je l'ai accompli avec PHP:
Ensuite, le Javascript est exactement le même qu'avant, mais pas un tableau:
Aussi simple que cela!
Remarque: assurez-vous de nettoyer votre $ _GET si vous l'utilisez dans un environnement public!
la source
Je sais que cette question a été posée il y a très longtemps, mais j'ai pensé que je proposerais une réponse plus récente.
DNS sur HTTPS (DoH)
Vous pouvez envoyer des requêtes DNS via HTTPS aux résolveurs DNS qui le prennent en charge. La norme pour DOH est décrite dans la RFC 8484 .
C'est une chose similaire à ce que suggèrent toutes les autres réponses, seulement que DoH est en fait le protocole DNS sur HTTPS. C'est aussi une norme Internet «proposée» et elle devient très populaire. Par exemple, certains grands navigateurs le prennent en charge ou prévoient de le prendre en charge (Chrome, Edge, Firefox), et Microsoft est en train de l'intégrer à leur système d'exploitation.
L'un des objectifs de DoH est:
Il existe un outil open source spécialement conçu pour effectuer des recherches DNS à partir d'applications Web appelées dohjs . Il effectue des requêtes de format filaire DNS sur HTTPS (DoH) comme décrit dans la RFC 8484 . Il prend en charge les méthodes GET et POST.
Divulgation complète: je contribue aux dohjs.
DNS sur les API JSON HTTPS
Si vous ne voulez pas vous soucier du format filaire DNS, Google et Cloudflare proposent des API JSON pour DNS sur HTTPS.
Exemple de code Javascript à rechercher sur example.com avec l'API JSON DOH de Google:
Exemples de la RFC pour DOH GET et POST avec wireformat
Voici les exemples que la RFC donne pour GET et POST (voir https://tools.ietf.org/html/rfc8484#section-4.1.1 ):
GET exemple:
Exemple POST:
Autres endroits pour envoyer des requêtes DOH
Vous pouvez trouver une liste de certains résolveurs DNS publics qui prennent en charge DNS sur HTTPS à quelques endroits:
Parmi les ressources ci-dessus, je dirais que la liste sur le wiki de Curl et la liste DNSCrypt sont probablement les plus complètes et les plus fréquemment mises à jour. La page de Curl comprend également une liste d'outils open source pour DoH (serveurs, proxies, bibliothèques client, etc.).
la source
Je suis conscient que c'est une vieille question, mais ma solution peut aider les autres.
Je trouve que les services JSON (P) qui rendent cela facile ne durent pas éternellement, mais le JavaScript suivant fonctionne bien pour moi au moment de la rédaction.
Ce qui précède écrit l'adresse IP de mon serveur sur la page où il se trouve, mais le script peut être modifié pour trouver n'importe quelle adresse IP en remplaçant «zero.eu.org» par un autre nom de domaine. Cela peut être vu en action sur ma page à: http://meon.zero.eu.org/
la source
Il existe un service tiers qui fournit une API REST compatible CORS pour effectuer des recherches DNS à partir du navigateur - https://exana.io/tools/dns/
la source
Comme beaucoup de gens l'ont dit, vous devez utiliser un service externe et l'appeler. Et cela ne vous donnera la résolution DNS que du point de vue du serveur.
Si cela suffit et si vous avez juste besoin d'une résolution DNS, vous pouvez utiliser le conteneur Docker suivant:
https://github.com/kuralabs/docker-webaiodns
Points de terminaison:
[GET] /ipv6/[domain]
: Effectuez une résolution DNS pour un domaine donné et renvoyez les adresses IPv6 associées.[GET] /ipv4/[domain]
: Effectuez une résolution DNS pour un domaine donné et renvoyez les adresses IPv4 associées.Ma recommandation est de configurer votre serveur Web pour inverser le proxy vers le conteneur sur un point de terminaison particulier de votre serveur servant votre Javascript et de l'appeler en utilisant vos fonctions Javascript Ajax standard.
la source
Cela nécessiterait de casser le bac à sable du navigateur. Essayez de laisser votre serveur faire la recherche et demandez cela du côté client via XmlHttp.
la source
Il existe une bibliothèque javascript DNS-JS.com qui fait exactement cela.
la source
Firefox a une API intégrée pour cela depuis la v60, pour les WebExtensions:
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns/resolve
la source
browser
n'existe pas dans Firefox 64 beta, donc je me demande si cela a été supprimé.dns
autorisation et que le script ne doit pas s'exécuter en tant que script de contenu (comme encore une fois,browser.dns
il n'y serait pas exposé)bien sûr que vous pouvez le faire sans utiliser d'ajout, juste du javascript pur, en utilisant cette méthode de DNS
browser.dns.resolve("example.com");
mais elle est compatible uniquement avec FIREFOX 60, vous pouvez voir plus d'informations sur MDN https://developer.mozilla.org/en-US/docs / Mozilla / Modules complémentaires / WebExtensions / API / dns / resolutionla source
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.
la source
Peut-être que j'ai manqué le point, mais en réponse à NAVY guy, voici comment le navigateur peut vous dire l'adresse IP du `` demandeur '' (bien que peut-être seulement leur fournisseur de services).
Placez une balise de script dans la page à rendre par le client qui appelle (a src pointant vers) un autre serveur qui n'est pas chargé équilibré (je me rends compte que cela signifie que vous avez besoin d'accéder à un 2ème serveur mais l'hébergement est bon marché de nos jours et vous pouvez installez-le facilement et à moindre coût).
Voici le type de code qui doit être ajouté à la page client:
Sur l'autre serveur "someServerIown", vous devez avoir la page ASP, ASPX ou PHP qui;
----- contient un code serveur comme celui-ci:
"<% Response.Write (" var clientipaddress = '"& Request.ServerVariables (" REMOTE_ADDR ") &"'; ")%>" (sans les guillemets extérieurs de la dbl :-))
---- et réécrit ce code dans la balise script:
Cela crée effectivement une variable Javascript à laquelle vous pouvez accéder avec Javascript sur la page pas moins.
J'espère que vous accédez à cette variable et écrivez la valeur dans un contrôle de formulaire prêt à être renvoyé.
Lorsque l'utilisateur poste ou reçoit la prochaine requête, votre Javascript et / ou votre formulaire envoie la valeur de la variable que le "otherServerIown" a renseignée pour vous, retournez au serveur sur lequel vous le souhaitez.
C'est ainsi que je contourne l'équilibreur de charge stupide que nous avons qui masque l'adresse IP du client et la fait apparaître comme celle de l'équilibreur de charge .... stupide ... stupide stupide stupide!
Je n'ai pas donné la solution exacte car la situation de chacun est un peu différente. Le concept est cependant solide. Notez également que si vous faites cela sur une page HTTPS, votre «otherServerIOwn» doit également fournir sous cette forme sécurisée, sinon le client est alerté du contenu mixte. Et si vous avez https, assurez-vous que TOUS vos certificats sont valides, sinon le client reçoit également un avertissement.
J'espère que cela aide quelqu'un! Désolé, il a fallu un an pour répondre / contribuer. :-)
la source
Ma version est comme ça:
php sur mon serveur:
jQuery sur la page:
Cela fonctionne dans plusieurs domaines. Il pourrait utiliser une vérification de l'état. Travailler là-dessus.
la source
Si Java est installé sur le client, vous pouvez faire quelque chose comme ceci:
En dehors de cela, vous devrez probablement utiliser un script côté serveur.
la source