from - ¿Puedo realizar una búsqueda de DNS(nombre de host a dirección IP) usando Javascript del lado del cliente?
obtener ip php (12)
Me gustaría usar Javascript del lado del cliente para realizar una búsqueda DNS (nombre de host a dirección IP) como se ve desde la computadora del cliente. ¿Es eso posible?
Como mucha gente dijo que necesita usar un servicio externo y lo llama. Y eso solo le dará la resolución de DNS desde la perspectiva del servidor.
Si eso es lo suficientemente bueno y si solo necesitas resolución DNS, puedes utilizar el siguiente contenedor Docker:
https://github.com/kuralabs/docker-webaiodns
Puntos finales:
[GET] /ipv6/[domain]
: realiza una resolución DNS para el dominio dado y devuelve las direcciones IPv6 asociadas.
{
"addresses": [
"2a01:91ff::f03c:7e01:51bd:fe1f"
]
}
[GET] /ipv4/[domain]
: realice una resolución DNS para un dominio determinado y devuelva las direcciones IPv4 asociadas.
{
"addresses": [
"139.180.232.162"
]
}
Mi recomendación es que configure su servidor web para invertir el proxy en el contenedor de un punto final en particular en su servidor que sirve su Javascript y lo llame usando sus funciones Javascript Ajax estándar.
Hacer esto requeriría romper el arenero del navegador. Intenta que tu servidor haga la búsqueda y solicítala desde el lado del cliente a través de XmlHttp.
Hay un servicio de terceros que proporciona una API REST compatible con CORS para realizar búsquedas DNS desde el navegador - https://exana.io/tools/dns/
La versión alojada de JSONP funciona como un encanto, pero parece que revisa sus recursos durante la noche la mayoría de los días (hora del este), así que tuve que crear mi propia versión.
Así es como lo logré con PHP:
<?php
header(''content-type: application/json; charset=utf-8'');
$data = json_encode($_SERVER[''REMOTE_ADDR'']);
echo $_GET[''callback''] . ''('' . $data . '');'';
?>
Entonces, el Javascript es exactamente el mismo que antes, simplemente no es una matriz:
<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>
¡Simple como eso!
Nota al pie: ¡asegúrese de limpiar su $ _GET si está usando esto en cualquier entorno público!
Mi versión es así:
php en mi servidor:
<?php
header(''content-type: application/json; charset=utf-8'');
$data = json_encode($_SERVER[''REMOTE_ADDR'']);
$callback = filter_input(INPUT_GET,
''callback'',
FILTER_SANITIZE_STRING,
FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);
echo $callback . ''('' . $data . '');'';
?>
jQuery en la página:
var self = this;
$.ajax({
url: this.url + "getip.php",
data: null,
type: ''GET'',
crossDomain: true,
dataType: ''jsonp''
}).done( function( json ) {
self.ip = json;
});
Funciona de dominio cruzado. Podría usar una verificación de estado. Trabajando en ello.
Muy tarde, pero creo que muchas personas seguirán aterrizando aquí a través de "Google Airlines". Un enfoque moderno es usar WebRTC que no requiere soporte de servidor.
https://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/
El siguiente código es una copia y pegar de http://net.ipcalf.com/
// NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23
var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
if (RTCPeerConnection) (function () {
var rtc = new RTCPeerConnection({iceServers:[]});
if (window.mozRTCPeerConnection) { // FF needs a channel/stream to proceed
rtc.createDataChannel('''', {reliable:false});
};
rtc.onicecandidate = function (evt) {
if (evt.candidate) grepSDP(evt.candidate.candidate);
};
rtc.createOffer(function (offerDesc) {
grepSDP(offerDesc.sdp);
rtc.setLocalDescription(offerDesc);
}, function (e) { console.warn("offer failed", e); });
var addrs = Object.create(null);
addrs["0.0.0.0"] = false;
function updateDisplay(newAddr) {
if (newAddr in addrs) return;
else addrs[newAddr] = true;
var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });
document.getElementById(''list'').textContent = displayAddrs.join(" or perhaps ") || "n/a";
}
function grepSDP(sdp) {
var hosts = [];
sdp.split(''/r/n'').forEach(function (line) { // c.f. http://tools.ietf.org/html/rfc4566#page-39
if (~line.indexOf("a=candidate")) { // http://tools.ietf.org/html/rfc4566#section-5.13
var parts = line.split('' ''), // http://tools.ietf.org/html/rfc5245#section-15.1
addr = parts[4],
type = parts[7];
if (type === ''host'') updateDisplay(addr);
} else if (~line.indexOf("c=")) { // http://tools.ietf.org/html/rfc4566#section-5.7
var parts = line.split('' ''),
addr = parts[2];
updateDisplay(addr);
}
});
}
})(); else {
document.getElementById(''list'').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d/" /" -f2 | tail -n1</code>";
document.getElementById(''list'').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";
}
No creo que esto esté permitido por la mayoría de los navegadores por razones de seguridad, en un contexto de JavaScript puro como lo plantea la pregunta.
Si el cliente tiene Java instalado, puede hacer algo como esto:
ipAddress = java.net.InetAddress.getLocalHost().getHostAddress();
Aparte de eso, probablemente tendrá que usar un script del lado del servidor.
Soy consciente de que esta es una vieja pregunta, pero mi solución puede ayudar a otros.
Considero que los servicios JSON (P) que hacen que esto sea fácil no duran para siempre, pero el siguiente JavaScript funciona bien para mí al momento de escribir este artículo.
<script type="text/javascript">function z (x){ document.getElementById(''y'').innerHTML=x.query }</script>
<script type=''text/javascript'' src=''http://ip-api.com/json/zero.eu.org?callback=z''></script>
Lo anterior escribe la dirección IP de mi servidor en la página en la que se encuentra, pero la secuencia de comandos se puede modificar para encontrar cualquier dirección IP al cambiar ''zero.eu.org'' a otro nombre de dominio. Esto se puede ver en acción en mi página en: http://meon.zero.eu.org/
Tal vez me perdí el punto, pero en respuesta al chico NAVY aquí es cómo el navegador puede decirle la dirección IP del "solicitante" (aunque tal vez solo su proveedor de servicios).
Coloque una etiqueta de script en la página para que la represente el cliente que llama (tiene src apuntando a) otro servidor que no está cargado equilibrado (me doy cuenta de que esto significa que necesita acceso a un segundo servidor pero el alojamiento es barato en estos días y puede configurar esto fácil y económicamente).
Este es el tipo de código que debe agregarse a la página del cliente:
En el otro servidor, "someServerIown", debe tener la página ASP, ASPX o PHP;
----- contiene un código de servidor como este:
"<% Response.Write (" var clientipaddress = ''"& Request.ServerVariables (" REMOTE_ADDR ") &"''; ")%>" (sin las comillas externas dbl :-))
---- y escribe este código en la etiqueta de script:
var clientipaddress = ''178.32.21.45'';
Esto crea efectivamente una variable de Javascript a la que puede acceder con Javascript en la página no menos.
Esperemos que accedas a esta variable y escribas el valor en un control de formulario listo para enviar de vuelta.
Cuando el usuario publica o recibe la siguiente solicitud, su Javascript y / o formulario envía el valor de la variable que el "otherServerIown" ha rellenado para usted, de vuelta al servidor que le gustaría.
Así es como me muevo por el tonto equilibrador de carga que tenemos que enmascara la dirección IP del cliente y lo hace aparecer como el de Load Balanceer ... dumb ... tonto tonto tonto!
No he dado la solución exacta porque la situación de todos es un poco diferente. El concepto es sólido, sin embargo. Además, tenga en cuenta que si está haciendo esto en una página HTTPS, su "otherServerIOwn" también debe entregar en esa forma segura, de lo contrario, el Cliente recibirá una alerta sobre el contenido mixto. Y si tiene https, asegúrese de que TODOS sus certs sean válidos; de lo contrario, el cliente también recibe una advertencia.
Espero que ayude a alguien! Lo siento, tomó un año para responder / contribuir. :-)
Editar : esta pregunta me provocó comezón, así que puse un servicio web JSONP en Google App Engine que devuelve la dirección IP del cliente. Uso:
<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>
Sí, no se necesitan servidores proxy.
Pure JS no puede. Si tiene un script de servidor bajo el mismo dominio que lo imprime, puede enviar un XMLHttpRequest para leerlo.
No hay noción de hosts o direcciones IP en la biblioteca estándar de JavaScript. Por lo tanto, tendrá que acceder a un servicio externo para buscar nombres de host para usted.
Recomiendo alojar un cgi-bin que busque la dirección IP de un nombre de host y acceder a través de javascript.