Одна линия ftp-сервер в python



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

392   9  

9 ответов:

обязательное витая пример:

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.

проверить pyftpdlib от Джампаоло Rodola. Это один из самых лучших ftp-серверов для python. Он используется в Google chromium (их браузер) и bazaar (система управления версиями). Это наиболее полная реализация на Python для RFC-959 (aka: спецификация реализации 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).

почему бы не использовать одну строку HTTP сервер?

python -m SimpleHTTPServer 8000

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

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

python3 -m http.server 8000

посмотреть SimpleHTTPServer модуль "документы" для 2.x и http.сервер документы для 3.x.

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

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

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

nc Это в основном встроенный инструмент из любых 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 выйдет автоматически, и работа сделана.

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

sudo pip install pyftpdlib

python -m pyftpdlib -w

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

sudo python-m pyftpdlib.FTP-сервера

установка:

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/

более простым решением будет библиотека пользователя pyftpd. Эта библиотека позволяет вращать Python FTP server в одну строку. Он не устанавливается по умолчанию, но мы можем установить его с помощью простой команды apt

apt-get install python-pyftpdlib

теперь из каталога, который вы хотите обслуживать, просто запустите модуль pythod

python -m pyftpdlib -p 21 

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

python -m SimpleHTTPServer

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

хороший список инструментов

http://www.willdonnelly.net/blog/file-transfer/

Я сам использовал гав в нескольких случаях. Очень симпатичный.

Comments

    Ничего не найдено.