Résolution de l'adresse IP d'un nom d'hôte

86

J'ai l'adresse IP du serveur DNS et un nom d'hôte.

En utilisant Java, comment puis-je trouver l'adresse IP du nom d'hôte renvoyée par ce serveur DNS à l'aide de l'adresse IP et du nom d'hôte?

Matière noire
la source
3
dig <hostname>dans une ligne de commande?
ceejayoz
Comment faire de même dans le code java et où dois-je utiliser l'adresse IP et le nom d'hôte du serveur DNS.
Dark Matter
Une autre requête devra-t-on fournir l'adresse IP du serveur DNS dans tous les cas ou essaiera-t-il de la trouver par défaut.Je suis un peu confus ici si nous devons utiliser uniquement le nom d'hôte ou le nom d'hôte + l'adresse IP du serveur DNS?
Dark Matter
1
La recherche de l'adresse à l'aide du nom n'est pas compliquée. Tant que vous n'utilisez que le résolveur par défaut du système. Alors: avez-vous vraiment besoin d'utiliser l'adresse du serveur DNS?
AH
J'ai la même question: ai-je vraiment besoin d'une adresse de serveur DNS ou est-ce que cela résoudra l'adresse par défaut.BTW J'utilise un serveur AIX Unix.
Dark Matter

Réponses:

127

Jetez un œil à InetAddressla getHostAddress()méthode.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
thegrinner
la source
Dites si j'ai une adresse IP DNS 10.37.221.152 et un nom d'hôte dit "www.student.com" alors comment puis-je trouver l'adresse IP.
Dark Matter
3
@DarkMatter: InetAddressdevrait obtenir l'adresse DNS résolue lorsque vous le demandez getHostAddress(). Je ne sais pas si vous pouvez le forcer à utiliser un serveur DNS spécifique .
thegrinner
Il doit donc idéalement résoudre par lui-même sans que le programmeur ne spécifie explicitement l'adresse du serveur DNS, n'est-ce pas?
Dark Matter
1
@DarkMatter Oui. Je crois qu'il utilise n'importe quel serveur DNS installé sur l'ordinateur lui-même.
thegrinner
29

Vous pouvez le faire comme ceci:

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

Vous pouvez utiliser InetAddress pour cela. Essayez le code ci-dessous,

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

Comme suggéré par tout ce qui précède, vous pouvez utiliser InetAddress.getByName("hostName")mais cela peut vous donner une adresse IP en cache, lisez la documentation java pour la même chose. Si vous souhaitez obtenir une adresse IP à partir du DNS, vous pouvez utiliser:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
daksh
la source
En plus de ce que @daksh a souligné, vous pouvez désactiver le cache de réponse DNS comme suggéré ici, mais soyez conscient du moment de la désactivation du cache ainsi que de la mise en cache des réponses DNS effectuées par votre système d'exploitation ainsi que par d'autres serveurs DNS, comme suggéré ici . J'espère que cela aide
CrazyGreenHand
Pour une raison quelconque, cet appel me donne un résultat positif pour n'importe quel nom d'hôte. Je pensais que mon IP par défaut était défini, mais non, cela me donne une adresse IP spécifique pour tout hôte inconnu.
Imaskar