ระบบเหมือน Unix ใดที่ให้ไฟล์พิเศษ / dev / tcp


9

ฉันรู้ว่า/dev/tcp/<host>/<port>มันเป็นเวทย์มนตร์ที่จัดการโดยกระสุนบางตัวในการเปลี่ยนเส้นทาง แต่ตามman bash:

หากระบบปฏิบัติการที่ใช้ bash นั้นให้ไฟล์พิเศษเหล่านี้ bash จะใช้มัน มิฉะนั้นมันจะเลียนแบบพวกเขาภายใน [... ]

บนกล่อง Linux ที่ฉันใช้อยู่ในตอนนี้ไม่มี/dev/tcpไฟล์พิเศษดังนั้น Bash จะเลียนแบบมัน แต่จริง ๆ แล้วมีระบบเหมือน Unix ที่ให้/dev/tcpไฟล์พิเศษที่มีความหมายเดียวกับที่สนับสนุนโดย Bash หรือไม่


มันจะต้องมีไดเรกทอรีที่จำลอง การสร้างไดเร็กทอรีที่จำลองขึ้นนั้นเป็นไปได้เฉพาะกับระบบไฟล์เฉพาะเช่น procfs หรือ sysfs สามารถทำได้ /devเป็น tmpfs บน linuxes ปัจจุบันและอยู่ในพาร์ติชัน root ในอันที่เก่ากว่า นี่คือเหตุผลที่เป็นไปไม่ได้ในขณะนี้ มันสามารถทำให้เป็นไปได้อย่างง่ายดายด้วยส่วนขยาย sysfs หรือ procfs (ทั้ง fs มีความยืดหยุ่นและคล้ายกันมาก (จริง ๆ แล้วคงไม่มีใครรู้ว่าทำไมพวกเขาถึงไม่เหมือนกัน)) ไม่มีใครทำวันนี้ แต่สามารถทำได้ประมาณ 100 บรรทัดของรหัส
peterh - Reinstate Monica

แต่มีระบบปฏิบัติการอื่น ๆ ที่ทำแล้ว? เมื่อถึงจุดหนึ่งฉันคิดว่าแผน 9 ทำ แต่ฉันผิด
Sylvain Leroux

1
ฉันไม่รู้อาจไม่ (เท่าที่ฉันรู้มันเป็นการประดิษฐ์ทุบตี) ฉันโหวตให้คำถามของคุณเพราะคำตอบนั้นน่าสนใจสำหรับฉันเช่นกัน เท่าที่ฉันรู้ไม่มีระบบปฏิบัติการยูนิกซ์ x86 ที่ได้รับความนิยมสามารถทำเช่นนี้ได้
peterh - Reinstate Monica

คำตอบ:


8

ฉันคิดว่าเอกสาร Bash ค่อนข้างทำให้เข้าใจผิดในหัวข้อนี้ ดูที่รหัสแม้จะกลับไปเป็นเวอร์ชั่น 2.04 ซึ่งมีการแนะนำการเปลี่ยนเส้นทางเครือข่าย/dev/tcpและ/dev/udpทำงานดังนี้:

  • เมื่อถึงเวลาสร้างconfigureสคริปต์จะตรวจสอบเพื่อดูว่ารองรับคุณสมบัติเครือข่ายต่างๆหรือไม่ ถ้าเป็นเช่นนั้นหากเปิดใช้งานการเปลี่ยนเส้นทางเครือข่าย (ซึ่งเป็นกรณีโดยค่าเริ่มต้น) รหัสเครือข่ายภายในจะถูกสร้างขึ้น
  • ณ รันไทม์หากรหัสเครือข่ายภายในถูกสร้างขึ้น/dev/tcpและ/dev/udp(ในรูปแบบที่ถูกต้อง) จะได้รับการจัดการภายใน มิฉะนั้นจะมีการสร้างคำเตือน (“ / dev / (tcp | udp) / โฮสต์ / พอร์ตที่ไม่รองรับหากไม่มีเครือข่าย”) และ Bash พยายามเปิดเส้นทางที่กำหนดในระบบ
  • หากมีการกำหนดค่าการเปลี่ยนเส้นทางเครือข่ายจะไม่มีการทำสิ่งใดเป็นพิเศษ

สิ่งนี้ทำให้เดือดลงไปคือ:

  • หากเปิดใช้งานการเปลี่ยนเส้นทางเครือข่าย:
    • หากระบบเครือข่ายรองรับบนแพลตฟอร์มเป้าหมาย/dev/tcpและ/dev/udpจะได้รับการจัดการภายในเสมอ
    • มิฉะนั้น Bash จะเตือนและพยายามเปิดไฟล์“ blindly”; หากระบบรองรับอย่างใดก็/dev/(tcp|udp)/host/portจะมีการใช้งานมิฉะนั้นในทุกโอกาสการเปลี่ยนเส้นทางจะล้มเหลว
  • หากการเปลี่ยนเส้นทางเครือข่ายถูกปิดใช้งานจะไม่มีการจัดการพิเศษ ดังกล่าวข้างต้นหากระบบสนับสนุนอย่างใด/dev/(tcp|udp)/host/portที่จะใช้มิฉะนั้นในทุกโอกาสการเปลี่ยนเส้นทางจะล้มเหลว

/dev/tcpมีอยู่ในบางระบบ แต่เท่าที่ฉันรู้ว่าไม่มีใครสนับสนุนสิ่งที่เป็นนามธรรมเช่นเดียวกับทุบตี บน Solaris /dev/tcpใช้กับnddเครื่องมือในการสืบค้นและเปลี่ยนการกำหนดค่าเครือข่าย ในXTI (ดูOpen Groupหากคุณเป็นสมาชิก) t_openสามารถใช้ฟังก์ชันนี้/dev/tcpเพื่อเปิดการเชื่อมต่อ TCP แต่ไม่ได้ใช้การตั้งค่าตามเส้นทางมีโครงสร้างข้อมูลแยกต่างหากเพื่อระบุโฮสต์เป้าหมายและ พอร์ต (และพารามิเตอร์อื่น ๆ )


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