Возможно ли иметь одну строку в python для простого FTP-сервера? Я хотел бы иметь возможность сделать это как быстрый и временный способ передачи файлов в ящик Linux без установки ftp-сервера. Предпочтительно использовать встроенные библиотеки python, чтобы ничего не было установлено.
Один сервер 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()
Получите глубже:
Ответ 7
Хороший список инструментов в
http://www.willdonnelly.net/blog/file-transfer/
Я использовал woof сам в ряде случаев. Очень приятно.
Ответ 8
Я не знаю об однострочном FTP-сервере, но если вы делаете
python -m SimpleHTTPServer
Он будет запускать HTTP-сервер на 0.0.0.0:8000, обслуживая файлы из текущего каталога. Если вы ищете способ быстро получить файлы с помощью окна Linux с помощью веб-браузера, вы не можете его бить.