Надсилання файлу через netcat


23

Я використовую щось подібне для надсилання файлу з одного комп'ютера на інший:

Для обслуговування файлу (на комп'ютері A):

cat something.zip | nc -l -p 1234

Для отримання файлу (на комп'ютері B):

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

Моє запитання: чи можу я зробити навпаки? Скажімо, у мене є файл на комп'ютері B, і я хочу надіслати його на A, але не так, як я написав вище, а зробивши комп'ютер, який повинен отримувати файл (A), "сервісом" і підключити комп'ютер, який "відправляє" файл ( Б) на сервер і відправити файл? Це можливо? Я думаю, що це може бути, але я не впевнений, як це зробити.

У випадку, якщо моє вище пояснення зіпсовано: Як я надішлю файл TO "server" замість того, щоб подавати файл на сервер, а потім брати його з нього (як я це робив вище)?


Примітка: якщо ви користуєтесь через те, ncщо scpзанадто повільно і вам не потрібне шифрування, можливо, вам потрібно перейти на udpcast: superuser.com/questions/692294/…
зніміть

Відповіді:


38

На вашому сервері (A):

nc -l -p 1234 -q 1> something.zip </ dev / null
Що стосується вашого "клієнта-відправника" (B):
кішка щось.zip | netcat server.ip.тут 1234


Так, я думав, що мені доведеться якось перемикати сторони, але не знав як :). Дякую, це працює!
Філ

Це милий фокус з сіткою.
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
Не вдалося додати коментар вище через відсутність точок Rep на цій підкомітеті, тому я повинен був запропонувати це як відповідь, хоча, мабуть, вам дозволяється коментувати власні відповіді.
Б.Каац

3

Комп'ютер A: nc -l -p 1234 > filename.txt

Комп'ютер B: nc server.com 1234 < filename.txt

Має працювати теж;)


0

Запустіть ще один примірник netcat на комп'ютері B. Просто виконайте те, що ви робили на комп’ютері A, але подайте його від B. Дайте новому серверу новий порт.


Я не хочу робити те саме, я хочу змінити команди на щось інше (я не впевнений, чи можливо) ... подивіться на жирний текст мого запитання. Що я маю на увазі, що я не хочу служити від B. Я хочу, щоб A прослуховував сервер для введення даних ... і тоді я хочу надіслати вміст файлу від неслухаючого B до прослуховування А.
Phil

Це не так, як працює мережа.
DaveParillo

1
Як видно з прийнятої відповіді - так, саме так може працювати і мережа.
Філ

Ти маєш рацію. Я щодня дізнаюся щось нове!
DaveParillo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.