ฉันต้องการเซิร์ฟเวอร์ EDP echo เพื่อรับแพ็คเก็ตและตอบกลับสิ่งที่ได้รับ ฉันจะทำสิ่งนี้โดยใช้netcat
หรือsocat
? ควรมีชีวิตอยู่ตลอดไปและจัดการกับแพ็คเก็ตที่มาจากโฮสต์หลายแห่ง
ฉันต้องการเซิร์ฟเวอร์ EDP echo เพื่อรับแพ็คเก็ตและตอบกลับสิ่งที่ได้รับ ฉันจะทำสิ่งนี้โดยใช้netcat
หรือsocat
? ควรมีชีวิตอยู่ตลอดไปและจัดการกับแพ็คเก็ตที่มาจากโฮสต์หลายแห่ง
คำตอบ:
เครื่องมือที่คล้ายกับ netcat อีกตัวคือเวอร์ชัน nmap ncat
ซึ่งมีสารพัดตัวที่สร้างขึ้นเพื่อลดความซับซ้อนของสิ่งนี้ สิ่งนี้จะได้ผล:
ncat -e /bin/cat -k -u -l 1235
-e หมายถึงมันรัน / bin / cat (เพื่อสะท้อนกลับสิ่งที่คุณพิมพ์)
-k หมายถึงการมีชีวิตอยู่ซึ่งมันคอยฟังหลังจากการเชื่อมต่อแต่ละครั้ง
-u หมายถึง udp
-l 1235 หมายความว่ามันฟังพอร์ต 1235
ฉันเคยsocat -v PIPE udp-recvfrom:5553,fork
เรียกใช้เซิร์ฟเวอร์และsocat - udp:localhost:5553
สำหรับลูกค้า
นี่เป็นความช่วยเหลือที่ดีมาก!
socat TCP4-LISTEN:2000,fork EXEC:cat
คุณยังสามารถใช้ socat (แทนที่จะใช้ netcat) เป็นเซิร์ฟเวอร์ echo และ netcat เป็นไคลเอนต์
เซิร์ฟเวอร์ Socat echo (ฟังพอร์ต TCP 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
ไคลเอ็นต์ Netcat (เชื่อมต่อกับ serverip บนพอร์ต TCP 1234):
nc serverip 1234
คุณสามารถเขียนโปรแกรม C ที่forks nc -u -l -p 4321
จากนั้นใช้dup (2)เพื่อเชื่อมต่อ:
จากนั้นในการวนรอบไม่รู้จบผู้ปกครองอ่านจาก stdin และเขียนใน stdout สิ่งที่ผู้ปกครองอ่าน
socat -v PIPE UDP-LISTEN:5555,fork
แต่การเชื่อมต่อที่สองได้รับการปฏิเสธ ยังไงก็ใช้งานได้ดีกับ TCP-LISTEN ฉันหลีกเลี่ยงการเขียนโค้ดไม่เช่นนั้นฉันสามารถเขียนได้ทั้งหมดใน C.
หากคุณกำลังทำงานบน Windows และใช้ยูนิกซ์เช่นสภาพแวดล้อมเช่น cygwin, netcat migth ไม่ได้ให้พารามิเตอร์ -e มันใช้งานได้ดีสำหรับฉัน
netcat
ทางออกที่ติดตั้งใน Ubunutu
netcat
ที่ติดตั้งใน Ubuntu 16.04 มาจากnetcat-openbsd
และไม่มี-c
ตัวเลือก แต่คู่มือให้การแก้ปัญหา:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
จากนั้นตัวอย่างลูกค้า:
echo abc | netcat localhost 8000
สิ่งที่ต้องทำ: วิธีการปรับเปลี่ยนค่าสตริงการป้อนข้อมูล? ต่อไปนี้จะไม่ส่งคืนคำตอบใด ๆ :
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
อย่างไรก็ตามตัวอย่าง remote shell ใช้งานได้:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
อย่างไรก็ตามฉันไม่ทราบวิธีจัดการกับคำขอที่เกิดขึ้นพร้อมกัน