Làm cách nào tôi có thể sử dụng curl với :: 1 cho loopback dựa trên ipv6?


29

Tôi đã thử một vài cách nhưng chúng có vẻ khó hiểu.

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
Tôi biết bạn đã chọn một câu trả lời, nhưng vì có hai điểm tương đồng giữa hai câu trả lời ở đây, bạn có thể vui lòng làm rõ lệnh cụ thể nào phù hợp với bạn không?
JakeGould

1
Cảm ơn đã đưa ra câu trả lời sớm hơn! Tôi thực sự khó khăn để chấp nhận vì cả hai đều rất súc tích và không có gì, mặc dù tôi đã chọn người khác vì người dùng đó mới bắt đầu so với bạn và trả lời trước. Bất kể, chỉ cần sử dụng tùy chọn - g là đủ.
hak8or

Câu trả lời:


45

Nhìn vào những gợi ý của người hâm mộ và phân tích các lỗi phổ biến trên bài đăng trên blog này , có lẽ bạn nên thử điều này.

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

Các -gdường như là chìa khóa kỳ diệu để làm việc này. Như đã giải thích trên curltrang người đàn ông:

Tùy chọn này tắt "trình phân tích cú pháp toàn cầu URL". Khi bạn đặt tùy chọn này, bạn có thể chỉ định các URL có chứa các chữ cái {} [] mà không khiến chúng bị hiểu bởi chính curl. Lưu ý rằng các chữ cái này không phải là nội dung URL hợp pháp thông thường nhưng chúng phải được mã hóa theo tiêu chuẩn URI.

-6phương tiện chỉ sử dụng IPv6:

Nếu libcurl có khả năng phân giải địa chỉ thành nhiều phiên bản IP (đó là nếu nó có khả năng IPv6), tùy chọn này sẽ cho libcurl chỉ phân giải tên thành địa chỉ IPv6.

Nhưng đọc mô tả chức năng đó, có vẻ như -6không thực sự cần thiết cho một địa chỉ IPv6 thuần túy; chỉ khi một người đang sử dụng curltên máy chủ có địa chỉ IPv4 và IPv6 được kết nối với nó thì nó sẽ thích IPv6 hơn. Chỉ cần một cái gì đó để lưu ý.


OSX 10.13.3: Điều này hoạt động: $ curl "http://localhost:50710/file1.txt"và điều này không làm $ curl -g -6 "http://[::1]:50710/file1.txt" cong: (7) Không thể kết nối với :: 1 cổng 50710: Kết nối bị từ chối . Và $ curl -Vkhông hiển thị IPv6như là một tính năng (curl 7.58.0). /etc/hostsDanh sách tập tin của tôi :::1 localhost
7stud

Hey, cảm ơn vì lời khuyên về máy chủ của tôi! Bây giờ, tôi đã có máy chủ của mình bị ràng buộc với địa chỉ ipv6 : 0.0.0.0.0.0.0.1, tôi chỉ có thể làm curl "http://[::1]:50710/file1.txt". Nếu tôi thêm một -vtùy chọn cho đầu ra dài dòng, tôi sẽ thấy trong đầu ra: Đang thử :: 1 ... * TCP_NODELAY được đặt * Đã kết nối với :: 1 (:: 1) cổng 52361 (# 0) - Vì một số lý do, tôi đã không Không cần -gtùy chọn.
7st

Thông tin thêm: Với máy chủ của tôi bị ràng buộc với máy chủ ipv6, tôi vẫn có thể thực hiện yêu cầu nhận ipv4 với curl : curl -v "http://localhost:52489/file1.txt". Trong đầu ra tôi thấy: Đang thử :: 1 ... * TCP_NODELAY được đặt * Đã kết nối với localhost (:: 1) cổng 52361 (# 0) - Ah, tôi nghĩ đó là vì /etc/hoststệp của tôi giải quyết tên "localhost" cho cả một địa chỉ ipv4 và ipv6. Và nếu tôi thử: curl -v "http://127.0.0.1:52489/file1.txt"thì tôi nhận được lỗi từ chối kết nối.
7stud

1
@ 7stud Hiện tại, tôi đã có máy chủ của mình bị ràng buộc với địa chỉ ipv6 : 0.0.0.0.0.0.0.1. Bạn thực sự không biết bạn đang nói về cái gì. Tôi đề nghị viết một câu hỏi mới giải thích tất cả những gì bạn giải thích trong những bình luận này và xem liệu ai đó có thể giúp bạn. Tham khảo câu trả lời này nếu bạn muốn. Nhưng nếu bạn nghĩ rằng đó 0.0.0.0.0.0.0.1là một địa chỉ IPv6 hợp lệ thì bạn đã có một bước đi tồi tệ.
JakeGould

8

Từ "curl --manual", tôi tìm thấy điều này:

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

hoặc là

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

Vì vậy, đối với địa chỉ bạn đang hỏi, hãy thử:

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

Tuy nhiên, bạn có thể muốn chạy:

curl -V

và xem nếu IPv6 hiển thị trên dòng có "Tính năng" (dòng thứ ba, không tính các dòng bổ sung từ gói từ). Tôi tìm thấy phiên bản của tôi không. Trang tải xuống cURL có nhiều liên kết khác nhau cho các hệ điều hành, bao gồm trang tải xuống curl 7.41.0 (hiện là phiên bản mới nhất) cho Microsoft Windows. Trang đó có nhiều tệp thực thi (có sẵn cho Microsoft Windows); cái đầu tiên tôi thấy không hỗ trợ IPv6. Nhưng hai cái được mô tả là "ipv6-sspi-spnego-wonsl" (một cho x86 và một cho x64) đã làm: curl -V đã hiển thị IPv6. Vì vậy, hãy cẩn thận về gói bạn tải về.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.