Необходимость передачи файлов по сети возникает часто. Системы GNU / Linux поддерживают несколько протоколов и инструментов для этого, некоторые из которых предназначены для постоянного совместного использования файлов (например, SMB, AFP и NFS), а другие, такие как Secure Copy (SCP), используются для быстрого ручного управления и написания сценариев. передача файлов. Среди них - протокол передачи гипертекста (HTTP), универсальный и повсеместный протокол, на котором основана всемирная паутина.
Python, который по умолчанию включен в большинство дистрибутивов Linux, предоставляет простые HTTP-серверы через модули "SimpleHTTPServer" и "http.server". Первый находится в стандартной библиотеке Python 2, а второй включен в Python 3. Эти легкие HTTP-серверы не требуют отдельной установки и могут быть немедленно запущены с помощью одной команды.
Установка Python
Скорее всего, ваша система включает хотя бы одну версию Python, но если это не так, установите Python 3 с помощью собственного диспетчера пакетов.
Например, в Debian и Ubuntu:
sudoapt updatesudoaptinstall-y python3
Запуск HTTP-сервера
Обратите внимание на IP-адрес, используемый отправляющим устройством.
ip a s
Узнайте, какая версия Python установлена, с помощью следующих команд:
python - версия python3 - версия
На том же компьютере измените рабочий каталог на тот, который содержит файлы, которые вы переносите. Имейте в виду, что все содержимое вашего текущего рабочего каталога может быть доступно любому пользователю в вашей сети (или в Интернете, если отправляющая машина имеет общедоступный IP-адрес), пока работает HTTP-сервер Python.
cd/path/to/files/
Например:
cd/home/user/Documents/
Теперь вы можете запустить HTTP-сервер. Для Python 2.x используйте модуль SimpleHTTPServer:
python - m SimpleHTTPServer
Или http.server в случае Python 3.x:
python3 - m http.server
Оба варианта по умолчанию прослушивают порт 8000, хотя вы можете явно указать другой номер порта после имени модуля.
python -m SimpleHTTPServer [port]python3 -m http.server [port]
Примечание. Если вы выберете порт ниже 1024, требуются права root.
Скачивание ваших файлов
На принимающей машине вы можете использовать любой HTTP-клиент для загрузки файлов. Если вы используете графическую среду, браузер зачастую удобнее, чем утилиты командной строки. Просто перейдите к http: // IP_ADDRESS: 8000, где "IP_ADDRESS" - это IP-адрес компьютера-отправителя, и щелкните нужные файлы, чтобы загрузить их.
Кроме того, вы можете использовать Wget или cURL для получения файлов. У вас уже должен быть установлен один или оба из них. В противном случае мы предлагаем установить Wget, так как он более удобен для пользователя и поддерживает загрузку целых каталогов.
Для Debian и Ubuntu:
sudoaptinstallwget
Для RHEL и CentOS 6/7:
sudoyum installwget
Для Fedora и RHEL / CentOS 8:
sudodnfinstallwget
Использование Wget
Чтобы загрузить один файл с помощью Wget, просто вызовите Wget, а затем укажите URL-адрес файла, который вы хотите загрузить.
wget http://IP_ADDRESS:8000/filename
Вы также можете использовать Wget для рекурсивной загрузки всего каталога, добавив флаг командной строки -r
.
wget-r http://IP_ADDRESS:8000/
Использование cURL
По умолчанию curl пытается распечатать содержимое файла на вашем терминале. Поэтому, чтобы вместо этого сохранить файл, укажите имя файла с помощью флага -o
.
curl http://IP_ADDRESS:8000/filename -o filename
Заключение
Функциональность HTTP в стандартной библиотеке Python обеспечивает простой, но быстрый и удобный способ передачи файлов, идеально подходящий для некоторых сценариев. Но имейте в виду, что, поскольку это простой HTTP без шифрования и аутентификации, вы должны быть осторожны, чтобы не раскрывать конфиденциальные файлы.
2 комментария
Комментарии закрыты.
Это действительно здорово, никогда не думал об этом, спасибо за статью
Я работаю над проектом с парой моих коллег. Я хотел бы использовать простой http-сервер Python, чтобы делиться с ними файлами проекта через Интернет.
Итак, я открываю терминал и перехожу в каталог своего проекта. Затем я набираю следующее, чтобы запустить сервер:
python3 -m http.server 8080
запуская ifconfig с другого терминала, я, конечно же, получаю свой локально назначенный IP-адрес. Что при тестировании с ноутбука с Windows я могу получить доступ к файлам и загрузить их через свой браузер, используя:
http://192.168.1.199:8080
Я не могу отправить эти файлы по стандартной электронной почте из-за ограничений на размер вложений. Поэтому я хотел бы иметь возможность раскрутить этот сервер, чтобы сообщить сотруднику 1, "файл (ы) доступны", и дать им возможность загружать их через Интернет.
Что мне нужно изменить, чтобы эти файлы стали доступны в Интернете? Я благодарен за любую помощь, которую я могу получить по этому поводу. Моя основная ОС - это Kali и Parrot Sec OS.