Как я могу использовать curl с :: 1 для обратной петли на базе ipv6?

29

Я попробовал несколько способов, но они, кажется, запутывают завиток.

root@testt:~# curl localhost:8080
<h1>Hello world!</h1>

<p>Boom Bam Splat</p>
root@testt:~# curl ::1:8080
curl: (3) IPv6 numerical address used in URL without brackets
root@testt:~# curl [::1]:8080
curl: (3) [globbing] bad range specification in column 2
hak8or
источник
1
Я знаю, что вы выбрали ответ, но поскольку между этими двумя ответами есть сходство, не могли бы вы уточнить, какая конкретная команда сработала для вас?
JakeGould
1
Спасибо за ответы ранее! Я был действительно в затруднении, чтобы принять его, так как они оба были такими лаконичными и так далее, хотя я выбрал другое, так как этот пользователь только начинает, по сравнению с вами, и отвечает первым. Несмотря на это, достаточно было просто использовать параметр -g.
hak8or

Ответы:

45

Глядя на предложения - и разбивку распространенных ошибок - в этом сообщении в блоге , возможно, вам следует попробовать это.

curl -g -6 "http://[::1]:8080/" 

-gКажется волшебный ключ , чтобы получить эту работу. Как объяснено на curlстранице руководства :

Эта опция отключает «анализатор глобализации URL». Когда вы устанавливаете эту опцию, вы можете указать URL-адреса, которые содержат буквы {} [], без их интерпретации самим curl. Обратите внимание, что эти буквы не являются обычным легальным содержимым URL, но они должны быть закодированы в соответствии со стандартом URI.

И -6средства для использования только IPv6:

Если libcurl способен разрешать адрес для нескольких версий IP (что и происходит, если он поддерживает IPv6), эта опция указывает libcurl разрешать имена только в адреса IPv6.

Но, читая это описание функциональности, кажется, что -6он не нужен для чистого IPv6-адреса; только если используется curlимя хоста, к которому подключены адреса IPv4 и IPv6, поэтому он предпочтет IPv6. Просто кое-что отметить.

JakeGould
источник
OSX 10.13.3: Это работает: $ curl "http://localhost:50710/file1.txt"и это не $ curl -g -6 "http://[::1]:50710/file1.txt" скручивается: (7) Не удалось подключиться к порту :: 1 50710: Соединение отклонено . И $ curl -Vпоказывает IPv6как особенность (curl 7.58.0). Мои /etc/hostsсписки файлов:::1 localhost
7
Эй, спасибо за совет о моем сервере! Теперь, когда мой сервер привязан к адресу ipv6:, 0.0.0.0.0.0.0.1я могу просто сделать curl "http://[::1]:50710/file1.txt". Если я добавлю -vопцию для подробного вывода, я увижу в выводе: Trying :: 1 ... * TCP_NODELAY set * Подключен к :: 1 (:: 1) порту 52489 (# 0) - По какой-то причине я не сделал Мне не нужна -gопция
7
Дополнительная информация: С моим сервером , связанным с ipv6 хозяином, я все еще могу сделать запрос ipv4 получить с завитком: curl -v "http://localhost:52489/file1.txt". В выводе я вижу: Trying :: 1 ... * TCP_NODELAY set * Подключен к локальному хосту (:: 1) порт 52489 (# 0) - Ах, я думаю, это потому, что мой /etc/hostsфайл разрешает имя "localhost" для обоих IPV4 и IPV6 адрес. И если я попытаюсь: curl -v "http://127.0.0.1:52489/file1.txt"тогда я получаю сообщение об отказе в соединении.
7
1
@ 7stud «Теперь, когда мой сервер привязан к адресу ipv6:» 0.0.0.0.0.0.0.1. Вы серьезно не представляете, о чем говорите. Я предлагаю написать новый вопрос, объясняющий все, что вы объясняете в этих комментариях, и посмотреть, сможет ли кто-нибудь вам помочь. Обратитесь к этому ответу, если хотите. Но если вы считаете 0.0.0.0.0.0.0.1действительный адрес IPv6, у вас уже плохое состояние.
JakeGould
8

Из "curl --manual" я нашел это:

curl -g "http://[2001:1890:1112:1::20]/"

или

curl "http://[2001:1890:1112:1::20]/"

Итак, для адреса, о котором вы спрашиваете, попробуйте:

curl -g "http://[::1]:8080/"

Тем не менее, вы можете запустить:

curl -V

и посмотрите, отображается ли IPv6 в строке с надписью «Features» (третья строка, не считая лишних строк из переноса слов). Я нашел, что моя версия не. Страница загрузки cURL содержит различные ссылки на операционные системы, включая сайт загрузки curl 7.41.0 (который в настоящее время является последней версией) для Microsoft Windows. Эта страница имеет несколько исполняемых файлов (доступно для Microsoft Windows); первый, который я нашел, не поддерживал IPv6. Но два, описанных как «ipv6-sspi-spnego-winssl» (один для x86 и один для x64), сделали: curl -V действительно показал IPv6. Так что будьте осторожны с тем, какой пакет вы загружаете.

TOOGAM
источник