Отправка файла через netcat

57256
Phil

Я использую что-то вроде этого для отправки файла с одного компьютера на другой:

Для подачи файла (на компьютере A):

cat something.zip | nc -l -p 1234 

Чтобы получить файл (на компьютере B):

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

Мой вопрос ... могу ли я сделать обратное? Допустим, у меня есть файл на компьютере B, и я хочу отправить его на A, но не так, как я написал выше, а сделать компьютер, который должен принимать файл (A), «прослушивающим» сервером и подключить компьютер, «отправляющий» файл ( Б) на сервер и отправить файл? Является ли это возможным? Я думаю, что это может быть, но я не уверен, как это сделать.

В случае, если моё вышеприведённое объяснение испорчено: как отправить файл на «сервер» вместо того, чтобы отправить файл на сервер, а затем забрать его с него (как я это делал выше)?

16
Примечание: если вы используете `nc`, потому что` scp` слишком медленный и вам не нужно шифрование, вы можете переключиться на `udpcast`: https://superuser.com/questions/692294/why-is -udcast-это-неоднократный-быстрее, чем Netcat unhammer 6 лет назад 0

4 ответа на вопрос

26
martinwguy

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

nc -l -p 1234 -q 1> что-то.zip </ dev / null 
На вашем "клиенте отправителя" (B):
кошка что-то.zip | netcat server.ip.here 1234 

Да, я думал, что мне придется как-то поменяться местами, но я не знал как :). Спасибо, это работает! Phil 14 лет назад 0
Это милый трюк с кошкой. DaveParillo 14 лет назад 0
почему `</ dev / null` часть? törzsmókus 11 лет назад 2
Поскольку netcat одновременно читает stdin и записывает stdout, отправляет все данные, считанные со stdin, в сеть и печатает все полученные из сети данные на stdout. martinwguy 11 лет назад 5
С помощью `-q 1` я получил только 20-50% файла размером 1,2 ГБ. Он работал нормально с более высоким значением `-q`. Ivan Kozik 7 лет назад 0
`-q секунд :: после EOF на stdin, подождите указанное количество секунд и затем выйдите. Если секунды отрицательны, ждите вечно`. Для меня значение `-q`` -1` сработало для файла с несколькими гигабайтами. ThorSummoner 7 лет назад 0
если у вас есть `pv`, я бы предложил использовать« серверный клиент »как` pv soemthing.zip | ... `, который будет отображать ход чтения файла, поступающего в канал. ThorSummoner 7 лет назад 2
Со мной и -q 0 работает нормально для больших файлов. Может быть, это ошибка, которая была исправлена? rogerdpack 6 лет назад 0
4
B.Kaatz

As a note, if you want to also preserve file permissions, ownership and timestamps, we use tar with netcat to do transfers of directories and files.

On receiving system:

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

From sending system:

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

Hope that helps.

Хорошее дополнение к ответу, но, пожалуйста, оставьте его как комментарий, а не как отдельный ответ. agtoever 9 лет назад 1
Невозможно добавить комментарий выше из-за отсутствия точек повторений на этой подплате, поэтому мне пришлось предложить его в качестве ответа, хотя, по-видимому, вам разрешено комментировать свои собственные ответы. B.Kaatz 9 лет назад 2
0
DaveParillo

Запустите другой экземпляр netcat на компьютере B. Просто сделайте то же, что вы сделали на компьютере A, но обслуживайте его с B. Дайте новому серверу новый порт.

Я не хочу делать то же самое, я хочу изменить команды на что-то другое (я не уверен, если это возможно) ... посмотрите на жирный текст в моем вопросе. Я имею в виду, что я не хочу обслуживать из B. Я хочу, чтобы A был сервером, прослушивающим ввод ... и затем я хочу отправить содержимое файла из не слушающего B в прослушивающее A. Phil 14 лет назад 0
Это не так, как работает Netcat. DaveParillo 14 лет назад 0
Как видно из принятого ответа - да, именно так может работать netcat. Phil 14 лет назад 1
Ты прав. Я узнаю что-то новое каждый день! DaveParillo 14 лет назад 0
0
mark

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

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

Должно работать тоже;)

Похожие вопросы