Один сервер ftp в python

Возможно ли иметь одну строку в python для простого FTP-сервера? Я хотел бы иметь возможность сделать это как быстрый и временный способ передачи файлов в ящик Linux без установки ftp-сервера. Предпочтительно использовать встроенные библиотеки python, чтобы ничего не было установлено.

Ответ 1

Обязательный Twisted пример:

twistd -n ftp

И, вероятно, полезно:

twistd ftp --help

Usage: twistd [options] ftp [options].
WARNING: This FTP server is probably INSECURE do not use it.
Options:
  -p, --port=           set the port number [default: 2121]
  -r, --root=           define the root of the ftp-site. [default:
                    /usr/local/ftp]
  --userAnonymous=  Name of the anonymous user. [default: anonymous]
  --password-file=  username:password-style credentials database
  --version         
  --help            Display this help and exit.

Ответ 2

Отъезд pyftpdlib от Giampaolo Rodola. Это один из лучших ftp-серверов для python. Он используется в google chromium (их браузере) и базаре (система управления версиями). Это самая полная реализация на Python для RFC-959 (ака: спецификация реализации сервера FTP).

Из командной строки:

python -m pyftpdlib

Альтернативно 'my_server.py':

#!/usr/bin/env python

from pyftpdlib import servers
from pyftpdlib.handlers import FTPHandler
address = ("0.0.0.0", 21)  # listen on every IP on my machine on port 21
server = servers.FTPServer(address, FTPHandler)
server.serve_forever()

На веб-сайте больше примеров, если вам нужно что-то более сложное.

Чтобы получить список параметров командной строки:

python -m pyftpdlib --help

Обратите внимание, что если вы хотите переопределить или использовать стандартный ftp-порт, вам понадобятся права администратора (например, sudo).

Ответ 3

Почему вместо этого вы не используете сервер с одной строкой HTTP?

python -m SimpleHTTPServer 8000

будет обслуживать содержимое текущего рабочего каталога через HTTP на порту 8000.

Если вы используете Python 3, вы должны написать

python3 -m http.server 8000

Смотрите документы SimpleHTTPServer для 2.x и http.server docs для 3.x.

Кстати, в обоих случаях параметр порта необязателен.

Ответ 4

Ответы, приведенные выше, предполагали, что ваш дистрибутив Python будет иметь некоторые сторонние библиотеки, чтобы достичь цели "один liner python ftpd", но это не тот случай, о котором спрашивал @zio, также SimpleHTTPServer включает в себя веб-интерфейс broswer для загрузки файлов, это не достаточно быстро.

Python не может самостоятельно выполнять ftpd, но вы можете использовать nc:

nc (netcat) - это в основном встроенный инструмент из любых UNIX-подобных систем (даже встроенных систем), поэтому он префект для " быстрого и временного способа передачи файлов".

шаг-1, на стороне приемника, выполните:
nc -l 12345 | tar -xf -
будет прослушивать порт 12345, ожидая данных.

шаг-2, на стороне отправителя:
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ... | nc $RECEIVER_IP 12345

Вы также можете поместить pv в центр, чтобы отслеживать ход передачи:
tar -cf - ALL_FILES_YOU_WANT_TO_SEND ...| pv | nc $RECEIVER_IP 12345

После завершения передачи обе стороны nc автоматически прекратятся,

и выполненная работа.

Ответ 5

Для пользователей pyftpdlib. Я нашел это на веб-сайте pyftpdlib. Это создает анонимный ftp с возможностью записи в вашу файловую систему, поэтому, пожалуйста, используйте их с должной осторожностью. Дополнительные функции доступны под капотом для лучшей безопасности, поэтому просто взгляните:

sudo pip install pyftpdlib

python -m pyftpdlib -w

Может оказаться полезным для тех, кто пытался использовать устаревший метод выше.

sudo python -m pyftpdlib.ftpserver

Ответ 6

Установка:

pip install twisted

Затем код:

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

reactor.listenTCP(21, FTPFactory(Portal(FTPRealm('./'), [AllowAnonymousAccess()])))
reactor.run()

Получите глубже:

http://twistedmatrix.com/documents/current/core/examples/

Ответ 8

Я не знаю об однострочном FTP-сервере, но если вы делаете

python -m SimpleHTTPServer

Он будет запускать HTTP-сервер на 0.0.0.0:8000, обслуживая файлы из текущего каталога. Если вы ищете способ быстро получить файлы с помощью окна Linux с помощью веб-браузера, вы не можете его бить.