Jak mogę używać curl z :: 1 dla sprzężenia zwrotnego opartego na IPv6?

29

Próbowałem na kilka sposobów, ale wydają się one mylące zwijanie.

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
źródło
1
Wiem, że wybrałeś odpowiedź, ale skoro są tutaj podobieństwa między tymi dwiema odpowiedziami, czy możesz wyjaśnić, które konkretne polecenie działało dla Ciebie?
JakeGould
1
Dziękujemy za udzielenie odpowiedzi wcześniej! Byłem naprawdę mocno zmuszony do zaakceptowania, ponieważ oba były tak zwięzłe i tak dalej, chociaż wybrałem inny, ponieważ ten użytkownik dopiero zaczyna w porównaniu z tobą i odpowiedział jako pierwszy. Niezależnie od tego wystarczy użycie opcji -g.
hak8or

Odpowiedzi:

45

Patrząc na sugestie i zestawienie typowych błędów w tym wpisie na blogu , być może powinieneś spróbować.

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

-gWydaje się być magiczny klucz, aby dostać tę pracę. Jak wyjaśniono na curlstronie podręcznika :

Ta opcja wyłącza „parser globowania adresów URL”. Po ustawieniu tej opcji możesz określić adresy URL zawierające litery {} [] bez interpretowania ich przez sam curl. Pamiętaj, że te litery nie są normalną legalną zawartością URL, ale powinny być kodowane zgodnie ze standardem URI.

A -6sposoby używania tylko IPv6:

Jeśli libcurl jest w stanie rozpoznać adres do wielu wersji IP (czyli jeśli obsługuje IPv6), ta opcja każe libcurl rozpoznać nazwy tylko na adresy IPv6.

Ale czytając ten opis funkcjonalności, wydaje się, że tak -6naprawdę nie jest potrzebny do czystego adresu IPv6; tylko jeśli używa curlsię nazwy hosta, do którego jest podłączony adres IPv4 i IPv6, więc wolałby IPv6. Po prostu coś do odnotowania.

JakeGould
źródło
OSX 10.13.3: Działa: $ curl "http://localhost:50710/file1.txt"i to się nie $ curl -g -6 "http://[::1]:50710/file1.txt" zwija: (7) Nie udało się połączyć z :: 1 portem 50710: Połączenie odrzucone . I $ curl -Vpokazuje IPv6jako funkcję (curl 7.58.0). Moje /etc/hostslisty plików:::1 localhost
7stud
Hej, dzięki za podpowiedź na temat mojego serwera! Teraz, kiedy mój serwer jest powiązany z adresem IPv6: 0.0.0.0.0.0.0.1mogę po prostu to zrobić curl "http://[::1]:50710/file1.txt". Jeśli dodam -vopcję pełnego wyjścia, zobaczę w wyniku: Próbowanie :: 1 ... * Zestaw TCP_NODELAY * Połączony z portem :: 1 (:: 1) 52489 (# 0) - Z jakiegoś powodu nie nie potrzebujesz -gopcji.
7stud
Więcej informacji: Z mojego serwera związanego z IPv6 hosta, mogę jeszcze zrobić IPv4 żądanie GET z curl: curl -v "http://localhost:52489/file1.txt". W danych wyjściowych widzę: Próbuję :: 1 ... * Zestaw TCP_NODELAY * Połączony z portem localhost (:: 1) 52489 (# 0) - Ach, myślę, że to dlatego, że mój /etc/hostsplik rozpoznaje nazwę „localhost” na oba adres ipv4 i ipv6. A jeśli spróbuję: curl -v "http://127.0.0.1:52489/file1.txt"wtedy otrzymuję błąd odmowy połączenia.
7stud
1
@ 7stud „Teraz, kiedy mój serwer jest powiązany z adresem ipv6: 0.0.0.0.0.0.0.1”. Naprawdę nie masz pojęcia, o czym mówisz. Sugeruję napisanie nowego pytania wyjaśniającego wszystko, co wyjaśnisz w tych komentarzach i sprawdź, czy ktoś może ci pomóc. Jeśli chcesz, skorzystaj z tej odpowiedzi. Ale jeśli uważasz, że 0.0.0.0.0.0.0.1jest to prawidłowy adres IPv6, masz już złe podstawy.
JakeGould
8

Z „curl - manual” znalazłem to:

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

lub

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

Tak więc dla adresu, o który pytasz, spróbuj:

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

Możesz jednak uruchomić:

curl -V

i sprawdź, czy IPv6 pojawia się w wierszu z napisem „Funkcje” (trzeci wiersz, nie licząc dodatkowych wierszy z zawijania słów). Okazało się, że moja wersja nie. Strona pobierania cURL zawiera różne łącza do systemów operacyjnych, w tym stronę pobierania curl 7.41.0 (która jest obecnie najnowszą wersją) dla systemu Microsoft Windows. Ta strona ma wiele plików wykonywalnych (dostępnych dla Microsoft Windows); pierwszy, który znalazłem, nie obsługiwał IPv6. Ale dwa opisane jako „ipv6-sspi-spnego-winssl” (jeden dla x86 i jeden dla x64): curl -V wykazywał IPv6. Uważaj więc, który pakiet pobierasz.

TOOGAM
źródło