Mengirim file melalui netcat

23

Saya menggunakan sesuatu seperti ini untuk mengirim file dari satu komputer ke komputer lain:

Untuk melayani file (di komputer A):

cat something.zip | nc -l -p 1234

Untuk menerima file (di komputer B):

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

Pertanyaan saya adalah ... bisakah saya melakukan yang sebaliknya? Katakanlah saya memiliki file di komputer B dan saya ingin mengirimkannya ke A tetapi tidak seperti yang saya tulis di atas, tetapi dengan membuat komputer yang seharusnya menerima file (A) menjadi server 'mendengarkan' dan menghubungkan komputer yang 'mengirim' file ( B) ke server dan mengirim file? Apa itu mungkin? Saya pikir itu mungkin tapi saya tidak yakin bagaimana melakukan ini.

Jika penjelasan saya di atas kacau: Bagaimana cara mengirim file KE 'server' alih-alih melayani file di server dan kemudian mengambilnya DARI itu (seperti yang saya lakukan di atas)?

Phil
sumber
Catatan: jika Anda menggunakan nckarena scpterlalu lambat dan Anda tidak perlu enkripsi, Anda mungkin ingin beralih ke udpcast: superuser.com/questions/692294/...
unhammer

Jawaban:

37

Di server Anda (A):

nc-l -p 1234 -q 1> something.zip </ dev / null
Di "klien pengirim" Anda (B):
cat something.zip | netcat server.ip.di sini 1234

martinwguy
sumber
Ya, saya berpikir bahwa saya harus beralih sisi tetapi saya tidak yakin bagaimana caranya :). Terima kasih, ini berhasil!
Phil
Itu trik netcat yang lucu.
DaveParillo
2
mengapa < /dev/nullbagian itu?
törzsmókus
7
Karena netcat membaca stdin dan menulis stdout secara bersamaan, mengirimkan apa saja yang dibaca dari stdin ke jaringan dan mencetak apa pun yang diterima dari jaringan di stdout. </ Dev / null memastikan bahwa, ketika file yang diterima telah selesai, netcat tidak duduk di sana tanpa batas menunggu input dari konsol (yang seharusnya tidak dibaca!) Dan juga memastikan bahwa itu tidak melahap input apa pun yang mungkin tersedia dari terminal, seperti Anda mengetik perintah berikutnya yang ingin Anda jalankan.
martinwguy
4
jika sudah pv, saya sarankan mengoperasikan "server client" sebagai pv soemthing.zip | ..., yang akan menampilkan progres dari file read yang masuk ke dalam pipa.
ThorSummoner
5

Sebagai catatan, jika Anda juga ingin mempertahankan izin file, kepemilikan, dan stempel waktu, kami menggunakan tar dengan netcat untuk melakukan transfer direktori dan file.

Pada sistem penerima:

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

Dari sistem pengiriman:

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

Semoga itu bisa membantu.

B.Kaatz
sumber
1
Tambahan yang bagus untuk jawabannya, tapi tolong tinggalkan itu sebagai komentar dan bukan sebagai jawaban terpisah.
agtoever
2
Tidak dapat menambahkan komentar di atas karena kurangnya poin Rep pada sub-board ini, jadi saya harus menawarkannya sebagai jawaban, meskipun tampaknya, Anda boleh mengomentari jawaban Anda sendiri.
B.Kaatz
2

Komputer A: nc -l -p 1234 > filename.txt

Komputer B: nc server.com 1234 < filename.txt

Harus bekerja juga;)

menandai
sumber
0

Mulai contoh lain dari netcat pada komputer B. Lakukan saja apa yang Anda lakukan pada komputer A, tetapi sajikan dari B. Berikan server baru port baru.

DaveParillo
sumber
Saya tidak ingin melakukan hal yang sama, saya ingin mengubah perintah ke sesuatu yang lain (saya tidak yakin apakah itu mungkin) ... lihat teks tebal di pertanyaan saya. Maksud saya adalah bahwa saya tidak ingin melayani dari B. Saya ingin A menjadi server mendengarkan masukan ... dan kemudian saya ingin mengirim konten file dari non-mendengarkan B ke mendengarkan A.
Phil
Itu bukan cara kerja netcat.
DaveParillo
1
Seperti yang Anda lihat dari jawaban yang diterima - ya, begitulah cara netcat dapat bekerja juga.
Phil
Kamu benar. Saya belajar sesuatu yang baru setiap hari!
DaveParillo