ฉันสามารถไพพ์ / เปลี่ยนเส้นทางแอปพลิเคชันคอนโซลผ่าน netcat เพื่อให้สามารถใช้จากระยะไกลได้หรือไม่


10

เป็นไปได้ไหมที่ 'ไพพ์' อินสแตนซ์ของแอปพลิเคชันคอนโซลผ่าน netcat ดังนั้น netcat กำลังฟังการเชื่อมต่อใหม่และเปลี่ยนทิศทางstdinและstdoutผ่านการเชื่อมต่อเครือข่าย


ใช่ แต่มันอาจจะต้องเป็นซับเดียวซึ่งก็ดีท่อก็ช่างดี ฉันไม่รู้ว่าคุณสามารถบอก nc และ pipe ไปยังอินสแตนซ์ที่กำลังทำงานอยู่โดย pid ได้หรือไม่ คุณสามารถ nc กับ ip และไพพ์ไปยัง nc ที่กำลังรับฟังและไพพ์ที่ไปยัง nc ที่กำลังรับฟัง ฯลฯ และไพพ์ที่ไปยัง nc กับ ip
barlop

ฉันเปลี่ยนชื่อเพราะสิ่งที่คุณพูดถึงฟังดูเหมือนการเปลี่ยนเส้นทาง I / O มากกว่าการใช้ไปป์ (ซึ่งเกี่ยวข้องกับการย้ายเอาท์พุทของกระบวนการหนึ่งไปยังอินพุตของอีกกระบวนการหนึ่ง)
พัฒนา

@Breakthrough สิ่งที่แตกต่างจากท่ออย่างไร ขณะที่เขากำลังพูดถึงการเปลี่ยนเส้นทาง IO และไม่พูดถึงไฟล์จากนั้นจะแตกต่างจากการวางท่ออย่างไร
barlop

@barlop การเปลี่ยนเส้นทาง I / O ( <หรือ>) แตกต่างจาก piping ( |) อย่างมีนัยสำคัญถึงแม้ว่าบางครั้งคุณสามารถดำเนินการเทียบเท่ากับการผสมผสานทั้งสองอย่าง แม้ว่าการเปลี่ยนเส้นทาง I / O คุณสามารถเปลี่ยนตำแหน่งของทั้งสองสตรีมได้ piping เพียงแค่เปลี่ยนเส้นทางเอาต์พุตมาตรฐานของกระบวนการหนึ่งไปยังอินพุตมาตรฐานของอีกกระบวนการหนึ่ง
พัฒนา

@Breakthrough ดูสิ่งที่ฉันถามคุณว่า > และ <แตกต่างจากการวางท่อเพราะ <และ> ใช้ไฟล์ แต่เขาไม่ได้พูดถึงไฟล์ ผมถามคุณ "วิธีการที่ไม่ว่า [IO เปลี่ยนเส้นทาง] แตกต่างจากท่อในขณะที่เขาพูดคุยเกี่ยวกับการเปลี่ยนเส้นทาง IO และไม่ได้พูดคุยเกี่ยวกับไฟล์แล้วว่ามันไม่ได้แตกต่างจากท่อ?"
barlop

คำตอบ:


16

ดีที่บันทึกไว้ในวิกิพีเดียและnetcatเอกสารมีความเป็น-eตัวเลือกที่เป็นสาเหตุของมันเพื่อวางไข่ ( อี xecute) โปรแกรมเมื่อได้รับการเชื่อมต่อที่แนบซ็อกเก็ตที่จะ stdin, stdout และ stderr ของกระบวนการ ตัวอย่างการใช้งาน:

nc -l -pport_number -eprogram_name

ตัวอย่างทั่วไปแสดง/bin/shหรือbashถูกใช้เป็นProgram_Name การใช้ตัวเลือกนี้จะหมดกำลังใจเพราะโดยทั่วไปจะเปิดพอร์ทัลการเข้าถึงที่ไม่ระบุชื่อและไม่มีรหัสผ่านลงในเครื่องของคุณ แน่นอนว่านี่คือการลดลงโดยการใช้โปรแกรมที่มีพลังงานน้อยกว่าเชลล์ (อันที่ไม่มีความสามารถในการหลบหนีไปยังเชลล์) ลดการใช้งานของคุณและทำให้เป็นความลับ อย่างไรก็ตามนักพัฒนาดั้งเดิมของnetcatรู้สึกว่าแข็งแรงพอที่ตัวเลือกนี้เป็นความคิดที่ไม่ดีที่พวกเขาปิดการใช้งานโดยค่าเริ่มต้นและปรับมันภายใต้ตัวเลือกการรวบรวม“ GAPING_SECURITY_HOLE” สิ่งนี้ถูกกล่าวถึงสั้น ๆ ในบทช่วยสอน NetCatและnetcatเอกสารอื่น ๆ

การค้นหาของ Google นำฉันไปสู่การอภิปรายของปัญหานี้ในเว็บไซต์อื่น ๆ Stack แลกเปลี่ยน: กองมากเกินและเซิร์ฟเวอร์ผิดพลาด ผู้ให้ข้อมูลหลายคนเสนอเทคนิคต่อไปนี้เพื่อทำสิ่งเดียวกันโดยไม่ใช้-eตัวเลือก (เช่นในเวอร์ชันnetcatที่-eปิดใช้งานตัวเลือก):

บนเซิร์ฟเวอร์:
mkfifopipe_name
nc -l -pport_number <pipe_name   | program_name >pipe_name

บนไคลเอ็นต์:
nc server_machine_name  port_number

หมายเหตุสองประการ:

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