🗃️
ftplibでFTPサーバをPythonで作る
概要
ftplib
で簡単にPythonでサーバを建てられるので、やり方を説明します。
準備
pyftpdlib
をpipにてインストールします。
pip install pyftpdlib
ソースコード
main.py
import pyftpdlib.authorizers
import pyftpdlib.handlers
import pyftpdlib.servers
from pyftpdlib.handlers import FTPHandler
class Handler(FTPHandler):
def on_file_sent(self, file):
print("send file!",file)
#super(Handler, self).ftp_RETR(file)
def on_file_received(self, file):
print("received file!",file)
#super(Handler, self).ftp_RETR(file)
authorizer = pyftpdlib.authorizers.DummyAuthorizer()
authorizer.add_user('user', 'password', '/root/ftp1', perm='elradfmw')
handler = Handler
print(handler.passive_ports)
handler.authorizer = authorizer
server = pyftpdlib.servers.FTPServer(("127.0.0.1", 21), handler)
server.serve_forever()
Port番号などの設定
pyftpdlib.servers.FTPServer(("127.0.0.1", 21), handler)
などの行で待ち受けるPort番号などが設定できます。この場合は、21番ポートで待ち受けています。
その他に、FTPではpassive_portという設定も存在し、これは待受ポートで要求を受けたあと、ファイルのやり取りは別のポートで行う設定になります。
この設定はFTPHandler.passive_ports
などで設定可能です。
他にもタイムアウト時間の設定などがFTPHandler
で可能なようです。
ファイルを取得した場合などの処理を記載したい場合
FTPHandler
というクラスを継承して関数を上書きすることにより実装するようです。
上記の例ではon_file_sent(self, file):
とon_file_received(self, file):
を上書きして処理を追加しています。
その他にもログインなど、いろいろな処理を追記できるようです。
感想
標準的にサポートされていると色々楽ですね。
Discussion
申し訳ございません。
pyftpdlib
は標準で利用できないためインストールする必要がありました。修正をさせていただきましたので、よろしくお願いいたします。