Ich möchte clientseitiges Javascript verwenden, um eine DNS-Suche (Hostname zu IP-Adresse) vom Client-Computer aus durchzuführen. Ist das möglich?
javascript
dns
Noah Jacobson
quelle
quelle
Antworten:
In der Javascript-Standardbibliothek gibt es keine Vorstellung von Hosts oder IP-Adressen. Sie müssen also auf einen externen Dienst zugreifen, um nach Hostnamen für Sie zu suchen.
Ich empfehle, einen CGI-Bin zu hosten, der die IP-Adresse eines Hostnamens nachschlägt und über Javascript darauf zugreift.
quelle
Bearbeiten : Diese Frage hat mich gejuckt, daher habe ich einen JSONP-Webservice in Google App Engine eingerichtet, der die IP-Adresse des Clients zurückgibt. Verwendung:
Ja, es werden keine Server-Proxys benötigt.
Pure JS kann nicht. Wenn Sie ein Serverskript unter derselben Domäne haben, die es druckt, können Sie eine XMLHttpRequest senden, um es zu lesen.
quelle
Sehr spät, aber ich denke, viele Leute werden immer noch über "Google Airlines" hier landen. Ein moderater Ansatz ist die Verwendung von WebRTC, für das keine Serverunterstützung erforderlich ist.
https://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/
Der nächste Code ist ein Kopieren und Einfügen von http://net.ipcalf.com/
quelle
Die gehostete JSONP-Version funktioniert wie ein Zauber, aber es scheint, dass sie an den meisten Tagen (Eastern Time) in der Nacht über ihre Ressourcen geht, sodass ich meine eigene Version erstellen musste.
So habe ich es mit PHP geschafft:
Dann ist das Javascript genau das gleiche wie zuvor, nur kein Array:
So einfach ist das!
Randnotiz: Reinigen Sie Ihr $ _GET unbedingt, wenn Sie es in einer öffentlich zugänglichen Umgebung verwenden!
quelle
Ich weiß, dass diese Frage vor sehr langer Zeit gestellt wurde, aber ich dachte, ich würde eine neuere Antwort anbieten.
DNS über HTTPS (DoH)
Sie können DNS-Abfragen über HTTPS an DNS-Resolver senden, die dies unterstützen. Der Standard für DOH ist in RFC 8484 beschrieben .
Dies ist ähnlich wie in allen anderen Antworten, nur dass DoH tatsächlich das DNS-Protokoll über HTTPS ist. Es ist auch ein "vorgeschlagener" Internetstandard und wird immer beliebter. Einige große Browser unterstützen es beispielsweise oder haben Pläne, es zu unterstützen (Chrome, Edge, Firefox), und Microsoft ist dabei, es in ihr Betriebssystem zu integrieren.
Einer der Zwecke von DoH ist:
Es gibt ein Open-Source-Tool, das speziell für DNS-Lookups von Webanwendungen namens dohjs entwickelt wurde . Es führt DNS über HTTPS (DoH) -Drahtformatabfragen durch, wie in RFC 8484 beschrieben . Es unterstützt sowohl GET- als auch POST-Methoden.
Vollständige Offenlegung: Ich trage zu Dohjs bei.
DNS über HTTPS-JSON-APIs
Wenn Sie sich nicht mit dem DNS-Drahtformat beschäftigen möchten, bieten sowohl Google als auch Cloudflare JSON-APIs für DNS über HTTPS an.
Beispiel-Javascript-Code zum Nachschlagen von example.com mit der JSON DOH-API von Google:
Beispiele aus dem RFC für DOH GET und POST mit Wireformat
Hier sind die Beispiele, die der RFC sowohl für GET als auch für POST gibt (siehe https://tools.ietf.org/html/rfc8484#section-4.1.1 ):
GET Beispiel:
POST-Beispiel:
Andere Orte zum Senden von DOH-Anfragen
Eine Liste einiger öffentlicher DNS-Resolver, die DNS über HTTPS unterstützen, finden Sie an mehreren Stellen:
Von den oben genannten Ressourcen würde ich sagen, dass die Liste in Curls Wiki und die DNSCrypt-Liste wahrscheinlich die vollständigste und am häufigsten aktualisierte sind. Die Seite von Curl enthält auch eine Liste von Open Source-Tools für DoH (Server, Proxys, Client-Bibliotheken usw.).
quelle
Ich bin mir bewusst, dass dies eine alte Frage ist, aber meine Lösung kann anderen helfen.
Ich finde, dass die JSON (P) -Dienste, die dies einfach machen, nicht ewig dauern, aber das folgende JavaScript funktioniert zum Zeitpunkt des Schreibens gut für mich.
Das Obige schreibt die IP meines Servers auf die Seite, auf der er sich befindet, aber das Skript kann geändert werden, um eine beliebige IP zu finden, indem 'zero.eu.org' in einen anderen Domainnamen geändert wird. Dies kann in Aktion auf meiner Seite unter http://meon.zero.eu.org/ gesehen werden.
quelle
Es gibt einen Drittanbieter-Service, der eine CORS-freundliche REST-API zur Durchführung von DNS-Suchvorgängen über den Browser bereitstellt - https://exana.io/tools/dns/
quelle
Wie viele Leute sagten, müssen Sie einen externen Dienst nutzen und ihn anrufen. Und das bringt Ihnen nur die DNS-Auflösung aus der Serverperspektive.
Wenn das gut genug ist und Sie nur eine DNS-Auflösung benötigen, können Sie den folgenden Docker-Container verwenden:
https://github.com/kuralabs/docker-webaiodns
Endpunkte:
[GET] /ipv6/[domain]
: Führen Sie eine DNS-Auflösung für eine bestimmte Domäne durch und geben Sie die zugehörigen IPv6-Adressen zurück.[GET] /ipv4/[domain]
: Führen Sie eine DNS-Auflösung für eine bestimmte Domäne durch und geben Sie die zugehörigen IPv4-Adressen zurück.Ich empfehle, dass Sie Ihren Webserver so einrichten, dass er den Proxy für den Container auf einem bestimmten Endpunkt Ihres Servers, der Ihr Javascript bereitstellt, umkehrt und ihn mit Ihren Standard-Javascript-Ajax-Funktionen aufruft.
quelle
Dazu müsste die Browser-Sandbox beschädigt werden. Versuchen Sie, Ihren Server die Suche durchführen zu lassen, und fordern Sie dies von der Clientseite über XmlHttp an.
quelle
Es gibt eine Javascript-Bibliothek DNS-JS.com , die genau dies tut.
quelle
Firefox verfügt seit v60 über eine integrierte API für WebExtensions:
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns/resolve
quelle
browser
gibt es in Firefox 64 Beta nicht, daher frage ich mich, ob das entfernt wurde.dns
Genehmigung erforderlich ist und das Skript nicht als Inhaltsskript ausgeführt werden darf (wiebrowser.dns
auch hier nichtSicher, Sie können dies tun, ohne einen Zusatz zu verwenden, nur reines Javascript.
browser.dns.resolve("example.com");
Wenn Sie diese DNS- Methode verwenden , diese jedoch nur mit FIREFOX 60 kompatibel ist, finden Sie weitere Informationen unter MDN https://developer.mozilla.org/en-US/docs / Mozilla / Add-Ons / WebExtensions / API / DNS / Resolutionquelle
Ich denke nicht, dass dies von den meisten Browsern aus Sicherheitsgründen in einem reinen JavaScript-Kontext erlaubt ist, wie die Frage stellt.
quelle
Vielleicht habe ich den Punkt verpasst, aber als Antwort auf NAVY kann der Browser Ihnen die IP-Adresse des Anforderers mitteilen (wenn auch vielleicht nur dessen Dienstanbieter).
Platzieren Sie ein Skript-Tag auf der Seite, die vom Client gerendert werden soll, der einen anderen Server aufruft (auf den src verweist), der nicht ausgeglichen geladen ist einfach und kostengünstig einrichten).
Dies ist die Art von Code, die der Client-Seite hinzugefügt werden muss:
Auf dem anderen Server "someServerIown" muss die ASP-, ASPX- oder PHP-Seite vorhanden sein.
----- enthält folgenden Servercode:
"<% Response.Write (" var clientipaddress = '"& Request.ServerVariables (" REMOTE_ADDR ") &"'; ")%>" (ohne die externen dbl-Anführungszeichen :-))
---- und schreibt diesen Code zurück in das Skript-Tag:
Dadurch wird effektiv eine Javascript-Variable erstellt, auf die Sie mit Javascript auf der Seite nicht weniger zugreifen können.
Hoffentlich greifen Sie auf diese Variable zu und schreiben den Wert in ein Formularsteuerelement, das zum Zurücksenden bereit ist.
Wenn der Benutzer die nächste Anfrage stellt oder erhält, sendet Ihr Javascript und / oder Formular den Wert der Variablen, die der "otherServerIown" für Sie ausgefüllt hat, zurück an den Server, auf dem Sie ihn haben möchten.
So komme ich um den dummen Load Balancer herum, der die Client-IP-Adresse maskiert und sie als die des Load Balancers erscheinen lässt ... dumm ... dumm dumm dumm!
Ich habe nicht die genaue Lösung angegeben, weil die Situation bei jedem etwas anders ist. Das Konzept ist jedoch solide. Beachten Sie außerdem, dass Ihr "otherServerIOwn", wenn Sie dies auf einer HTTPS-Seite tun, auch in dieser sicheren Form liefern muss, da der Client sonst auf gemischte Inhalte aufmerksam gemacht wird. Und wenn Sie https haben, stellen Sie sicher, dass ALLE Ihre Zertifikate gültig sind, andernfalls erhält der Client auch eine Warnung.
Hoffe es hilft jemandem! Entschuldigung, es hat ein Jahr gedauert, um zu antworten / beizutragen. :-)
quelle
Meine Version ist wie folgt:
PHP auf meinem Server:
jQuery auf der Seite:
Es funktioniert domänenübergreifend. Es könnte eine Statusprüfung verwenden. Daran arbeiten.
quelle
Wenn auf dem Client Java installiert ist, können Sie Folgendes tun:
Ansonsten müssen Sie wahrscheinlich ein serverseitiges Skript verwenden.
quelle