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