Eu gostaria de usar Javascript do lado do cliente para realizar uma pesquisa DNS (nome do host para endereço IP), visto do computador do cliente. Isso é possível?
javascript
dns
Noah Jacobson
fonte
fonte
Respostas:
Não há noção de hosts ou endereços IP na biblioteca padrão javascript. Portanto, você terá que acessar algum serviço externo para pesquisar nomes de host para você.
Eu recomendo hospedar um cgi-bin que procura o endereço IP de um nome de host e acessa-o via javascript.
fonte
Edit : Esta questão me deu uma coceira, então eu coloquei um serviço da web JSONP no Google App Engine que retorna o endereço IP do cliente. Uso:
Oba, não são necessários proxies de servidor.
JS puro não pode. Se você tiver um script de servidor no mesmo domínio que o imprime, poderá enviar um XMLHttpRequest para lê-lo.
fonte
Muito tarde, mas acho que muitas pessoas ainda vão pousar aqui através do "Google Airlines". Uma abordagem moderada é usar WebRTC que não requer suporte de servidor.
https://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/
O próximo código é copiar e colar de http://net.ipcalf.com/
fonte
A versão JSONP hospedada funciona perfeitamente, mas parece que gasta seus recursos durante a noite na maioria dos dias (horário do leste), então tive que criar minha própria versão.
Foi assim que fiz isso com o PHP:
Então, o Javascript é exatamente o mesmo de antes, mas não uma matriz:
Simples assim!
Observação lateral: certifique-se de limpar seu $ _GET se estiver usando em qualquer ambiente voltado para o público!
fonte
Sei que essa pergunta foi feita há muito tempo, mas decidi oferecer uma resposta mais recente.
DNS sobre HTTPS (DoH)
Você pode enviar consultas DNS por HTTPS para resolvedores de DNS que o suportam. O padrão para DOH é descrito no RFC 8484 .
Isso é semelhante ao que todas as outras respostas sugerem, apenas que DoH é na verdade o protocolo DNS sobre HTTPS. É também um padrão "proposto" da Internet e está se tornando bastante popular. Por exemplo, alguns dos principais navegadores o suportam ou têm planos de suportá-lo (Chrome, Edge, Firefox), e a Microsoft está em processo de integrá-lo em seu sistema operacional.
Um dos objetivos do DoH é:
Existe uma ferramenta de código aberto feita especialmente para fazer pesquisas de DNS em aplicativos da web chamada dohjs . Ele faz consultas em formato de fio DNS sobre HTTPS (DoH), conforme descrito em RFC 8484 . Ele suporta os métodos GET e POST.
Divulgação completa: eu contribuo com dohjs.
DNS sobre APIs JSON HTTPS
Se você não quiser se preocupar com o formato de cabo do DNS, o Google e o Cloudflare oferecem APIs JSON para DNS sobre HTTPS.
Exemplo de código Javascript para pesquisar example.com com a API JSON DOH do Google:
Exemplos do RFC para DOH GET e POST com wireformat
Aqui estão os exemplos que o RFC fornece para GET e POST (consulte https://tools.ietf.org/html/rfc8484#section-4.1.1 ):
Exemplo GET:
Exemplo de POST:
Outros lugares para enviar consultas DOH
Você pode encontrar uma lista de alguns resolvedores de DNS públicos compatíveis com DNS sobre HTTPS em alguns lugares:
Dos recursos acima, eu diria que a lista no wiki do Curl e a lista DNSCrypt são provavelmente as mais completas e atualizadas com mais frequência. A página do Curl também inclui uma lista de ferramentas de código aberto para DoH (servidores, proxies, bibliotecas de cliente, etc).
fonte
Sei que essa é uma questão antiga, mas minha solução pode ajudar outras pessoas.
Acho que os serviços JSON (P) que tornam isso fácil não duram para sempre, mas o JavaScript a seguir funciona bem para mim no momento em que escrevo.
O código acima escreve o IP do meu servidor na página em que está localizado, mas o script pode ser modificado para encontrar qualquer IP alterando 'zero.eu.org' para outro nome de domínio. Isso pode ser visto em ação na minha página: http://meon.zero.eu.org/
fonte
Existe um serviço de terceiros que fornece uma API REST compatível com CORS para realizar pesquisas de DNS a partir do navegador - https://exana.io/tools/dns/
fonte
Como muitas pessoas disseram, você precisa usar um serviço externo e ligar para ele. E isso só lhe dará a resolução DNS da perspectiva do servidor.
Se isso for bom o suficiente e você precisar apenas da resolução DNS, poderá usar o seguinte contêiner do Docker:
https://github.com/kuralabs/docker-webaiodns
Endpoints:
[GET] /ipv6/[domain]
: Execute uma resolução DNS para determinado domínio e retorne os endereços IPv6 associados.[GET] /ipv4/[domain]
: Execute uma resolução DNS para determinado domínio e retorne os endereços IPv4 associados.Minha recomendação é que você configure seu servidor web para reverter o proxy para o contêiner em um ponto de extremidade específico em seu servidor servindo seu Javascript e chamá-lo usando suas funções Ajax Javascript padrão.
fonte
Isso exigiria quebrar a sandbox do navegador. Tente deixar seu servidor fazer a pesquisa e solicitar isso do lado do cliente via XmlHttp.
fonte
Existe uma biblioteca javascript DNS-JS.com que faz exatamente isso.
fonte
O Firefox tem uma API integrada para isso desde a v60, para WebExtensions:
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns/resolve
fonte
browser
não existe no Firefox 64 beta, então eu me pergunto se ele foi removido.dns
permissão e o script não deve ser executado como um script de conteúdo (como novamente,browser.dns
não seria exposto lá)certeza de que você pode fazer isso sem usar qualquer adição, apenas javascript puro, usando este método de dns,
browser.dns.resolve("example.com");
mas é compatível apenas com FIREFOX 60, você pode ver mais informações no MDN https://developer.mozilla.org/en-US/docs / Mozilla / Add-ons / WebExtensions / API / dns / resolvefonte
Não acho que isso seja permitido pela maioria dos navegadores por razões de segurança, em um contexto JavaScript puro, como a pergunta pede.
fonte
Talvez eu tenha perdido o ponto, mas em resposta ao cara da MARINHA, aqui está como o navegador pode informar o endereço IP do 'solicitante' (embora talvez apenas o provedor de serviços).
Coloque uma tag de script na página a ser renderizada pelo cliente que chama (tem src apontando para) outro servidor que não está carregado balanceado (eu percebo que isso significa que você precisa de acesso a um segundo servidor, mas a hospedagem é barata hoje em dia e você pode configurar isso de forma fácil e barata).
Este é o tipo de código que precisa ser adicionado à página do cliente:
No outro servidor "someServerIown" você precisa ter a página ASP, ASPX ou PHP que;
----- contém o código do servidor como este:
"<% Response.Write (" var clientipaddress = '"& Request.ServerVariables (" REMOTE_ADDR ") &"'; ")%>" (sem as aspas dbl externas :-))
---- e grava este código de volta na tag de script:
Isso cria efetivamente uma variável Javascript que você pode acessar com Javascript na página, nada menos.
Felizmente, você acessa essa var e grava o valor em um controle de formulário pronto para ser enviado de volta.
Quando o usuário postar ou receber a próxima solicitação, seu Javascript e / ou formulário enviará o valor da variável que "otherServerIown" preencheu para você, de volta ao servidor em que você gostaria.
É assim que consigo contornar o balanceador de carga burro que temos, que mascara o endereço IP do cliente e o faz parecer o do balanceador de carga ... burro ... burro burro burro!
Não dei a solução exata porque a situação de cada pessoa é um pouco diferente. O conceito é sólido, no entanto. Além disso, observe que se você estiver fazendo isso em uma página HTTPS, seu "otherServerIOwn" também deve ser entregue naquela forma segura, caso contrário, o Cliente será alertado sobre conteúdo misto. E se você tiver https, certifique-se de que TODOS os seus certificados são válidos, caso contrário, o cliente também receberá um aviso.
Espero que ajude alguém! Desculpe, demorou um ano para responder / contribuir. :-)
fonte
Minha versão é assim:
php no meu servidor:
jQuery na página:
Funciona em vários domínios. Ele poderia usar uma verificação de status. Trabalhando nisso.
fonte
Se o cliente tiver Java instalado, você pode fazer algo assim:
Fora isso, você provavelmente terá que usar um script do lado do servidor.
fonte