กำลังส่งเนื้อหาไฟล์ข้อความไปยังเซิร์ฟเวอร์โดยใช้ netcat?


13

มีกระบวนการภูตที่กำลังฟังพอร์ต 5144 ซึ่งฉันไม่สามารถแก้ไขได้

ฉันต้องการใช้ netcat เพื่อส่งเนื้อหาของไฟล์ข้อความไปยังเซิร์ฟเวอร์ แต่สิ่งนี้ทำให้netcatแฮงค์เทอร์มินัลจนกว่าฉันจะกดCtrl+ C:

cat file.txt | nc -u 127.0.0.1 5144

วิธีเดียวที่ฉันสามารถทำให้มันทำงานได้คือการเรียกใช้nc -u 127.0.0.1 5144และคัดลอก / วางเนื้อหาของไฟล์ด้วยตนเอง

ความคิดใด ๆ


ทราบด้วย:

  1. cat file.txt | ...นำไปสู่bash: ...: command not foundและฉันสามารถใช้งานเทอร์มินัลต่อไปได้
  2. การใช้nc -u 127.0.0.1 5144 < file.txtโอกาสในการขายเช่นเดียวกับการใช้ | ข้างบน

จะเกิดอะไรขึ้นเมื่อคุณพูดcat file.txt | …? แล้วไงnc -u 127.0.0.1 5144 < file.txtล่ะ
สกอตต์

คุณจำเป็นต้องใช้ -u หรือไม่ นอกจากนี้คุณลองด้านอื่น ๆ ด้วยหรือไม่ nc -l -p และคุณลอง nc -p ไหม? (มีอยู่หนึ่ง nc ที่ใช้ -l -p และอีกอันฉันคิดว่าใช้ -p โดยไม่มี -l) คุณแสดงด้านเดียวเท่านั้นฝั่งไคลเอ็นต์ / ฝั่งเริ่มต้น คุณทำอะไรกับฝั่งเซิร์ฟเวอร์ ลองทดสอบทำ nc ฟังพอร์ต 1234 และดูว่า cat ... | nc ... ใช้ได้กับมัน ฉันไม่เคยเห็นมาก่อนดังนั้นนี่อาจจะเป็นจุดอ่อน แต่บางทีมันอาจเป็นเรื่องแปลกสำหรับภูตเฉพาะนี้ที่ไม่ยอมรับสิ่งต่าง ๆ
barlop

ฉันไม่สามารถแก้ไขภูต @Scott: bash: ...: command not foundและการใช้ "<file.txt" ก็เหมือนกับ | ผู้ประกอบการ (netcat เพิ่งแฮงค์)
Amil

คุณช่วยให้แม่นยำกว่านี้ได้ไหม? มันพูดว่า“ bash: ...: command not found” หรือไม่? หรือมันบอกว่า " bash: cat: command not found" หรือ " bash: nc: command not found"? และจากนั้นจะออกจากพร้อมต์เชลล์หรือไม่หรือไม่ (ฉันขอแนะนำให้คุณแก้ไขคำถามเพื่อเพิ่มรายละเอียดเหล่านี้ดังนั้นผู้คนในออสเตรเลียที่เพิ่งตื่นนอนไม่ต้องอ่านความคิดเห็นทั้งหมดเหล่านี้เพื่อค้นหาว่าอาการของคุณเป็นอย่างไร)
Scott

@Scott: ขอบคุณฉันรวมคำตอบของคำถามกับคำถามเดิม ความคิดใด ๆ
Amil

คำตอบ:


7

หากคุณใช้ netcat เวอร์ชัน GNU คุณสามารถใช้แฟล็ก -c เพื่อปิดการเชื่อมต่อบน EOF

-c, - ปิดการเชื่อมต่อบน EOF จาก stdin

หากคุณใช้เครื่องมือเวอร์ชันดั้งเดิมคุณสามารถใช้แฟล็ก -q

-q วินาทีออกจาก EOF บน stdin และหน่วงเวลาเป็นวินาที

ตัวอย่างสำหรับเวอร์ชั่นดั้งเดิมคือ:

cat file.txt | nc -u -q 0 127.0.0.1 5144

ฉันได้เพิ่ม "-q 0" ลงในคำสั่งดั้งเดิมของคุณ การดำเนินการนี้จะปิดการเชื่อมต่อหลังจากส่งไฟล์แล้ว


ในการแยกแยะ: เวอร์ชันดั้งเดิมเป็นเวอร์ชั่นที่ต้องระบุ-l -p <port>สำหรับการฟัง รุ่น GNU -l <port>ใช้เวลาเพียง
tueftl

1

สมมติว่าหลังจากส่งการเชื่อมต่อ EOF จะไม่ได้ใช้งานคุณสามารถใช้-w timeoutตัวเลือกซึ่งใช้งานtimeoutได้เท่ากับศูนย์ (ไม่เหมือนกับ-qตัวเลือกโง่... )

cat file.text | nc -u localhost 4300 -w0

0

หากคุณถ่ายโอนจาก FreeBSD เป็น Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N จะปิดซ็อกเก็ตเครือข่ายหลังจาก EOF

ของ windows: nc -l -p 5144 > output.txt

-lจะหยุดฟังเมื่อปิดการเชื่อมต่อ (ไม่เหมือน-L)

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