Ви можете отримати FTP-сервер так просто, як два два три, використовуючи pyftpdlib :
- Встановити за допомогою pip
pip install --user pyftpdlib
- Запустіть
python -m pyftpdlib
, додайте, -w
якщо ви хочете також отримати доступ до запису.
- немає кроку третього :)
Тепер у вас є ftp-сервер, на якому ви можете ввійти, щоб анонімно ділитися домашнім каталогом. Це мається на увазі більше як тест модуля, але він робить те, що написано на бляшанці.
Ця команда:
python -m pyftpdlib --directory=FTP --port=2121 --write
буде обслуговуватися без кореневих привілеїв на порту 2121 та надавати доступ для запису анонімним користувачам. Він також використовуватиме каталог FTP
у поточному робочому каталозі замість вашого будинку. Введіть, python ftpserver.py --help
щоб отримати інформацію про всі параметри.
- увійдіть до нього за адресою
anonymous@localhost:2121/
Зауважте, що це програмне забезпечення випускається на умовах ліцензії MIT , а це означає, що ви можете робити в основному все, що завгодно. Прочитайте текст ліцензії, це лише кілька рядків, і знайте свої права.
Тепер цей скрипт не підтримує ім’я користувача та пароль, як частину його самостійної функціональності (я думаю, з міркувань безпеки).
Тому я додав цю функцію:
Тепер у вас є, крім усіх згаданих нами параметрів, параметри командного рядка
--username=USERNAME
і --password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Знову ж таки, використовуйте, --help
щоб побачити їх усіх.
Це має бути таким же простим, як це виходить.
Я також написав для цього невеличке гуї:
Завантажте його тут (оновлено у версії 6)
Мені шкода, що це 3999 рядків, але це зробить все, що робить оригінал. І я хотів зберегти все це в одному файлі. Коли він запускається без будь-яких параметрів (тобто зробіть його виконуваним і двічі клацніть по ньому, або створіть для нього пускову панель ), він запустить вам невеликий gui для налаштування вашого сервера. Ви все ще можете імпортувати його як модуль python або використовувати вищевказаний командний рядок fu.
Відомі проблеми:
Я не переймався чим-небудь, крім порту 2121. Це повинно бути простим, тому що порт, який налаштовується, вимагає складного поводження з помилками, з яким я не хочу, щоб користувач турбувався. 2121 завжди повинен працювати добре.
Він не попередить вас, як це робить командний рядок, про використання небезпечної конфігурації. Тобто не встановити пароль або щось подібне.
РЕДАКТУВАТИ: з моменту API pyftpdlib
та ftpserver.py
зміни (і посилання пабітки на ubuntu відсутнє); більшість вищезазначених публікацій більше не працює. Для (2014) версії pyftpdlib
, використовуйте цей скрипт ( ftpserver-cli.py
), щоб досягти того самого, як описано вище:
#!/usr/bin/env python
# ftpserver-cli.py
import sys
sys.path.append("/path/to/pyftpdlib-svn") # enter your proper path here
import argparse
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
def processCmdLineOptions():
global optparser
optparser = argparse.ArgumentParser(description="ftpserver-cli",
formatter_class=argparse.RawDescriptionHelpFormatter)
optparser.add_argument('-u', '--username', action='store', type=str,
default="user", help="username")
optparser.add_argument('-p', '--password', action='store', type=str,
default="12345", help="password")
optparser.add_argument('-t', '--port', action='store', type=int,
default="21", help="port")
optparser.add_argument('-d', '--directory', action='store', type=str,
default="/home/stefano/Projekte/", help="port")
optargs = optparser.parse_args(sys.argv[1:]) #(sys.argv)
return optargs
optargs = processCmdLineOptions()
print("Using: user: %s pass: %s port: %d dir: %s" % (optargs.username, optargs.password, optargs.port, optargs.directory))
authorizer = DummyAuthorizer()
authorizer.add_user(optargs.username, optargs.password, optargs.directory, perm="elradfmw")
#authorizer.add_anonymous("/home/nobody")
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(("127.0.0.1", optargs.port), handler)
server.serve_forever()
зателефонуйте:
$ sudo python ftpserver-cli.py --directory=/tmp/srvtest
Using: user: user pass: 12345 port: 21 dir: /tmp/srvtest
[I 14-03-02 21:40:57] >>> starting FTP server on 127.0.0.1:21, pid=19286 <<<
...