Resolvendo o endereço IP de um nome de host

86

Tenho o endereço IP do servidor DNS e um nome de host.

Usando Java, como posso encontrar o endereço IP do nome do host conforme retornado por esse servidor DNS usando o endereço IP e o nome do host?

Matéria escura
fonte
3
dig <hostname>em uma linha de comando?
ceejayoz
Como fazer o mesmo no código java e onde devo usar o endereço IP e o nome do host do servidor DNS.
Dark Matter
Outra consulta será necessária para fornecer o endereço IP do servidor DNS em qualquer caso ou ele tentará encontrá-lo por padrão. Estou um pouco confuso aqui se precisamos usar apenas o nome do host ou nome do host + endereço IP do servidor dns também?
Dark Matter
1
A pesquisa do endereço usando o nome não é complicada. Contanto que você use apenas o resolvedor padrão do sistema. Então: você realmente precisa usar o endereço do servidor DNS?
AH
Eu tenho a mesma pergunta: eu realmente preciso do endereço do servidor DNS ou ele resolverá o endereço por padrão.BTW Estou usando um servidor AIX Unix.
Dark Matter

Respostas:

127

Dê uma olhada em InetAddresse o getHostAddress()método.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
thegrinner
fonte
Digamos que se eu tenho um endereço IP dns 10.37.221.152 e um nome de host diga "www.student.com", como posso encontrar o endereço IP.
Dark Matter
3
@DarkMatter: InetAddressdeve obter o endereço DNS resolvido quando você solicitar getHostAddress(). Não tenho certeza se você pode forçá-lo a usar um servidor DNS específico .
thegrinner,
Portanto, o ideal é que ele seja resolvido sozinho, sem que o programador especifique o endereço do servidor DNS explicitamente, certo?
Dark Matter
1
@DarkMatter Sim. Eu acredito que ele usa qualquer servidor DNS que esteja configurado no próprio computador.
thegrinner,
29

Você pode fazer assim:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com"))
    System.out.println(addr.getHostAddress());
Walery Strauch
fonte
9

Você pode usar InetAddress para isso. Experimente o código abaixo,

InetAddress address = InetAddress.getByName("www.yahoo.com");
System.out.println(address.getHostAddress());
System.out.println(address.getHostName());
Abhinaba Basu
fonte
3

Como sugerido por tudo acima, você pode usar, InetAddress.getByName("hostName")mas isso pode lhe dar um IP em cache. Leia a documentação do java para o mesmo. Se você deseja obter um IP do DNS, pode usar:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
daksh
fonte
Além do que @daksh apontou, você pode desabilitar o cache de resposta DNS conforme sugerido aqui, mas esteja ciente do momento de desabilitar o cache, bem como o cache de respostas DNS feitas por seu sistema operacional, bem como outros servidores DNS, conforme sugerido aqui . Espero que isso ajude
CrazyGreenHand
Por algum motivo, essa chamada me dá um resultado positivo para qualquer nome de host. Eu pensei que o padrão era meu IP, mas não, ele me dá algum IP específico para qualquer host desconhecido.
Imaskar