Как использовать Netcat для быстрой передачи файлов между компьютерами Linux
Нет недостатка в программных решениях, которые помогут вам передавать файлы между компьютерами. Однако если вы делаете это очень редко, типичные решения, такие как NFS и SFTP (через OpenSSH), могут оказаться излишними. Более того, эти службы постоянно открыты для приема и обработки входящих соединений. Неправильная настройка может сделать ваше устройство уязвимым для определенных атак.
netcat
, так называемый «швейцарский армейский нож TCP/IP», может использоваться в качестве специального решения для передачи файлов через локальные сети или Интернет. Это также полезно для передачи данных в/из ваших виртуальных машин или контейнеров, если они не включают эту функцию «из коробки». Вы даже можете использовать его как механизм копирования и вставки между двумя устройствами.
Читайте также: Как безопасно передавать файлы в Linux с помощью SCP
Как установить netcat в различных дистрибутивах Linux
Большинство операционных систем на базе Linux поставляются с предустановленной функцией. Откройте терминал и введите:
Если команда не найдена, установите пакет, содержащий netcat, вариант BSD. Существует также версия netcat от GNU, которая содержит меньше функций. Вам нужен netcat как на компьютере, получающем файл, так и на том, который его отправляет.
В дистрибутивах на базе Debian, таких как Ubuntu или Linux Mint, установите утилиту с помощью:
Contents
Как установить netcat в различных дистрибутивах Linux
> netcat-openbsd
С openSUSE, следуйте инструкциям на этой странице , в зависимости от вашего дистрибутива.
В Arch Linux введите следующую команду:
sudo pacman -S openbsd-netcat
К сожалению, семейство RedHat не включает варианты netcat для BSD или GNU. По какой-то странной причине они решили использовать nmap-ncat. Несмотря на схожесть, некоторые параметры командной строки недоступны, например -N
. Это означает, что вам придется заменить строку, например nc -vlN 1234 > nc
, на nc -vl 1234 > nc
, чтобы она работала в RedHat/Fedora.
Чтобы установить ncat на RedHat:
sudo yum install nmap-ncat
И в Fedora:
sudo dnf install nmap-ncat
Как использовать netcat для передачи файлов между компьютерами Linux
На компьютере, который получит файл, найдите IP-адрес, используемый в вашей внутренней сети.
После «src» вы увидите IP-адрес устройства во внутренней сети. Если по какой-то причине результаты неактуальны, вы также можете попробовать:
На скриншоте, предложенном в качестве примера, IP — 10.11.12.10.
На том же компьютере, который получит файл, введите следующую команду:
nc -vl 44444 > pick_desired_name_for_received_file
И на компьютере, который отправит файл, введите это, заменив 10.11.12.10 на обнаруженный ранее IP-адрес:
nc -N 10.11.12.10 44444 < /path/to/file/you/want/to/send
Пути к каталогам и файлам могут быть абсолютными или относительными. Абсолютный путь — «/home/user/Pictures/file.png». Но если вы уже находитесь в папке «/home/user», вы можете использовать относ
Как использовать netcat для передачи файлов между компьютерами Linux
>В первой команде использовались два параметра:
-v
и
-l
.
-v
делает вывод более подробным, печатая более подробную информацию, чтобы вы могли видеть, что происходит.
-l
заставляет утилиту «прослушивать» порт 44444, по сути открывая канал связи на принимающем устройстве. Если у вас активны правила брандмауэра, убедитесь, что они не блокируют соединение.
Во второй команде -N
заставляет netcat закрыться после завершения передачи.
Обычно netcat выводит на терминал все, что получает. >
создает перенаправление для этого вывода. Вместо того, чтобы печатать его на экране, он отправляет весь вывод в файл, указанный после >
. <
работает наоборот: принимает ввод из указанного файла вместо ожидания ввода с клавиатуры.
Если вы используете приведенные выше команды без перенаправлений, например, nc -vl 44444
и nc -N 10.11.12.10 44444
, вы создаете элементарный «чат» между двумя устройствами. Если вы напишете что-то в одном терминале и нажмете Enter, оно появится на другом компьютере. Вот как вы можете копировать и вставлять текст с одного устройства на другое. Нажмите Ctrl+ D(на отправителе) или Ctrl+ C(в любом месте), чтобы закрыть соединение.
Оптимизация передачи файлов
При отправке больших файлов их можно сжимать на лету, чтобы ускорить передачу.
На принимающей стороне введите:
nc -vl 44444 | gunzip > pick_desired_name_for_file
И в отправителе введите следующее, заменив 10.11.12.10 IP-адресом вашего принимающего устройства:
gzip -c /path/to/file/you/want/to/send | nc -N 10.11.12.10 44444
Каталоги отправки и получения
Очевидно, что иногда вам может потребоваться отправить несколько файлов одновременно, например, целый каталог. Следующее также сжимает их перед отправкой по сети.
На принимающей стороне используйте следующую команду:
На отправляющем устройстве используйте:
tar czp /path/to/directory/to/send | nc -N 10.11.12.10 44444
Заключение
Предпочтительно использовать это только в своей локальной сети. Основная причина заключается в том, что сетевой трафик не зашифрован. Если вы отправите это на сервер через Интернет, ваши пакеты данных могут быть перехвачены по сетевому пути. Но если передаваемые вами файлы не содержат конфиденциальных данных, это не является серьезной проблемой. Однако на серверах обычно SSH предварительно настроен для приема безопасных FTP-соединений, и вместо этого вы можете использовать SFTP для передачи файлов.
Оптимизация передачи файлов
Каталоги отправки и получения
Заключение