Bagaimana saya bisa menggunakan curl dengan :: 1 untuk loopback berbasis ipv6?

29

Saya mencoba beberapa cara tetapi kelihatannya membingungkan.

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
sumber
1
Saya tahu Anda telah memilih jawaban, tetapi karena ada kesamaan antara dua jawaban di sini, dapatkah Anda menjelaskan perintah spesifik mana yang bekerja untuk Anda?
JakeGould
1
Terima kasih telah memberikan jawaban sebelumnya! Saya benar-benar sulit ditekan untuk menerima karena mereka berdua sangat ringkas dan yang lainnya, meskipun saya memilih yang lain karena pengguna itu baru memulai dibandingkan dengan Anda dan menjawab lebih dulu. Apapun, hanya menggunakan opsi-g sudah cukup.
hak8 atau

Jawaban:

45

Melihat saran — dan uraian kesalahan umum — pada posting blog ini , mungkin Anda harus mencoba ini.

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

The -gtampaknya menjadi kunci ajaib untuk mendapatkan kerja ini. Seperti yang dijelaskan di curlhalaman manual:

Opsi ini mematikan "parser URL globbing". Saat Anda mengatur opsi ini, Anda dapat menentukan URL yang berisi huruf-huruf {} [] tanpa membuatnya ditafsirkan oleh curl itu sendiri. Perhatikan bahwa surat-surat ini bukan isi URL legal yang normal tetapi harus dikodekan sesuai dengan standar URI.

Dan -6sarana untuk menggunakan IPv6 saja:

Jika libcurl mampu menyelesaikan alamat ke beberapa versi IP (yang jika itu mampu IPv6), opsi ini memberitahu libcurl untuk menyelesaikan nama hanya ke alamat IPv6.

Tetapi membaca deskripsi fungsionalitas itu, sepertinya -6tidak benar-benar diperlukan untuk alamat IPv6 murni; hanya jika seseorang menggunakan curlnama host yang memiliki alamat IPv4 dan IPv6 yang terhubung sehingga ia akan memilih IPv6. Hanya sesuatu yang perlu diperhatikan.

JakeGould
sumber
OSX 10.13.3: Ini berfungsi: $ curl "http://localhost:50710/file1.txt"dan ini tidak $ curl -g -6 "http://[::1]:50710/file1.txt" menggulung: (7) Gagal terhubung ke :: 1 port 50710: Sambungan ditolak . Dan $ curl -Vmemang tampil IPv6sebagai fitur (curl 7.58.0). /etc/hostsDaftar file saya :::1 localhost
7
Hei, terima kasih atas tip tentang server saya! Sekarang, saya sudah punya server saya terikat ke alamat ipv6:, 0.0.0.0.0.0.0.1saya bisa melakukannya curl "http://[::1]:50710/file1.txt". Jika saya menambahkan -vopsi untuk keluaran verbose, saya melihat di keluaran: Mencoba :: 1 ... * Set TCP_NODELAY * Terhubung ke :: 1 (:: 1) port 52489 (# 0) - Untuk beberapa alasan, saya tidak membutuhkan -gopsi.
7stud
Info lebih lanjut: Dengan server saya terikat ke host ipv6, saya masih bisa membuat permintaan get ipv4 dengan ikal: curl -v "http://localhost:52489/file1.txt". Dalam output saya melihat: Mencoba :: 1 ... * Set TCP_NODELAY * Terhubung ke localhost (:: 1) port 52489 (# 0) - Ah, saya pikir itu karena /etc/hostsfile saya menyelesaikan nama "localhost" untuk kedua alamat ipv4 dan ipv6. Dan jika saya mencoba: curl -v "http://127.0.0.1:52489/file1.txt"maka saya mendapatkan koneksi menolak kesalahan.
7stud
1
@ 7stud "Sekarang, server saya terikat ke alamat ipv6:. 0.0.0.0.0.0.0.1" Anda benar-benar tidak tahu apa yang Anda bicarakan. Saya sarankan menulis pertanyaan baru yang menjelaskan semua yang Anda jelaskan di komentar ini dan lihat apakah seseorang dapat membantu Anda. Lihat jawaban ini jika Anda mau. Tetapi jika Anda menganggap 0.0.0.0.0.0.0.1alamat IPv6 yang valid, Anda sudah berada pada posisi yang buruk.
JakeGould
8

Dari "curl --manual", saya menemukan ini:

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

atau

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

Jadi, untuk alamat yang Anda tanyakan, cobalah:

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

Namun, Anda mungkin ingin menjalankan:

curl -V

dan lihat apakah IPv6 muncul di baris yang bertuliskan "Fitur" (baris ketiga, tidak termasuk baris tambahan dari pembungkus kata). Saya menemukan versi saya tidak. Halaman unduhan cURL memiliki berbagai tautan untuk sistem operasi, termasuk situs unduhan curl 7.41.0 (yang saat ini merupakan versi terbaru) untuk Microsoft Windows. Halaman itu memiliki beberapa file yang dapat dieksekusi (tersedia untuk Microsoft Windows); yang pertama saya temukan tidak mendukung IPv6. Tetapi keduanya digambarkan sebagai "ipv6-sspi-spnego-winssl" (satu untuk x86 dan satu untuk x64) tidak: ikal -V memang menunjukkan IPv6. Jadi berhati-hatilah dengan paket yang Anda unduh.

TOOGAM
sumber