Wie kann ich Curl mit :: 1 für ipv6-basiertes Loopback verwenden?

29

Ich habe ein paar Möglichkeiten ausprobiert, aber sie scheinen die Locke zu verwirren.

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
quelle
1
Ich weiß, dass Sie eine Antwort ausgewählt haben, aber da es hier Ähnlichkeiten zwischen den beiden Antworten gibt, können Sie bitte klären, welcher spezifische Befehl für Sie funktioniert hat?
JakeGould
1
Danke, dass du die Antworten früher gegeben hast! Es war wirklich schwer für mich zu akzeptieren, da beide so kurz und prägnant waren, obwohl ich mich für den anderen entschieden habe, da dieser Benutzer im Vergleich zu Ihnen gerade erst anfängt und zuerst geantwortet hat. Unabhängig davon war es ausreichend, nur die Option - g zu verwenden.
Hak8or

Antworten:

45

Wenn Sie sich die Vorschläge - und die Aufschlüsselung der häufigsten Fehler - in diesem Blog-Beitrag ansehen , sollten Sie dies vielleicht versuchen.

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

Das -gscheint der magische Schlüssel zu sein, um dies zum Laufen zu bringen. Wie auf der curlManpage erklärt:

Diese Option schaltet den "URL Globbing Parser" aus. Wenn Sie diese Option aktivieren, können Sie URLs angeben, die die Buchstaben {} [] enthalten, ohne dass sie von curl selbst interpretiert werden. Beachten Sie, dass diese Buchstaben keine legalen URL-Inhalte sind, sondern gemäß dem URI-Standard codiert werden sollten.

Und die -6Mittel, um nur IPv6 zu verwenden:

Wenn libcurl eine Adresse in mehrere IP-Versionen auflösen kann (wenn es IPv6-fähig ist), weist diese Option libcurl an, Namen nur in IPv6-Adressen aufzulösen.

Aber wenn man diese Funktionsbeschreibung liest, scheint es, als ob -6sie für eine reine IPv6-Adresse nicht wirklich benötigt wird. Nur wenn einer curleinen Hostnamen verwendet, mit dem eine IPv4- und IPv6-Adresse verbunden ist, wird IPv6 bevorzugt. Nur etwas zu beachten.

JakeGould
quelle
OSX 10.13.3: Dies funktioniert: $ curl "http://localhost:50710/file1.txt"und es $ curl -g -6 "http://[::1]:50710/file1.txt" kräuselt sich nicht : (7) Verbindung zu :: 1-Port 50710 fehlgeschlagen: Verbindung abgelehnt . Und $ curl -Vwird IPv6als Feature angezeigt (Curl 7.58.0). Meine /etc/hostsDateilisten:::1 localhost
7stud
Hey, danke für den Tipp zu meinem Server! Nun, da ich meinen Server an die IPv6-Adresse gebunden habe 0.0.0.0.0.0.0.1, kann ich das einfach tun curl "http://[::1]:50710/file1.txt". Wenn ich eine -vOption für die ausführliche Ausgabe hinzufüge , wird in der Ausgabe Folgendes angezeigt : Trying :: 1 ... * TCP_NODELAY set * Connected to :: 1 (:: 1) port 52489 (# 0) - Aus irgendeinem Grund habe ich dies nicht getan brauche die -gOption nicht.
7stud
Weitere Informationen: Wenn mein Server an einen IPv6-Host gebunden ist, kann ich trotzdem eine IPv4-Abrufanforderung mit curl: stellen curl -v "http://localhost:52489/file1.txt". In der Ausgabe sehe ich: Trying :: 1 ... * TCP_NODELAY set * Connected to localhost (:: 1) port 52489 (# 0) - Ah, ich denke, das liegt daran, dass meine /etc/hostsDatei den Namen "localhost" in einen auflöst IPv4- und IPv6-Adresse. Und wenn ich es versuche: curl -v "http://127.0.0.1:52489/file1.txt"dann bekomme ich einen Verbindungsfehler verweigert.
7stud
1
@ 7stud "Nun, da ich meinen Server an die IPv6-Adresse gebunden habe: 0.0.0.0.0.0.0.1" Sie haben ernsthaft keine Ahnung, wovon Sie sprechen. Ich schlage vor, eine neue Frage zu schreiben, die alles erklärt, was Sie in diesen Kommentaren erklären, und zu prüfen, ob jemand Ihnen helfen kann. Beziehen Sie sich auf diese Antwort, wenn Sie möchten. Wenn Sie jedoch glauben, dass 0.0.0.0.0.0.0.1es sich um eine gültige IPv6-Adresse handelt, sind Sie bereits in einer schlechten Verfassung.
JakeGould
8

Aus "curl --manual" fand ich Folgendes:

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

oder

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

Also, für die Adresse, nach der Sie fragen, versuchen Sie:

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

Möglicherweise möchten Sie jedoch Folgendes ausführen:

curl -V

und prüfen Sie, ob IPv6 in der Zeile mit der Aufschrift "Features" angezeigt wird (die dritte Zeile ohne zusätzliche Zeilen aus dem Zeilenumbruch). Ich fand meine Version nicht. Die cURL-Downloadseite enthält verschiedene Links für Betriebssysteme, einschließlich der Curl 7.41.0-Downloadseite (derzeit die neueste Version) für Microsoft Windows. Diese Seite enthält mehrere ausführbare Dateien (verfügbar für Microsoft Windows). Das erste, das ich fand, unterstützte IPv6 nicht. Aber die beiden als "ipv6-sspi-spnego-winssl" beschriebenen (eine für x86 und eine für x64) haben dies getan: curl -V hat IPv6 gezeigt. Achten Sie also darauf, welches Paket Sie herunterladen.

TOOGAM
quelle