ฉันจะใช้ curl กับ :: 1 สำหรับการวนกลับที่อิงกับ ipv6 ได้อย่างไร


29

ฉันลองสองสามวิธี แต่พวกเขาดูเหมือนจะสับสนงอ

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
ฉันรู้ว่าคุณได้เลือกคำตอบแล้ว แต่เนื่องจากมีความคล้ายคลึงกันระหว่างสองคำตอบที่นี่คุณช่วยอธิบายคำสั่งเฉพาะที่เหมาะกับคุณได้ไหม
JakeGould

1
ขอบคุณที่ให้คำตอบก่อนหน้านี้! ฉันถูกกดอย่างหนักเพื่อที่จะยอมรับเพราะพวกเขาทั้งกระชับและไม่รู้อะไรเลยแม้ว่าฉันจะเลือกคนอื่นเนื่องจากผู้ใช้รายนั้นเพิ่งเริ่มเปรียบเทียบกับคุณและตอบก่อน เพียงแค่ใช้ตัวเลือก - g ก็เพียงพอแล้ว
hak8or

คำตอบ:


45

ดูคำแนะนำและรายละเอียดข้อผิดพลาดทั่วไปที่โพสต์บล็อกนี้คุณอาจลองทำดู

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

-gน่าจะเป็นกุญแจสำคัญที่มีมนต์ขลังที่จะได้รับการทำงานนี้ ตามที่อธิบายไว้ในcurl man page:

ตัวเลือกนี้จะปิด "parser URL globbing" เมื่อคุณตั้งค่าตัวเลือกนี้คุณสามารถระบุ URL ที่มีตัวอักษร {} [] โดยไม่ต้องแปลความหมายโดยม้วนตัวเอง โปรดทราบว่าตัวอักษรเหล่านี้ไม่ใช่เนื้อหา URL ทางกฎหมายปกติ แต่ควรเข้ารหัสตามมาตรฐาน URI

และ-6วิธีการใช้ IPv6 เท่านั้น:

หาก libcurl สามารถแก้ไขที่อยู่เป็น IP หลาย ๆ เวอร์ชันได้ (ซึ่งเป็นถ้าใช้กับ IPv6 ได้) ตัวเลือกนี้จะบอก libcurl เพื่อแก้ไขชื่อให้เป็นที่อยู่ IPv6 เท่านั้น

แต่การอ่านคำอธิบายฟังก์ชั่นนั้นดูเหมือนว่า-6ไม่จำเป็นสำหรับที่อยู่ IPv6 แท้ๆ เฉพาะในกรณีที่มีการใช้curlชื่อโฮสต์ที่มีที่อยู่ IPv4 และ IPv6 เชื่อมต่ออยู่ดังนั้นจึงต้องการใช้ IPv6 สิ่งที่ควรทราบ


OSX 10.13.3: งานนี้: $ curl "http://localhost:50710/file1.txt"และนี้ไม่ได้$ curl -g -6 "http://[::1]:50710/file1.txt" ขด: (7) ไม่สามารถเชื่อมต่อ :: 1 พอร์ต 50710: เชื่อมต่อถูกปฏิเสธ และ$ curl -VจะแสดงIPv6เป็นฟีเจอร์ (curl 7.58.0) /etc/hostsรายการไฟล์ของฉัน:::1 localhost
7stud

เฮ้ขอบคุณสำหรับคำแนะนำเกี่ยวกับเซิร์ฟเวอร์ของฉัน! ตอนนี้ที่ฉันมีเซิร์ฟเวอร์ของฉันถูกผูกไว้กับที่อยู่ IPv6: ผมก็สามารถทำ0.0.0.0.0.0.0.1 curl "http://[::1]:50710/file1.txt"ถ้าฉันเพิ่ม-vตัวเลือกสำหรับผลลัพธ์ verbose ฉันเห็นในผลลัพธ์: กำลังลอง :: 1 ... * ชุด TCP_NODELAY * เชื่อมต่อกับ :: 1 (:: 1) พอร์ต 52489 (# 0) - ด้วยเหตุผลบางอย่างฉันไม่ได้ทำ ไม่ต้องการ-gตัวเลือก
7stud

ข้อมูลเพิ่มเติม: กับเซิร์ฟเวอร์ของฉันผูกพันไปยังโฮสต์ IPv6 ฉันจะยังสามารถทำการร้องขอรับ IPv4 curl -v "http://localhost:52489/file1.txt"กับขด: ในผลลัพธ์ฉันเห็น: กำลังลอง :: 1 ... * ตั้งค่า TCP_NODELAY * เชื่อมต่อกับ localhost (:: 1) พอร์ต 52489 (# 0) - อ่าฉันคิดว่านั่นเป็นเพราะ/etc/hostsไฟล์ของฉันแก้ไขชื่อ "localhost" ให้ทั้งคู่ ที่อยู่ ipv4 และ ipv6 และถ้าฉันลอง: curl -v "http://127.0.0.1:52489/file1.txt"แล้วฉันได้รับการเชื่อมต่อปฏิเสธข้อผิดพลาด
7stud

1
@ 7stud“ ตอนนี้ฉันได้เซิร์ฟเวอร์ของฉันไปยังที่อยู่ ipv6:. 0.0.0.0.0.0.0.1” คุณไม่รู้จริง ๆ ว่าคุณกำลังพูดถึงอะไรอยู่ ฉันขอแนะนำให้เขียนคำถามใหม่เพื่ออธิบายสิ่งที่คุณอธิบายในความคิดเห็นเหล่านี้และดูว่ามีใครสามารถช่วยคุณได้บ้าง อ้างถึงคำตอบนี้หากคุณต้องการ แต่ถ้าคุณคิดว่า0.0.0.0.0.0.0.1เป็นที่อยู่ IPv6 ที่ถูกต้องคุณจะไม่สามารถใช้งานได้
JakeGould

8

จาก "curl - คู่มือ" ฉันพบสิ่งนี้:

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

หรือ

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

ดังนั้นสำหรับที่อยู่ที่คุณถามให้ลอง:

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

อย่างไรก็ตามคุณอาจต้องการเรียกใช้:

curl -V

และดูว่า IPv6 แสดงบนบรรทัดที่ระบุว่า "คุณสมบัติ" (บรรทัดที่สามไม่ใช่การนับบรรทัดพิเศษจากการตัดคำ) ฉันพบรุ่นที่ฉันใช้ไม่ได้ หน้าดาวน์โหลด cURLมีลิงค์ต่าง ๆ สำหรับระบบปฏิบัติการรวมถึงเว็บไซต์ดาวน์โหลด curl 7.41.0 (ซึ่งปัจจุบันเป็นเวอร์ชั่นล่าสุด) สำหรับ Microsoft Windows หน้านั้นมีไฟล์ปฏิบัติการหลายไฟล์ (มีให้สำหรับ Microsoft Windows) อันแรกที่ฉันพบไม่รองรับ IPv6 แต่ทั้งสองอธิบายว่า "ipv6-sspi-spnego-winssl" (หนึ่งสำหรับ x86 และหนึ่งสำหรับ x64) ทำ: curl -V แสดง IPv6 ดังนั้นควรระมัดระวังเกี่ยวกับแพ็คเกจที่คุณดาวน์โหลด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.