ฉันจะบังคับให้ netcat ส่งอินพุตทันทีโดยไม่ต้องขึ้นบรรทัดใหม่ได้อย่างไร


35

ฉันจะบังคับให้ netcat ส่งอินพุตทันทีโดยไม่ต้องขึ้นบรรทัดใหม่ได้อย่างไร ฉันต้องการทดสอบตัวแยกวิเคราะห์ HTTP ด้วยตนเองและตรวจสอบว่ามันทำงานอย่างไรเมื่อมีการกระจายบรรทัดส่วนหัวในหลายแพ็คเก็ต


2
ลองsocatตามที่ระบุไว้ในคำตอบ
Jeremy W

คำตอบ:


42

ใช้ "EOF" CtrlDที่สำคัญ เมื่อกดตรงกลางของบรรทัดมันจะมอบให้กับ netcat ทุกอย่างที่มีการป้อนข้อมูล ณ จุดนั้น

การบัฟเฟอร์จะกระทำโดยเลเยอร์ tty และไม่ได้จัดการโดยncทั้งหมด stty -icanon && nc ...จะปิดการใช้งานการบัฟเฟอร์และอนุญาตให้ncดูข้อมูลในขณะที่มันถูกป้อนเข้าสู่เทอร์มินัล ณ จุดนี้มันจะถูกส่งทันที (โปรดทราบว่าคำสั่งsttyและncจะต้องทำงานร่วมกันมิฉะนั้นตัวเชลล์เองอาจเปิดใช้งานได้อีกครั้งเมื่อแสดงพรอมต์)


+1 แต่ไม่มีตัวเลือกสำหรับการเปิด netcat ในแบบที่มันจะไม่บัฟเฟอร์อะไร?
lpapp

5
@FinalContest: การบัฟเฟอร์ทำโดยเลเยอร์ tty stty -icanon && nc ...หรือstty raw && nc ...จะปิดการใช้งาน [โปรดทราบว่าจะต้องทำงานร่วมกันมิฉะนั้นตัวเชลล์เองจะเปิดใช้งานอีกครั้งเมื่อแสดงพรอมต์]
grawity

@grawity: ยอดเยี่ยมอดีตทำงานได้ดี แต่สิ่งที่ตามมาติดอยู่ ... ctrl-c ไม่ทำงานอีกต่อไปเพื่อออกจากเซสชันและฉันไม่สามารถรับ ctrl-z เพื่อทำงานได้ คาดหวังหรือไม่ นอกจากนี้โปรดอัปเดตคำตอบของคุณเพื่อให้เราสามารถล้างความคิดเห็น
lpapp

2
@FinalContest: ใช่rawเปลี่ยนกลุ่มของตัวเลือก tty ทั้งหมดหนึ่งในนั้นคือการจัดการของปุ่ม "ควบคุม" พิเศษที่ระดับ tty (มันเป็นโหมด "ดิบ" จริงๆแล้วมันผ่านทุกอย่างไปยังโปรแกรม) คุณสามารถใช้stty -a -F /dev/pts/XXจาก tty อื่นเพื่อดูพารามิเตอร์ปัจจุบัน
grawity

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