#java #linux #scala #networking
#java #linux #scala #сеть
Вопрос:
Какой лучший Java- или Scala-клиент для выдачи http-запросов для локальной ссылки? Кроме того, каков пример того, как использовать клиент с локальными адресами ссылки (это довольно сложно и подвержено ошибкам для утилит unix, таких как curl, которые часто вообще не работают с локальными адресами ссылки из-за требования включения интерфейса в адрес). Я ищу решение, которое работает на Ubuntu Linux.
Ответ №1:
Все клиентские библиотеки Java HTTP используют библиотеки сетевых адресов и сокетов Java более низкого уровня. Они «просто работают» с IPv6 … при условии, что в вашей операционной системе и сети правильно настроена сеть IPv6.
ОБНОВЛЕНИЕ — Java поддерживает «идентификаторы зон» IPv6, известные как «адреса с ограниченной областью действия», в Java 6 и далее. Подробности см. в javadocs здесь.
Итак, в принципе, вы должны иметь возможность использовать клиентскую библиотеку Java HTTP с локальными адресами IPv6-адресов так же, как вы используете ее с другими типами адресов.
Дополнительная ссылка:
Комментарии:
1. Существует фундаментальное различие между локальными адресами ссылки и адресами ipv6 в целом. Вам необходимо указать используемый сетевой интерфейс. Если вы действительно используете не маршрутизируемый локальный адрес ссылки (т. Е. Тот, Который доступен только для коммутаторов в поддомене), тогда «ping6 [fe80 … и т.д. и т.п.]» не будет работать. Это определенно не проблема с интернет-провайдером или сетевой конфигурацией. Curl имеет ошибку в обработке локальных адресов ссылок из-за неправильного форматирования заголовка Host. Ввод http-запроса вручную в telnet работает нормально.
2. Согласно Википедии ( en.wikipedia.org/wiki/Link-local_address#IPv6 ) разница в том, что каждый сетевой адаптер имеет отдельный локальный адрес ссылки. Очевидно, что хост с несколькими сетевыми адаптерами имеет несколько локальных адресов связи, и это может представлять проблему, если вы ссылаетесь на хост по имени, а поиск DNS выдает вам IPv6 для сетевой карты, с которой вы не можете общаться / маршрутизировать. То же самое, если вы пытаетесь выполнить пинг локального адреса ссылки IPv6, на который вы не можете перенаправить. Использование Java-клиента не поможет в этом.
3. Что касается ошибок в curl. 1) Попробуйте вместо этого wget. 2) Последняя версия curl, по-видимому, обрабатывает идентификаторы зон IPv6… я думаю, это то, что сбивало вас с толку. См . geekssharingspace.org/2014/05 /. … Кроме того, см. Отслеживание проблем curl по адресу sourceforge.net/p/curl/bugs для получения информации о последних проблемах, связанных с IPv6.
4. Обычных DNS и DHCP на картинке нет; они отключены для этих узлов. Никакие маршруты не рекламируются никакими другими способами, кроме многоадресной рассылки-DNS (Bonjour / Avahi). Поскольку адреса обнаруживаются с помощью этих инструментов, они доступны с помощью этого интерфейса (опять же, согласно моему комментарию, я могу отправить HTTP-запрос на целевой сервер с помощью telnet с адресом, похожим на:
[fe80...]%eth0
). Поиск по имени хоста должен работать в этих случаях (поскольку MDN могут быть включены в разрешение для.local
имен хостов), но, к сожалению, в Linux есть известная ошибка в GLIB, которая предотвращает это.