กำลังส่งไฟล์ผ่าน netcat


23

ฉันใช้สิ่งนี้เพื่อส่งไฟล์จากคอมพิวเตอร์เครื่องหนึ่งไปยังคอมพิวเตอร์เครื่องอื่น:

ในการให้บริการไฟล์ (บนคอมพิวเตอร์ A):

cat something.zip | nc -l -p 1234

ในการรับไฟล์ (บนคอมพิวเตอร์ B):

netcat server.ip.here. 1234 > something.zip

คำถามของฉันคือ ... ฉันสามารถทำสิ่งที่ตรงกันข้ามได้หรือไม่? สมมติว่าฉันมีไฟล์ในคอมพิวเตอร์ B และฉันต้องการส่งไปที่ A แต่ไม่ใช่วิธีที่ฉันเขียนด้านบน แต่โดยการทำให้คอมพิวเตอร์ที่ควรได้รับไฟล์ (A) เป็นเซิร์ฟเวอร์ 'กำลังฟัง' และเชื่อมต่อคอมพิวเตอร์ที่เป็นไฟล์ 'กำลังส่ง' ( B) ไปยังเซิร์ฟเวอร์และส่งไฟล์? เป็นไปได้ไหม? ฉันคิดว่ามันอาจจะเป็น แต่ฉันไม่แน่ใจว่าจะทำอย่างไร

ในกรณีที่คำอธิบายข้างต้นของฉันมีความยุ่งเหยิง: ฉันจะส่งไฟล์ไปยัง 'เซิร์ฟเวอร์' ได้อย่างไรแทนที่จะให้บริการไฟล์บนเซิร์ฟเวอร์แล้วนำมันมาจากไฟล์ (เหมือนที่ฉันทำด้านบน)


หมายเหตุ: หากคุณใช้ncเพราะscpช้าเกินไปและคุณไม่ต้องการการเข้ารหัสคุณอาจต้องการเปลี่ยนเป็นudpcast: superuser.com/questions/692294/…
unhammer

คำตอบ:


38

บนเซิร์ฟเวอร์ของคุณ (A):

nc -l -p 1234 -q 1> something.zip </ dev / null
ใน "ลูกค้าผู้ส่ง" (B) ของคุณ:
แมวบางอย่าง netcat server.ip.here 1234


ใช่ฉันคิดว่าฉันจะต้องสลับข้างอย่างใด แต่ฉันไม่แน่ใจว่า :) ขอบคุณมันใช้งานได้!
Phil

นั่นเป็นเคล็ดลับ netcat ที่น่ารัก
DaveParillo

2
ทำไม< /dev/nullส่วนหนึ่ง
törzsmókus

7
เนื่องจาก netcat อ่าน stdin และเขียน stdout พร้อมกันส่งอะไรที่อ่านจาก stdin ออกไปยังเครือข่ายและพิมพ์สิ่งที่ได้รับจากเครือข่ายใน stdout </ dev / null ทำให้แน่ใจว่าเมื่อไฟล์ที่ได้รับเสร็จสมบูรณ์แล้ว netcat จะไม่นั่งรอจนกว่าจะมีอินพุตจากคอนโซล (ซึ่งไม่ควรอ่านต่อ! อินพุตใด ๆ ที่อาจพร้อมใช้งานจากเทอร์มินัลเช่นคุณพิมพ์คำสั่งถัดไปที่คุณต้องการเรียกใช้
martinwguy

4
หากคุณมีpvฉันจะแนะนำการดำเนินงาน "ลูกค้าเซิร์ฟเวอร์" เป็นpv soemthing.zip | ...ที่จะแสดงความคืบหน้าของไฟล์ที่อ่านจะเข้าไปในท่อ
ThorSummoner

6

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

เมื่อได้รับระบบ:

nc -l -p 12345 -q 1 | tar xz -C /path/to/root/of/tree

จากระบบส่ง:

tar czf - ./directory_tree_to_xfer | nc <host name or IP address of receiving system> 12345 

หวังว่าจะช่วย


1
นอกจากคำตอบที่ดีแล้วโปรดทิ้งไว้เป็นความคิดเห็นและไม่ใช่คำตอบแยกต่างหาก
agtoever

2
ไม่สามารถเพิ่มความคิดเห็นด้านบนเนื่องจากไม่มีคะแนนตัวแทนในกระดานย่อยนี้ดังนั้นฉันจึงต้องเสนอมันเป็นคำตอบ แต่เห็นได้ชัดว่าคุณได้รับอนุญาตให้แสดงความคิดเห็นด้วยคำตอบของคุณเอง
B.Kaatz


0

เริ่มอินสแตนซ์อื่นของ netcat บนคอมพิวเตอร์ B. เพียงทำสิ่งที่คุณทำบนคอมพิวเตอร์ A แต่ให้บริการจาก B. ให้พอร์ตใหม่กับเซิร์ฟเวอร์ใหม่


ฉันไม่ต้องการทำสิ่งเดียวกันฉันต้องการเปลี่ยนคำสั่งเป็นอย่างอื่น (ฉันไม่แน่ใจว่ามันเป็นไปได้) ... ดูข้อความตัวหนาในคำถามของฉัน สิ่งที่ฉันหมายถึงคือฉันไม่ต้องการให้บริการจาก B. ฉันต้องการให้ A เป็นเซิร์ฟเวอร์สำหรับฟังอินพุตและจากนั้นฉันต้องการส่งเนื้อหาไฟล์จากผู้ที่ไม่ฟัง B ไปฟัง A.
Phil

นั่นไม่ใช่วิธีการทำงานของ netcat
DaveParillo

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

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