Разрешение ip-адреса имени хоста

86

У меня есть IP-адрес DNS-сервера и имя хоста.

Как с помощью Java найти IP-адрес имени хоста, возвращенный этим DNS-сервером, используя IP-адрес и имя хоста?

Темная материя
источник
3
dig <hostname>в командной строке?
ceejayoz 03
Как сделать то же самое в java-коде и где использовать IP-адрес и имя хоста DNS-сервера.
Dark Matter
Другой запрос: нам нужно будет предоставить IP-адрес DNS-сервера в любом случае, или он попытается найти его по умолчанию. Я немного запутался здесь, нужно ли нам использовать только имя хоста или имя хоста + IP-адрес DNS-сервера?
Dark Matter
1
Поиск адреса по имени несложный. Пока вы просто используете системный преобразователь по умолчанию. Итак: вам действительно нужно использовать адрес DNS-сервера?
АГИ
У меня тот же вопрос: действительно ли мне нужен адрес DNS-сервера или он будет разрешать адрес по умолчанию. TWW Я использую сервер AIX Unix.
Dark Matter

Ответы:

127

Взгляните InetAddressи на getHostAddress()метод.

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
гриннер
источник
Скажем, если у меня есть IP-адрес dns 10.37.221.152 и имя хоста говорит "www.student.com", то как я могу найти IP-адрес.
Dark Matter
3
@DarkMatter: InetAddressдолжен получить разрешенный адрес DNS, когда вы попросите getHostAddress(). Я не уверен, что вы можете заставить его использовать определенный DNS-сервер.
thegrinner
Значит, он должен в идеале разрешиться сам по себе без явного указания адреса DNS-сервера программистом, верно?
Dark Matter
1
@DarkMatter Да. Я считаю, что он использует любой DNS-сервер, установленный на самом компьютере.
thegrinner
29

Сделать это можно так:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com"))
    System.out.println(addr.getHostAddress());
Валери Штраух
источник
9

Вы можете использовать для этого InetAddress. Попробуйте приведенный ниже код,

InetAddress address = InetAddress.getByName("www.yahoo.com");
System.out.println(address.getHostAddress());
System.out.println(address.getHostName());
Абхинаба Басу
источник
3

Как было сказано выше, вы можете использовать, InetAddress.getByName("hostName")но это может дать вам кешированный IP-адрес. Прочтите документацию по java для того же. Если вы хотите получить IP-адрес от DNS, вы можете использовать:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
дакша
источник
В дополнение к тому, что указал @daksh, вы можете отключить кеш ответов DNS, как предлагается здесь, но имейте в виду время отключения кеша, а также кеширование ответов DNS, сделанных вашей ОС, а также другими DNS-серверами, как предлагается здесь . Надеюсь, это поможет
CrazyGreenHand
По какой-то причине этот вызов дает мне положительный результат для любого имени хоста. Я думал, что по умолчанию использую свой IP-адрес, но нет, он дает мне определенный IP-адрес для любого неизвестного хоста.
Имаскар