Comment puis-je utiliser curl avec :: 1 pour le bouclage basé sur ipv6?

29

J'ai essayé plusieurs façons, mais elles semblent dérouter.

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
la source
1
Je sais que vous avez sélectionné une réponse, mais comme il existe des similitudes entre les deux réponses ici, pouvez-vous préciser quelle commande spécifique a fonctionné pour vous?
JakeGould
1
Merci d'avoir donné les réponses plus tôt! J'avais vraiment du mal à accepter car ils étaient tous deux si concis et ainsi de suite, bien que j'aie choisi l'autre puisque cet utilisateur ne fait que commencer par rapport à vous et a répondu en premier. Quoi qu'il en soit, l'utilisation de l'option -g était suffisante.
hak8 ou

Réponses:

45

En regardant les suggestions et la répartition des erreurs courantes sur ce blog , vous devriez peut-être essayer ceci.

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

Le -gsemble être la clé magique pour obtenir ce travail. Comme expliqué sur la curlpage de manuel:

Cette option désactive "l'analyseur de globalisation d'URL". Lorsque vous définissez cette option, vous pouvez spécifier des URL contenant les lettres {} [] sans les faire interpréter par curl lui-même. Notez que ces lettres ne sont pas des contenus d'URL légaux normaux mais qu'elles doivent être encodées conformément à la norme URI.

Et les -6moyens d'utiliser uniquement IPv6:

Si libcurl est capable de résoudre une adresse en plusieurs versions IP (ce qui est le cas si elle est compatible IPv6), cette option indique à libcurl de résoudre les noms en adresses IPv6 uniquement.

Mais en lisant cette description de fonctionnalité, il semble que ce -6ne soit pas vraiment nécessaire pour une adresse IPv6 pure; uniquement si l'on utilise curlun nom d'hôte auquel une adresse IPv4 et IPv6 est connectée, il préférerait l'IPv6. Juste quelque chose à noter.

JakeGould
la source
OSX 10.13.3: Cela fonctionne: $ curl "http://localhost:50710/file1.txt"et cela ne se $ curl -g -6 "http://[::1]:50710/file1.txt" courbe pas : (7) Impossible de se connecter au port :: 1 50710: connexion refusée . Et $ curl -Vapparaît IPv6comme une fonctionnalité (curl 7.58.0). Mes /etc/hostslistes de fichiers:::1 localhost
7stud
Hé, merci pour le conseil sur mon serveur! Maintenant que mon serveur est lié à l'adresse ipv6 0.0.0.0.0.0.0.1, je peux simplement le faire curl "http://[::1]:50710/file1.txt". Si j'ajoute une -voption pour une sortie détaillée, je vois dans la sortie: Trying :: 1 ... * TCP_NODELAY set * Connecté au :: 1 (:: 1) port 52489 (# 0) - Pour une raison quelconque, je n'ai pas pas besoin de l' -goption.
7stud
Plus d' infos: Avec mon serveur lié à un hôte ipv6, je peux encore faire une demande ipv4 get avec boucle: curl -v "http://localhost:52489/file1.txt". Dans la sortie, je vois: Trying :: 1 ... * TCP_NODELAY set * Connecté au port localhost (:: 1) 52489 (# 0) - Ah, je pense que c'est parce que mon /etc/hostsfichier résout le nom "localhost" à la fois un adresse ipv4 et ipv6. Et si j'essaye: curl -v "http://127.0.0.1:52489/file1.txt"alors j'obtiens une erreur de connexion refusée.
7stud
1
@ 7stud «Maintenant que mon serveur est lié à l'adresse ipv6: 0.0.0.0.0.0.0.1». Vous n'avez vraiment aucune idée de quoi vous parlez. Je suggère d'écrire une nouvelle question expliquant tout ce que vous expliquez dans ces commentaires et de voir si quelqu'un peut vous aider. Référez-vous à cette réponse si vous le souhaitez. Mais si vous pensez que 0.0.0.0.0.0.0.1c'est une adresse IPv6 valide, vous êtes déjà sur une mauvaise base.
JakeGould
8

De "curl --manual", j'ai trouvé ceci:

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

ou

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

Donc, pour l'adresse que vous demandez, essayez:

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

Cependant, vous souhaiterez peut-être exécuter:

curl -V

et voyez si IPv6 apparaît sur la ligne qui dit "Fonctionnalités" (la troisième ligne, sans compter les lignes supplémentaires de l'habillage de mots). J'ai trouvé que ma version n'était pas. La page de téléchargement de cURL contient divers liens pour les systèmes d'exploitation, y compris le site de téléchargement curl 7.41.0 (qui est actuellement la dernière version) pour Microsoft Windows. Cette page a plusieurs exécutables (disponibles pour Microsoft Windows); le premier que j'ai trouvé ne prend pas en charge IPv6. Mais les deux décrits comme "ipv6-sspi-spnego-winssl" (un pour x86 et un pour x64) l'ont fait: curl -V a montré IPv6. Faites donc attention au paquet que vous téléchargez.

TOOGAM
la source