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?


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()); 

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());

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());

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");

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.