¿Cómo puedo usar curl con :: 1 para loopback basado en ipv6?

29

Lo intenté de varias maneras, pero parecen ser confusos.

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
fuente
1
Sé que ha seleccionado una respuesta, pero dado que hay similitudes entre las dos respuestas aquí, ¿puede aclarar qué comando específico funcionó para usted?
JakeGould
1
¡Gracias por dar las respuestas antes! Fui realmente difícil de aceptar ya que ambos eran muy concisos y demás, aunque elegí al otro ya que ese usuario apenas está comenzando en comparación con usted y respondió primero. De todos modos, solo usar la opción - g fue suficiente.
hak8or

Respuestas:

45

Mirando las sugerencias, y el desglose de los errores comunes, en esta publicación de blog , tal vez debería intentarlo.

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

El -gparece ser la clave mágica para conseguir este trabajo. Como se explica en la curlpágina del manual:

Esta opción desactiva el "analizador global de URL". Cuando configura esta opción, puede especificar URL que contengan las letras {} [] sin que sean interpretadas por curl. Tenga en cuenta que estas letras no son contenidos normales de URL legales, pero deben codificarse de acuerdo con el estándar URI.

Y los -6medios para usar solo IPv6:

Si libcurl es capaz de resolver una dirección para múltiples versiones de IP (que es si es compatible con IPv6), esta opción le dice a libcurl que resuelva nombres solo para direcciones IPv6.

Pero al leer esa descripción de funcionalidad, parece que -6realmente no es necesaria para una dirección IPv6 pura; solo si se usa curlun nombre de host que tiene una dirección IPv4 e IPv6 conectada, por lo que preferiría el IPv6. Solo algo a tener en cuenta.

JakeGould
fuente
OSX 10.13.3: Esto funciona: $ curl "http://localhost:50710/file1.txt"y esto no se $ curl -g -6 "http://[::1]:50710/file1.txt" curva: (7) Error al conectarse a :: 1 puerto 50710: Conexión rechazada . Y se $ curl -Vmuestra IPv6como una característica (curl 7.58.0). Mis /etc/hostslistas de archivos:::1 localhost
7stud
¡Hola, gracias por el consejo sobre mi servidor! Ahora, que tengo mi servidor vinculado a la dirección ipv6: 0.0.0.0.0.0.0.1simplemente puedo hacerlo curl "http://[::1]:50710/file1.txt". Si agrego una -vopción para salida detallada, veo en la salida: Intentando :: 1 ... * TCP_NODELAY set * Conectado a :: 1 (:: 1) puerto 52489 (# 0) - Por alguna razón, no lo hice No necesito la -gopción.
7stud
Más información: Con mi servidor unido a un host IPv6, todavía puedo hacer una petición GET IPv4 con curl: curl -v "http://localhost:52489/file1.txt". En el resultado que veo: Intentando :: 1 ... * TCP_NODELAY set * Connected to localhost (:: 1) port 52489 (# 0) - Ah, creo que es porque mi /etc/hostsarchivo resuelve el nombre "localhost" a ambos Dirección ipv4 e ipv6. Y si lo intento: curl -v "http://127.0.0.1:52489/file1.txt"me sale un error de conexión rechazada.
7stud
1
@ 7stud "Ahora, que tengo mi servidor vinculado a la dirección ipv6: 0.0.0.0.0.0.0.1". En serio, no tienes idea de lo que estás hablando. Sugiero escribir una nueva pregunta explicando todo lo que explica en estos comentarios y ver si alguien puede ayudarlo. Consulte esta respuesta si lo desea. Pero si crees que 0.0.0.0.0.0.0.1es una dirección IPv6 válida, ya estás en mal estado.
JakeGould
8

De "curl --manual", encontré esto:

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

o

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

Entonces, para la dirección que está preguntando, intente:

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

Sin embargo, es posible que desee ejecutar:

curl -V

y vea si IPv6 aparece en la línea que dice "Características" (la tercera línea, sin contar las líneas adicionales del ajuste de palabras). Encontré que mi versión no. La página de descarga de cURL tiene varios enlaces para sistemas operativos, incluido el sitio de descarga curl 7.41.0 (que actualmente es la última versión) para Microsoft Windows. Esa página tiene múltiples ejecutables (disponibles para Microsoft Windows); El primero que encontré no era compatible con IPv6. Pero los dos descritos como "ipv6-sspi-spnego-winssl" (uno para x86 y otro para x64) sí: curl -V mostró IPv6. Así que tenga cuidado con el paquete que descarga.

TOOGAM
fuente