Як я можу використовувати 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

1
Я знаю, що ви вибрали відповідь, але оскільки тут є дві подібності між двома відповідями, чи можете ви уточнити, яка конкретна команда працювала для вас?
JakeGould

1
Дякуємо, що давали відповіді раніше! Мені по-справжньому важко було прийняти, оскільки вони були настільки стислими і що-небудь, хоча я вибрав іншого, оскільки цей користувач тільки починає порівняно з вами і відповів першим. Незважаючи на те, достатньо лише використання параметра - g.
hak8or

Відповіді:


45

Дивлячись на пропозиції та розбір поширених помилок на цій публікації в блозі , можливо, ви повинні спробувати це.

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

-gЗдається чарівний ключ , щоб отримати цю роботу. Як пояснено на сторінці curlлюдини:

Ця опція вимикає "Аналізатор глобальної обробки URL-адрес". Встановивши цей параметр, ви можете вказати URL-адреси, які містять літери {} [], не інтерпретуючи їх самим завитком. Зауважте, що ці листи не є нормальним юридичним вмістом URL-адреси, але вони повинні бути закодовані відповідно до стандарту URI.

І -6засоби використовувати лише IPv6:

Якщо libcurl здатний вирішити адресу до декількох версій IP (що це, якщо він підтримує IPv6), цей параметр вказує libcurl вирішувати імена лише на адреси IPv6.

Але читаючи цей опис функціональності, схоже -6, насправді не потрібно для чистої адреси IPv6; лише якщо ви користуєтесь curlім'ям хоста, у якого підключені IPv4 та IPv6-адреса, тому він вважає за краще IPv6. Просто щось зауважити.


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параметр для багатослівного виведення, я бачу у висновку: Спробу :: :: ... ... встановлений TCP_NODELAY * Підключено до :: 1 (:: 1) порт 52489 (# 0) - Чомусь я не -gваріант не потрібен .
7

Додаткова інформація: З моїм сервером , пов'язаним з ipv6 господарем, я все ще можу зробити запит ipv4 отримати з завитком: curl -v "http://localhost:52489/file1.txt". У висновку я бачу: Спроба :: 1 ... * TCP_NODELAY set * Підключено до порту localhost (:: 1) 52489 (# 0) - А, я думаю, що це тому, що мій /etc/hostsфайл вирішує ім'я "localhost" як ipv4 та ipv6 адреса. І якщо я спробую: curl -v "http://127.0.0.1:52489/file1.txt"тоді я отримую повідомлення про помилку відмови.
7stud

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 у рядку з написом "Особливості" (третій рядок, не рахуючи зайвих рядків від обгортання слів). Я знайшов, що моя версія не стала. На сторінці завантаження cURL є різні посилання на операційні системи, включаючи сайт завантаження curl 7.41.0 (який є останньою версією) для Microsoft Windows. Ця сторінка має кілька виконуваних файлів (доступна для Microsoft Windows); перший, який я знайшов, не підтримував IPv6. Але два, описані як "ipv6-sspi-spnego-winssl" (один для x86 і один для x64) зробили: curl -V показав IPv6. Тому будьте уважні, який пакет завантажуєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.