Передача файлов с помощью встроенного HTTP-сервера Python

Рекомендованная передача HTTP по Python

Необходимость передачи файлов по сети возникает часто. Системы 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:

Запуск HTTP-сервера

Обратите внимание на IP-адрес, используемый отправляющим устройством.

IP-адрес передачи HTTP по протоколу Python

Узнайте, какая версия Python установлена, с помощью следующих команд:

На том же компьютере измените рабочий каталог на тот, который содержит файлы, которые вы переносите. Имейте в виду, что все содержимое вашего текущего рабочего каталога может быть доступно любому пользователю в вашей сети (или в Интернете, если отправляющая машина имеет общедоступный IP-адрес), пока работает HTTP-сервер Python.

Например:

Теперь вы можете запустить HTTP-сервер. Для Python 2.x используйте модуль SimpleHTTPServer:

Или http.server в случае Python 3.x:

Оба варианта по умолчанию прослушивают порт 8000, хотя вы можете явно указать другой номер порта после имени модуля.

Примечание. Если вы выберете порт ниже 1024, требуются права root.

Скачивание ваших файлов

На принимающей машине вы можете использовать любой HTTP-клиент для загрузки файлов. Если вы используете графическую среду, браузер зачастую удобнее, чем утилиты командной строки. Просто перейдите к http: // IP_ADDRESS: 8000, где "IP_ADDRESS" - это IP-адрес компьютера-отправителя, и щелкните нужные файлы, чтобы загрузить их.

Браузер передачи HTTP на Python

Кроме того, вы можете использовать Wget или cURL для получения файлов. У вас уже должен быть установлен один или оба из них. В противном случае мы предлагаем установить Wget, так как он более удобен для пользователя и поддерживает загрузку целых каталогов.

Для Debian и Ubuntu:

Для RHEL и CentOS 6/7:

Для Fedora и RHEL / CentOS 8:

Использование Wget

Чтобы загрузить один файл с помощью Wget, просто вызовите Wget, а затем укажите URL-адрес файла, который вы хотите загрузить.

Wget для передачи HTTP-запросов на Python

Вы также можете использовать Wget для рекурсивной загрузки всего каталога, добавив флаг командной строки -r.

Python Http Transfer Wget Recursive (Рекурсивный Wget для передачи Http)

Использование cURL

По умолчанию curl пытается распечатать содержимое файла на вашем терминале. Поэтому, чтобы вместо этого сохранить файл, укажите имя файла с помощью флага -o.

Изгиб Python Http Transfer

Заключение

Функциональность HTTP в стандартной библиотеке Python обеспечивает простой, но быстрый и удобный способ передачи файлов, идеально подходящий для некоторых сценариев. Но имейте в виду, что, поскольку это простой HTTP без шифрования и аутентификации, вы должны быть осторожны, чтобы не раскрывать конфиденциальные файлы.

2 комментария

  1. Это действительно здорово, никогда не думал об этом, спасибо за статью

  2. Я работаю над проектом с парой моих коллег. Я хотел бы использовать простой http-сервер Python, чтобы делиться с ними файлами проекта через Интернет.

    Итак, я открываю терминал и перехожу в каталог своего проекта. Затем я набираю следующее, чтобы запустить сервер:

    python3 -m http.server 8080

    запуская ifconfig с другого терминала, я, конечно же, получаю свой локально назначенный IP-адрес. Что при тестировании с ноутбука с Windows я могу получить доступ к файлам и загрузить их через свой браузер, используя:

    http://192.168.1.199:8080

    Я не могу отправить эти файлы по стандартной электронной почте из-за ограничений на размер вложений. Поэтому я хотел бы иметь возможность раскрутить этот сервер, чтобы сообщить сотруднику 1, "файл (ы) доступны", и дать им возможность загружать их через Интернет.

    Что мне нужно изменить, чтобы эти файлы стали доступны в Интернете? Я благодарен за любую помощь, которую я могу получить по этому поводу. Моя основная ОС - это Kali и Parrot Sec OS.

Комментарии закрыты.