จะปิดการเชื่อมต่อ netcat โดยอัตโนมัติหลังจากส่งข้อมูลได้อย่างไร


22

ฉันกำลังรันคำสั่งต่อไปนี้จากสคริปต์:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

อย่างไรก็ตามไคลเอ็นต์ netcat ยังคงเปิดอยู่เรื่อย ๆ ฉันจะปิดการเชื่อมต่อได้อย่างไรเมื่อข้อมูลนี้ถูกส่งไปแล้ว?

คำตอบ:


17

ทั้งคำตอบอื่น ๆ-cและคำตอบที่-qได้รับนั้นถูกต้องในบริบทที่ถูกต้อง แต่อาจช่วยสรุปได้ว่าทำไมมีคำตอบหลายข้อและให้คำตอบทั่วไปมากกว่า

ตัวเลือกต่าง ๆ เหล่านี้ทำสิ่งเดียวกัน แต่เป็นการใช้งานที่แตกต่างกันของ netcat:

  • -c การใช้งาน netcat ของ GNU
  • -q การใช้งาน OpenBSD ของ netcat
  • -w (อื่น ๆ ?) การใช้งาน OpenBSD ของ netcat

บางรุ่นจำเป็นต้องมี int เพื่อระบุจำนวนวินาทีที่จะรอก่อนที่จะเลิกใช้ตัวเลือก-qและ -wint นี้จะต้องเป็น> 0หรือ>= 0ขึ้นอยู่กับรุ่น

หากคุณกำลังใช้งานบางอย่างกับหลาย ๆ เครื่องและไม่แน่ใจว่าพวกเขาใช้การใช้งาน netcat แบบเดียวกันคุณอาจลองตัดการเรียก netcat ของคุณด้วยtimeoutโปรแกรมเพื่อฆ่า netcat หลังจากนั้นไม่กี่วินาที

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

วิธีนี้ค่อนข้างงุ่มง่ามเพราะมันทำให้ขีด จำกัด บนการดำเนินการของ netcat ไม่ว่าจะส่งข้อมูลสำเร็จหรือไม่ แต่ถ้าคุณกำลังส่งข้อมูลจำนวนเล็กน้อยและมีเวลาไม่กี่วินาทีในการสำรอง กับการใช้งาน netcat ใด ๆ


5

คุณสามารถใช้-qพารามิเตอร์ แต่มันจะทำให้netcatเซิร์ฟเวอร์ถูกปิดด้วย

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    

3

ในกรณีของฉันสำเนาของ netcat ที่ฉันใช้บน Mac ของฉันติดตั้งผ่าน Homebrew (v 0.7.1) ไม่มีตัวเลือก -q แต่ฉันสามารถใช้ตัวเลือก -c เพื่อปิด STDIN EOF และวาง คำสั่งทั้งหมดในลูป:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done

1

บนเซิร์ฟเวอร์ Ubuntu 18.04 ฉันต้องใช้สิ่งต่อไปนี้: (พบได้ใน man pages)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

เห็นได้ชัดว่า-Nมีความคล้ายคลึงกับ-qหรือ-cใน distros อื่น ๆ

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