이번 글은 FTP 서버를 파이썬으로 구현하는 방법을 주로 소개하는데, 편집자는 꽤 괜찮다고 생각해서 공유하고 참고하겠습니다. 에디터를 따라가며 살펴보겠습니다
FTP 서비스의 액티브 모드와 패시브 모드
시작하기 전에 FTP 서비스의 액티브 모드와 패시브 모드에 대해 알아보겠습니다. FTP. 이들 간의 차이점은 두 개의 그림으로 더 명확하게 표시될 수 있습니다.
활성 모드:
활성 모드 작업 프로세스:
1. 클라이언트는 1024
2보다 큰 포트인 권한이 없는 임의의 포트 N을 사용하여 서버 포트 21에 대한 연결을 시작합니다. 1;
3. 서버는 포트 20을 통해 클라이언트의 N+1 포트에 적극적으로 연결됩니다.
액티브 모드의 장점:
서버 구성이 간단하여 서버 보안 관리에 유리합니다. 서버는 포트 21만 열면 됩니다.
활성 모드 단점:
클라이언트에 방화벽이 켜져 있거나 클라이언트가 인트라넷(NAT 게이트웨이 뒤)에 있는 경우 서버에서 클라이언트 포트로의 연결이 시작됩니다. 실패할 수 있음
수동 모드:
수동 모드 작업 프로세스:
클라이언트는 다음을 통해 서버의 포트 21에 연결합니다. 임의의 비특권 포트
2. 서버는 비특권 포트를 패시브 포트로 오픈하고 이를 클라이언트에 반환합니다
3. 클라이언트는 비특권 포트를 사용하여 서버의 패시브 포트에 적극적으로 연결합니다. + 1 포트
Passive 모드의 단점:
서버 구성 관리가 약간 복잡하여 보안에 도움이 되지 않습니다. 대부분의 FTP 서비스 소프트웨어는 패시브 포트 범위를 수동으로 구성할 수 있습니다
패시브 모드의 장점: 클라이언트 네트워크 환경에 대한 요구 사항이 없습니다
FTP를 이해한 후 Python을 사용하여 FTP 서비스 구현을 시작하세요. 🎜>
준비 작업
사용된 Python 버전: python 3.4.3pyftpdlib 모듈 설치
pip3 install pyftpdlibFtpServer.py 코드 파일 생성코드
간단한 로컬 검증 구현
from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer #实例化虚拟用户,这是FTP验证首要条件 authorizer = DummyAuthorizer() #添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限) authorizer.add_user('user', '12345', '/home/', perm='elradfmw') #添加匿名用户 只需要路径 authorizer.add_anonymous('/home/huangxm') #初始化ftp句柄 handler = FTPHandler handler.authorizer = authorizer #监听ip 和 端口,因为linux里非root用户无法使用21端口,所以我使用了2121端口 server = FTPServer(('192.168.0.108', 2121), handler) #开始服务 server.serve_forever()
서비스 시작
$python FtpServer.py테스트 시도:다음 코드를 통해 패시브 포트를 추가하세요:
handler.passive_ports = range(2000, 2333)전체 코드:from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer #实例化虚拟用户,这是FTP验证首要条件 authorizer = DummyAuthorizer() #添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限) authorizer.add_user('user', '12345', '/home/', perm='elradfmw') #添加匿名用户 只需要路径 authorizer.add_anonymous('/home/huangxm') #初始化ftp句柄 handler = FTPHandler handler.authorizer = authorizer #添加被动端口范围 handler.passive_ports = range(2000, 2333) #监听ip 和 端口 server = FTPServer(('192.168.0.108', 2121), handler) #开始服务 server.serve_forever()서비스를 활성화하면 패시브 포트 정보를 볼 수 있습니다:
$ python FtpServer.py [I 2017-01-11 15:18:37] >>> starting FTP server on 192.168.0.108:2121, pid=46296 <<< [I 2017-01-11 15:18:37] concurrency model: async [I 2017-01-11 15:18:37] masquerade (NAT) address: None [I 2017-01-11 15:18:37] passive ports: 2000->2332
FTP 사용자 관리:
위의 연습을 통해 이미 FTP 서버는 정상적으로 작동할 수 있는데, FTP 사용자가 많이 필요한 경우에는 어떻게 될까요? 각 사용자가 한 번씩 작성해야 합니까? 사실 사용자 파일 user.py#用户名 密码 权限 目录 # root 12345 elradfmwM /home huangxm 12345 elradfmwM /home를 정의한 다음 파일을 탐색하고 #으로 시작하지 않는 줄을 user_list풀코드 :
from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer def get_user(userfile): #定义一个用户列表 user_list = [] with open(userfile) as f: for line in f: print(len(line.split())) if not line.startswith('#') and line: if len(line.split()) == 4: user_list.append(line.split()) else: print("user.conf配置错误") return user_list #实例化虚拟用户,这是FTP验证首要条件 authorizer = DummyAuthorizer() #添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限) #authorizer.add_user('user', '12345', '/home/', perm='elradfmw') user_list = get_user('/home/huangxm/test_py/FtpServer/user.conf') for user in user_list: name, passwd, permit, homedir = user try: authorizer.add_user(name, passwd, homedir, perm=permit) except Exception as e: print(e) #添加匿名用户 只需要路径 authorizer.add_anonymous('/home/huangxm') #初始化ftp句柄 handler = FTPHandler handler.authorizer = authorizer #添加被动端口范围 handler.passive_ports = range(2000, 2333) #监听ip 和 端口 server = FTPServer(('192.168.0.108', 2121), handler) #开始服务 server.serve_forever()이제 FTP 서비스가 완료되었습니다.
코드 표준화
먼저 settings.py와 user.py를 저장할 conf 디렉터리를 만듭니다.디렉터리 구조( 캐시에 있는 것):ip = '0.0.0.0' port = '2121' #上传速度 300kb/s max_upload = 300 * 1024 #下载速度 300kb/s max_download = 300 * 1024 #最大连接数 max_cons = 150 #最多IP数 max_per_ip = 10 #被动端口范围,注意被动端口数量要比最大IP数多,否则可能出现无法连接的情况 passive_ports = (2000, 2200) #是否开启匿名访问 on|off enable_anonymous = 'off' #匿名用户目录 anonymous_path = '/home/huangxm' #是否开启日志 on|off enable_logging = 'off' #日志文件 loging_name = 'pyftp.log' #欢迎信息 welcome_msg = 'Welcome to my ftp'user.py
#用户名 密码 权限 目录 #root 12345 elradfmwM /home/ huangxm 12345 elradfmwM /home/ test 12345 elradfmwM /home/huangxmFtpServer.py
from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler, ThrottledDTPHandler from pyftpdlib.servers import FTPServer from conf import settings import logging def get_user(userfile): #定义一个用户列表 user_list = [] with open(userfile) as f: for line in f: if not line.startswith('#') and line: if len(line.split()) == 4: user_list.append(line.split()) else: print("user.conf配置错误") return user_list def ftp_server(): #实例化虚拟用户,这是FTP验证首要条件 authorizer = DummyAuthorizer() #添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限) #authorizer.add_user('user', '12345', '/home/', perm='elradfmw') user_list = get_user('conf/user.py') for user in user_list: name, passwd, permit, homedir = user try: authorizer.add_user(name, passwd, homedir, perm=permit) except Exception as e: print(e) #添加匿名用户 只需要路径 if settings.enable_anonymous == 'on': authorizer.add_anonymous(settings.anonymous_path) #下载上传速度设置 dtp_handler = ThrottledDTPHandler dtp_handler.read_limit = settings.max_download dtp_handler.write_limit = settings.max_upload #初始化ftp句柄 handler = FTPHandler handler.authorizer = authorizer #日志记录 if settings.enable_logging == 'on': logging.basicConfig(filename=settings.loging_name, level=logging.INFO) #欢迎信息 handler.banner = settings.welcome_msg #添加被动端口范围 handler.passive_ports = range(settings.passive_ports[0], settings.passive_ports[1]) #监听ip 和 端口 server = FTPServer((settings.ip, settings.port), handler) #最大连接数 server.max_cons = settings.max_cons server.max_cons_per_ip = settings.max_per_ip #开始服务 print('开始服务') server.serve_forever() if __name__ == "__main__": ftp_server()마지막으로 권한에 대해 이야기해 보겠습니다. 읽기 권한:
e | 改变文件目录 |
l | 列出文件 |
r | 从服务器接收文件 |
M 예:
서버에 가서 권한을 확인하세요.
권한이 수정되었습니다.
위 내용은 Python에서 FTP 서버 서비스를 구현하는 방법(컬렉션)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

정규 표현식을 사용하여 첫 번째 닫힌 태그와 정지와 일치하는 방법은 무엇입니까? HTML 또는 기타 마크 업 언어를 다룰 때는 정규 표현식이 종종 필요합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

뜨거운 주제



