Como posso usar o curl com :: 1 para loopback baseado em ipv6?

23

Eu tentei algumas maneiras, mas elas parecem ser confusas.

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
fonte
1
Eu sei que você selecionou uma resposta, mas desde que há semelhanças entre as duas respostas aqui, você pode por favor esclarecer qual comando específico funcionou para você?
JakeGould
1
Obrigado por dar as respostas mais cedo! Eu estava genuinamente pressionado para aceitar, já que ambos eram tão concisos e tudo o mais, embora eu tenha escolhido o outro, já que o usuário está apenas começando em relação a você e respondeu primeiro. Independentemente disso, apenas usando a opção - g foi suficiente.
hak8or

Respostas:

39

Olhando para as sugestões - e quebra de erros comuns - neste post de blog talvez você deva tentar isso.

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

o -g parece ser a chave mágica para que isso funcione. Como explicado no curl página man:

Esta opção desativa o "analisador de globbing de URL". Quando você definir isso   opção, você pode especificar URLs que contenham as letras {} [] sem   tê-los sendo interpretados pela própria onda. Note que estas letras   não são conteúdos normais de URL legal, mas devem ser codificados de acordo   ao padrão URI.

E a -6 significa usar apenas IPv6:

Se libcurl é capaz de resolver um endereço para várias versões IP   (que é se for compatível com IPv6), esta opção diz ao libcurl para   Resolva nomes apenas para endereços IPv6.

Mas lendo essa descrição de funcionalidade, parece que -6 não é realmente necessário para um endereço IPv6 puro; somente se alguém estiver usando curl em um nome de host que tenha um endereço IPv4 e IPv6 conectado a ele, então prefere o IPv6. Apenas algo para anotar.

JakeGould
fonte
OSX 10.13.3: Isso funciona: $ curl "http://localhost:50710/file1.txt" e isso não $ curl -g -6 "http://[::1]:50710/file1.txt" curl: (7) Falha ao conectar-se a :: 1 porta 50710: Conexão recusada . E $ curl -V mostra IPv6 como um recurso (curl 7.58.0). Minhas /etc/hosts listas de arquivos: ::1 localhost
7stud
Ei, obrigado pela dica sobre o meu servidor! Agora, tenho o meu servidor ligado ao endereço ipv6: 0.0.0.0.0.0.0.1Posso simplesmente fazer curl "http://[::1]:50710/file1.txt". Se eu adicionar um -v opção para saída detalhada, vejo na saída: Tentando :: 1 ... * TCP_NODELAY set * Conectado a :: 1 (:: 1) porta 52489 (# 0) - Por alguma razão, não precisei do -g opção.
7stud
Mais informações: Com o meu servidor ligado a um host ipv6, ainda posso fazer um pedido de obter ipv4 com curl: curl -v "http://localhost:52489/file1.txt". Na saída, vejo: Tentando :: 1 ... * TCP_NODELAY set * Conectado à porta localhost (:: 1) 52489 (# 0) - Ah, eu acho que é porque meu /etc/hosts arquivo resolve o nome "localhost" para um endereço ipv4 e ipv6. E se eu tentar curl -v "http://127.0.0.1:52489/file1.txt" então eu recebo um erro de conexão recusada.
7stud
@ 7stud “Agora, tenho o meu servidor ligado ao endereço ipv6: 0.0.0.0.0.0.0.1Você não tem a menor ideia do que está falando. Eu sugiro escrever uma nova pergunta explicando tudo o que você explica nesses comentários e ver se alguém pode ajudá-lo. Consulte esta resposta se desejar. Mas se você pensa 0.0.0.0.0.0.0.1 é um endereço IPv6 válido que você já está em péssimo estado.
JakeGould
8

De "curl --manual", encontrei isto:

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

ou

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

Então, para o endereço que você está perguntando, tente:

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

No entanto, você pode querer executar:

curl -V

e veja se o IPv6 aparece na linha que diz "Recursos" (a terceira linha, sem contar as linhas extras da quebra de linha). Eu encontrei a minha versão não. Página de download do cURL possui vários links para sistemas operacionais, incluindo curl 7.41.0 site de download (que é atualmente a versão mais recente) para o Microsoft Windows. Essa página tem vários executáveis ​​(disponíveis para o Microsoft Windows); o primeiro que encontrei não suportou o IPv6. Mas os dois descritos como "ipv6-sspi-spnego-winssl" (um para x86 e um para x64) fizeram: curl -V mostrou IPv6. Portanto, tenha cuidado com o pacote que você baixou.

TOOGAM
fonte