def init_ftp_server():
	#实例化虚拟用户,ftp验证首要条件
	authorizer = DummyAuthorizer()
	"""
		读权限:
			- "e" = 改变文件目录
			- "l" = 列出文件 (LIST, NLST, STAT, MLSD, MLST, SIZE, MDTM, commands)
			- "r" = 从服务器接受文件 (RETR commands)
		写权限:
			- "a" = 文件上传 (APPE commands)
			- "d" = 删除文件 (DELE, RMD commands)
			- "f" = 文件重命名 (RNFR, RNTO commands)
			- "m" = 创建文件(MKD commands)
			- "w" = 写权限 (STOP, STOU, commands)
			- "M" = 文件传输模式 (SITE  CHMOD commands)
	"""

	if enable_anonymous:
		#添加匿名用户
		authorizer.add_anonymous(anonymous_path)

	#读取配置中用户并授权
	for user in user_list:
		name, passwd, permit, homedir = user
		try:
			authorizer.add_user(name, passwd, homedir, perm=permit)
		except:
			print("配置文件错误请检查是否匹配了相应的用户名, 密码, 权限, 路径")
			print(user)

	dtp_handler = ThrottledDTPHandler

	#上传、下载速度
	dtp_handler.read_limit = max_download
	dtp_handler.write_limit = max_upload
	#初始化ftp句柄
	handler = FTPHandler
	handler.authorizer = authorizer

	#是否开启记录
	if enable_logging:
		logging.basicConfig(filename='pyftp.log',level=logging.INFO)

	#登录时显示的标题
	handler.banner = welcom_banner
	handler.masquerade_address =masquerade_address
	#主动模式和被动模式
	handler.passive_ports = range(passive_ports[0], passive_ports[1])

	#监听的IP和端口
	address = (ip, port)
	server = FTPServer(address, handler)
	#设置最大连接数
	server.max_cons = max_cons
	server.max_cons_pre_ip = max_pre_ip
	#开启
	server.serve_forever()
Exemple #2
0
def main():
  # auth to managing users
  authorizer = DummyMD5Authorizer()

  # add users
  hash = md5(b('12345')).hexdigest()
  authorizer.add_user('user', hash, '/home/leo/FTPRoot', perm='elradfmwM')

  handler = SimpleHandler 
  handler.authorizer = authorizer

  # loggin setting
  
  handler.banner = "Hello , my friend"
  address = ('', 2200)
  server = FTPServer(address, handler)
  server.max_cons = 256
  server.max_cons_pre_ip = 5
  server.serve_forever()