Разрешение 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


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-адрес для любого неизвестного хоста.
Имаскар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.