InetAddress.getByName не работает за прокси - PullRequest
5 голосов
/ 02 августа 2011

Я пытаюсь преобразовать имя хоста в соответствующий ему IP-адрес.

Моя среда представляет собой mac в корпоративной сети за прокси-сервером, который настраивается с помощью файла .pac через системные настройки(автоматическая настройка прокси).Пока все работает нормально, и я могу получить доступ к ресурсам внутри и вне моей корпоративной сети.

Разрешение хостов в моей сети работает отлично: InetAddress.getByName("host.local");

Но когда я использую внешние имена хостов,Я получаю UnknownHostException: InetAddress.getByName("google.com");

производит

Exception in thread "main" java.net.UnknownHostException: google.com
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850)
    at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1154)
    at java.net.InetAddress.getAllByName(InetAddress.java:1084)
    at java.net.InetAddress.getAllByName(InetAddress.java:1020)
    at java.net.InetAddress.getByName(InetAddress.java:970)
    at Test.main(Test.java:67)

(я немного удивлен Inet6AddressImpl здесь)

Насколько я понимаю, этоInetAddress.getByName, используя собственные механизмы для разрешения имен хостов.Поэтому я не думаю, что ошибка вызвана отсутствующей конфигурацией прокси в java jvm.

Но что еще это может быть, если все остальное работает нормально?

Некоторые (возможно,) полезная дополнительная информация:

  • Я использую MacBook, ifconfig показывает интерфейсы lo0, gif0, stf0, en0, fw0, en1 -> подключенные к сети, с ipv4address.

  • nslookup google.com на консоли возвращает ** server can't find google.com: NXDOMAIN

  • Один и тот же код на машине с Windows в сети выдает то же исключение

Есть идеи о причине этой ошибки?Или есть другие способы разрешения имен хостов в Java?

Ответы [ 3 ]

5 голосов
/ 02 августа 2011

Ваш корпоративный DNS-сервер препятствует разрешению любого интерент-домена (они, вероятно, не хотят, чтобы люди просматривали не корпоративный контекст).

Это подтверждается тем фактом, что ваш запрос nslookup не выполнен.

Если у вас нет права голоса по корпоративной политике, и ваша машина разработки должна оставаться на территории вашей компании, вы ничего не можете сделать.

0 голосов
/ 17 апреля 2018

Я знаю, что этот вопрос был обновлен, но, поскольку он является лучшим в списке результатов в Google, я хотел добавить эту полезную информацию, которая может сбить людей с толку.

При использовании этого метода запомнитеследующее.

http://www.google.com -- DOES NOT WORK
google.com -- WORKS!
0 голосов
/ 10 апреля 2012

Как уже упоминалось в в этом сообщении , вы можете установить собственный DNS с помощью настройки только Sun-JVM. У меня была такая же проблема разрешения, но я смог явно запросить прокси для поиска, установив его также как DNS-сервер. YMMV

System.setProperty("sun.net.spi.nameservice.nameservers", "<my-proxy-ip>");
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun");
...