Python的網絡編程[1] -> FTP 協議[1] -> 使用 pyftplib 建立 FTP 服務器


使用 pyftplib 建立 FTP 服務器


pyftplib 主要用於建立 FTP Server,與 ftplib 建立的 Client 進行通信。

快速導航

1. 模塊信息

2. 建立 FTP 服務器

 

1 模塊信息

1.1 servers模塊

用於建立服務器

1.1.1 FTPServer()

類實例化:ftpServer = FTPServer(address, handler)

類的功能: 用於建立服務器

傳入參數: address, handler

address: tuple類型,包含ip地址和端口號

handler: type類型,可直接傳入FTPHandler 模塊

返回參數: ftpServer

1.1.1.1 serve_forever()方法

函數調用: ftpServer.serve_forever()

函數功能:用於啟動服務器

傳入參數:

返回參數:

1.1.1.2 close_all()方法

函數調用: ftpServer.close_all()

函數功能:用於關閉服務器

傳入參數:

返回參數:

1.1.1.3 max_cons屬性

屬性調用: handler.max_cons = num

屬性功能:用於設置最大連接數

屬性參數: num

num: int類型

1.1.1.4 max_cons_per_ip屬性

屬性調用: handler.max_cons _per_ip = num

屬性功能:用於設置最多ip數

屬性參數: num

num: int類型

 

1.2 handlers模塊

用於建立句柄

1.2.1 FTPHandler()

handler = FTPHandler

用於建立服務器時傳入FTPServer

1.2.1.1 banner屬性

屬性調用: handler.banner = info

屬性功能:用於設置歡迎信息

屬性參數: info

info: str類型,歡迎詞字符串

1.2.1.2 authorizer屬性

屬性調用: handler.authorizer = authorizer

屬性功能:用於設置許可用戶信息

屬性參數: authorizer

authorizer: instance類型,由DummyAuthorizer生成

1.2.1.3 passive_ports屬性

屬性調用: handler.passive_ports = range(from_port, to_port)

屬性功能: 被動模式端口范圍,該范圍需大於最大ip連接數,否則可能造成連接失敗

屬性參數: range(from_port, to_port)

from_port: int類型,端口范圍起始點

to_port: int類型,端口范圍結束點,比實際最大端口大1

 

1.3 authorizers模塊

用於授權用戶等操作

1.3.1 DummyAuthorizer()

類實例化:authorizer = DummyAuthorizer()

類的功能:用於創建權限類實例,進行用戶信息授權

傳入參數:

返回參數: authorizer

1.3.1.1 add_user()方法

函數調用: authorizer.add_user(username, password, homedir, perm=’elr’, msg_login=’Login successful.’, msg_quit=’Goodbye.’)

函數功能: 用於添加許可用戶及其信息

傳入參數: username, password, homedir, perm, msg_login, msg_quit

username: str類型,用戶名

password: str類型,密碼

homedir:str類型,路徑

perm: str類型,權限

msg_login: str類型,登錄信息

msg_quit: str類型,離開信息

返回參數:

關於權限,

讀權限:e 改變文件目錄,l 列出文件,r 從服務器接收文件

寫權限:a 文件上傳,d 刪除文件,f 文件重命名,m 創建文件,w 寫權限 ,M 文件傳輸模式(通過FTP設置文件權限 )

1.3.1.2 add_anonymous()方法

函數調用: authorizer. anonymous(homedir, perm=’elr’, msg_login=’Login successful.’, msg_quit=’Goodbye.’)

函數功能: 用於添加匿名登錄許可

傳入參數: homedir, perm, msg_login, msg_quit

homedir:str類型,路徑

perm: str類型,權限

msg_login: str類型,登錄信息

msg_quit: str類型,離開信息

返回參數:

 

2 FTP的服務器建立過程

服務器建立步驟主要有:

(1)      設定IP和端口號(常用21),生成handler

(2)      生成ftp實例,設置banner;

(3)      添加用戶信息或匿名授權;

(4)      serve_forever()開啟服務器;

(5)      close_all()函數結束服務器。

 1 from pyftpdlib.servers import FTPServer
 2 from pyftpdlib.handlers import FTPHandler
 3 from pyftpdlib.authorizers import DummyAuthorizer
 4 
 5 class FTP_Server():
 6     def __init__(self):
 7         handler = FTPHandler        # handler is a class(type is 'type')
 8         ip = '127.0.0.10'
 9         port = 21
10         address = (ip, port)
11         self.ftpServer = FTPServer(address, handler)
12         self.ftpServer.max_cons = 150           # max connection numbers
13         self.ftpServer.max_cons_per_ip = 10     # max connection ip numbers
14         print('FTP server created')
15         print(self.ftpServer)
16         # Change welcome info when client logined in
17         self.ftpServer.handler.banner = 'Welcome to my FTP server.'
18         # Passive port number should be more than max ip number, otherwise may course connection failed
19         self.ftpServer.handler.passive_ports = range(2000, 2333)
20 
21         # User info bin
22         self.userInfo = {'User_1': {'user_name': 'Admin',
23                                     'password': '888888',
24                                     'home_path': '.\\FTPServerFile',
25                                     'permission': 'elradfmwM',
26                                     'msg_login': 'Admin login successful',
27                                     'msg_quit': 'Goodbye, admin.'},
28                          'User_2': {'user_name': 'Customer',
29                                     'password': '777777',
30                                     'home_path': '.\\FTPServerFile',
31                                     'permission': 'elr',
32                                     'msg_login': 'Customer login successful',
33                                     'msg_quit': 'Goodbye, customer.'}}
34 
35     def addUser(self):
36         # Add users method_1
37         authorizer = DummyAuthorizer()
38         # Add new user, user name, password, home path('.' is current root path), permission level
39         for user in self.userInfo.values():
40             authorizer.add_user(user['user_name'], user['password'], user['home_path'],
41                                 perm=user['permission'], msg_login=user['msg_login'], msg_quit=user['msg_quit'])
42         self.ftpServer.handler.authorizer = authorizer
43 
44         # Add users method_2
45         # Mark here: handler.authorizer also generate from DummyAuthorizer inside Handler module
46         # for user in self.userInfo.values():
47         #    self.ftpServer.handler.authorizer.add_user(user['user_name'], user['password'], user['home_path'],
48         #                        perm=user['permission'], msg_login=user['msg_login'], msg_quit=user['msg_quit'])
49 
50         # Add anonymous
51         authorizer.add_anonymous('.\\FTPServerFile',
52                                  perm='elr', msg_login='anonymous login successful', msg_quit='Goodbye, anonymous.')
53 
54     def run(self):
55         print('FTP server start')
56         self.ftpServer.serve_forever()
57 
58     def stop(self):
59         self.ftpServer.close_all()
60 
61 ftp_server = FTP_Server()
62 ftp_server.addUser()
63 ftp_server.run()

 Note:

第 19 行:被動模式設置的端口數量應大於最大端口數,否則會產生報錯

第 38-48 行:添加用戶即可以通過 DummyAuthorizer 類生成一個新的實例進行設置,再傳給 ftp 實例(42行),也可以直接通過 ftpServer.handler.authorizer 獲取原本的 DummyAuthorizer 實例進行設置。

 

相關閱讀


1. ftp 客戶端

 

參考鏈接


http://www.cnblogs.com/huangxm/p/6274645.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM