netcat เป็นเซิร์ฟเวอร์แบบมัลติเธรด


12

ฉันใช้ netcat เพื่อรันเซิร์ฟเวอร์อย่างง่ายเช่นนี้:

while true; do nc -l -p 2468 -e ./my_exe; done

ด้วยวิธีนี้ทุกคนสามารถเชื่อมต่อกับโฮสต์ของฉันในพอร์ต 2468 และพูดคุยกับ "my_exe"
น่าเสียดายที่ถ้ามีคนอื่นต้องการเชื่อมต่อระหว่างเซสชันที่เปิดอยู่มันจะได้รับข้อผิดพลาด "การเชื่อมต่อถูกปฏิเสธ" เนื่องจาก netcat ไม่ได้ฟังจนกว่าจะถึง "ขณะ" ลูปถัดไป

มีวิธีที่จะทำให้ netcat ทำงานเหมือนเซิร์ฟเวอร์แบบมัลติเธรดหรือไม่เช่นเคยฟังการเชื่อมต่อขาเข้าหรือไม่ ถ้าไม่มีวิธีแก้ปัญหาสำหรับเรื่องนี้บ้างไหม?


คุณสามารถใช้ socat
sivann

คำตอบ:


18

คุณกำลังใช้เครื่องมือที่ไม่ถูกต้องสำหรับงาน: ใช้สิ่งที่ต้องการucspi-tcpโดยเฉพาะtcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.

2
ชีวิตของฉันอยู่ที่ไหนกันนี่!
Sridhar Sarnobat

ขอบคุณ @akira คุณช่วยยกตัวอย่างได้มั้ย
ซาบรีนา

3

แม้ว่าคุณจะไม่ได้กล่าวถึงระบบปฏิบัติการที่คุณใช้ แต่ฉันจะสมมติว่าเป็น Linux หรือ Unix ตามไวยากรณ์ของตัวอย่างคำสั่งเชลล์ของคุณ

หากระบบของคุณกำลังเรียกใช้xinetd (หรือinetdรุ่นก่อน) คุณสามารถใช้ซอฟต์แวร์นั้นเพื่อฟังการเชื่อมต่อบนพอร์ตที่คุณเลือกและรันโปรแกรมปฏิบัติการเพื่อตอบสนอง ด้วย xinetd / inetd คุณมีตัวเลือกในการอนุญาตให้มีการเชื่อมต่อพร้อมกันหลาย ๆ อันโดยแต่ละอันจะให้บริการโดยอินสแตนซ์แยกต่างหากของไฟล์สั่งการของคุณ


-2

คุณน่าจะเป็นเพียงกระบวนการพื้นหลัง (จากนั้นจะไม่รอการส่งคืนก่อนที่จะก้าวไปยังลูปถัดไป) ด้วย '&' เช่น:

while true; do nc -l -p 2468 -e ./my_exe &; done

7
ที่ว่าจะโหลดวางไข่ของกระบวนการย่อยและผิดพลาดของระบบ ....
jackweirdy

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