Come posso usare curl con :: 1 per loopback basato su ipv6?


29

Ho provato alcuni modi, ma sembrano arricciare confusione.

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
So che hai selezionato una risposta, ma poiché ci sono somiglianze tra le due risposte qui, puoi chiarire quale comando specifico ha funzionato per te?
Jake Gould

1
Grazie per aver dato le risposte prima! Sono stato sinceramente difficile da accettare dal momento che erano entrambi così concisi e quant'altro, anche se ho scelto l'altro poiché quell'utente ha appena iniziato rispetto a te e ha risposto per primo. Indipendentemente da ciò, basta usare l'opzione - g era sufficiente.
Hak8 o

Risposte:


45

Osservando i suggerimenti e la suddivisione degli errori comuni in questo post del blog , forse dovresti provare questo.

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

L' -gsembra essere la chiave magica per ottenere questo lavoro. Come spiegato nella curlpagina man:

Questa opzione disattiva il "parser globbing URL". Quando si imposta questa opzione, è possibile specificare gli URL che contengono le lettere {} [] senza che vengano interpretati dal ricciolo stesso. Nota che queste lettere non sono normali contenuti URL legali ma devono essere codificate secondo lo standard URI.

E i -6mezzi per usare solo IPv6:

Se libcurl è in grado di risolvere un indirizzo su più versioni IP (che è se è compatibile con IPv6), questa opzione dice a libcurl di risolvere i nomi solo su indirizzi IPv6.

Ma leggendo quella descrizione della funzionalità, sembra che -6non sia realmente necessario per un indirizzo IPv6 puro; solo se si sta utilizzando curlun nome host a cui sono collegati un indirizzo IPv4 e IPv6 in modo da preferire IPv6. Solo qualcosa da notare.


OSX 10.13.3: Funziona: $ curl "http://localhost:50710/file1.txt"e questo non si $ curl -g -6 "http://[::1]:50710/file1.txt" arriccia: (7) Impossibile connettersi a :: 1 porta 50710: connessione rifiutata . E $ curl -Vmostra IPv6come una caratteristica (arricciatura 7.58.0). I miei /etc/hostselenchi di file:::1 localhost
7

Ehi, grazie per il suggerimento sul mio server! Ora, che ho il mio server associato all'indirizzo ipv6:, 0.0.0.0.0.0.0.1posso semplicemente farlo curl "http://[::1]:50710/file1.txt". Se aggiungo -vun'opzione per output dettagliato, vedo nell'output: Trying :: 1 ... * TCP_NODELAY set * Connected to :: 1 (:: 1) port 52489 (# 0) - Per qualche motivo, non l'ho fatto non serve l' -gopzione.
7

Per saperne di più: con il mio server legato a un host IPv6, posso ancora fare una richiesta GET ipv4 con curl: curl -v "http://localhost:52489/file1.txt". Nell'output vedo: Prova :: 1 ... * TCP_NODELAY impostato * Connesso alla porta localhost (:: 1) 52489 (# 0) - Ah, penso sia perché il mio /etc/hostsfile risolve il nome "localhost" in entrambi un indirizzo ipv4 e ipv6. E se provo: curl -v "http://127.0.0.1:52489/file1.txt"allora ricevo un errore di connessione rifiutata.
7

1
@ 7stud “Ora, ho il mio server associato all'indirizzo ipv6:.” Davvero 0.0.0.0.0.0.0.1non hai idea di cosa stai parlando. Suggerisco di scrivere una nuova domanda che spieghi tutto ciò che spieghi in questi commenti e vedi se qualcuno può aiutarti. Fare riferimento a questa risposta se lo si desidera. Ma se pensi che 0.0.0.0.0.0.0.1sia un indirizzo IPv6 valido, sei già su una base sbagliata.
Jake, il

8

Da "curl --manual", ho trovato questo:

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

o

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

Quindi, per l'indirizzo che stai chiedendo, prova:

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

Tuttavia, potresti voler eseguire:

curl -V

e vedi se IPv6 appare sulla riga che dice "Funzionalità" (la terza riga, senza contare le righe extra dal ritorno a capo). Ho trovato la mia versione no. La pagina di download di cURL contiene vari collegamenti per i sistemi operativi, incluso il sito di download curl 7.41.0 (che è attualmente l'ultima versione) per Microsoft Windows. Quella pagina ha più eseguibili (disponibili per Microsoft Windows); il primo che ho trovato non supportava IPv6. Ma i due descritti come "ipv6-sspi-spnego-winssl" (uno per x86 e uno per x64) hanno fatto: curl -V ha mostrato IPv6. Quindi fai attenzione a quale pacchetto scarichi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.