python简易FTP服务器

功能描述:实现简单的文件上传和下载功能

程序分三部分:

① ftp_opr.py    上传下载功能,需与其他程序在一起

② ftp_server.py    服务端程序

③ ftp_client.py    客户端程序

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#filename:ftp_opr.py
import socket,os,json

def send_file(socket_object,filename):      ####传入套接字对象和文件名,下同
    fk = open(filename, ‘rb‘)
    file_size = os.path.getsize(filename)
    dict = {‘filename‘:filename,‘file_size‘:file_size}
    socket_object.send(json.dumps(dict).encode(‘utf-8‘))
    print(‘准备发送的文件名:‘,dict[‘filename‘],‘文件大小:‘,dict[‘file_size‘])
    socket_object.recv(1024)  ####等待一个save_file发过来的无用信号,用于防止粘包
    socket_object.send(fk.read())
    fk.close()

def save_file(socket_object,filename):
    name_size_dict = json.loads(socket_object.recv(1024).decode(‘utf-8‘))
    print(‘准备接收的文件名:‘,name_size_dict[‘filename‘],‘文件大小:‘, name_size_dict[‘file_size‘])
    socket_object.send(b‘ready‘)  ####发送一个无用的信号,用于防止粘包
    #filename = name_size_dict[‘filename‘]    ####调用该方法需要输入filename参数,同时传过来的dict中已经包含filename,所以忽略其一
    file_size = name_size_dict[‘file_size‘]
    fk = open(filename+‘.new‘, ‘wb‘)
    receive_size = 0
    while file_size > receive_size:
        data = socket_object.recv(1024)
        fk.write(data)
        receive_size += len(data)
        print(len(data), receive_size, file_size)
    print(‘文件接收完毕!‘)
    fk.close()
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#filename:ftp_server.py
from ftp_opr import send_file,save_file
def ftp_server():
    sk = socket.socket()
    sk.bind((‘0.0.0.0‘,9999))    ####绑定本机网卡地址和端口
    sk.listen()
    while True:
        conn,addr = sk.accept()
        print(‘新的连接:‘,addr)
        while True:
            cmd = conn.recv(1024).decode(‘utf-8‘)
            if len(cmd) == 0:
                print(‘客户端断开了‘)
                break
            elif cmd.split()[0] == ‘get‘:    ####对应客户端下载功能
                filename= cmd.split()[1]
                print(cmd)
                send_file(conn, filename)
            elif cmd.split()[0] == ‘put‘:    ####对应客户端上传功能
                filename= cmd.split()[1]
                print(cmd)
                save_file(conn, filename)
            else:
                ‘‘‘保留功能部分‘‘‘
                pass
    sk.close()
if __name__ == ‘__main__‘:
    ftp_server()
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#filename:ftp_client.py
import socket,os,json
from ftp_opr import send_file,save_file
def ftp_client():
    sk = socket.socket()
    sk.connect((‘127.0.0.1‘,9999))    ####连接服务器地址和端口
    while True:
        cmd = input(‘>>>:‘)
        if len(cmd) == 0:continue
        elif cmd == ‘q‘:
            exit()
        elif len(cmd.split()) > 2:
            print(‘输入参数过多,请使用 put/get + 1个文件名‘)

        elif cmd.split()[0] == ‘get‘:    ####下载功能
            filename= cmd.split()[1]
            sk.send(bytes(cmd.encode(‘utf-8‘)))
            save_file(sk, filename)

        elif cmd.split()[0] == ‘put‘:    ####下载功能
            filename= cmd.split()[1]
            sk.send(bytes(cmd.encode(‘utf-8‘)))
            send_file(sk, filename)

        else:
            print(‘输入错误,请输入 put/get + 文件名‘)
            pass
    sk.close()

if __name__ == ‘__main__‘:
    ftp_client()
时间: 2024-10-13 01:14:56

python简易FTP服务器的相关文章

助手系列之python的FTP服务器

电脑的OS是Win7,Python版本是2.7.9,安装了pip 因为python没有内置可用的FTP SERVER,所以先选一个第三方的组件安装上,这里我选的是pyftpdlib pip install pyftpdlib 安装完后可以直接用下面命令启用ftp服务器 python –m pyftpdlib –p 21 但这个ftp服务器没什么安全性,所以我们自己定制一个新的 from pyftpdlib.authorizers import DummyAuthorizerfrom pyftpd

python开发ftp服务器第一天(pyftpdlib)

学习了大约快一个月的python,现在开始有意识做一些项目. 据我了解,python现在更多的是用于自动化运维方面,例如做一些服务器上审计堡垒机,分布式监控,还有做web的后台开发. 今天想在实验室搭建一个ftp服务器,用来分享一些资料,于是就想到了利用python来进行开发. ftp服务器的本质还是利用socket编程来实现,只不过遵循特定的协议而已,我查了一下协议是RFC959. 当然为了不重复造轮子,先看看有没有开源的lib,百度一下找到了pyftpdlib这个库,查看了一下这个库,发现代

python实现FTP服务器

FTP服务的主动模式和被动模式 在开始之前,先聊一下FTP的主动模式和被动模式,两者的区别 , 用两张图来表示可能会更加清晰一些: 主动模式: 主动模式工作过程: 1. 客户端以随机非特权端口N,就是大于1024的端口,对server端21端口发起连接 2. 客户端开始监听 N+1端口: 3. 服务端会主动以20端口连接到客户端的N+1端口. 主动模式的优点: 服务端配置简单,利于服务器安全管理,服务器只需要开放21端口 主动模式的缺点: 如果客户端开启了防火墙,或客户端处于内网(NAT网关之后

Python之ftp服务器

今天把做的ftp服务器过程总结一下,先看看要求 一.需求 1. 用户加密认证 2. 允许同时多用户登录 3. 每个用户有自己的家目录 ,且只能访问自己的家目录 4. 对用户进行磁盘配额,每个用户的可用空间不同 5. 允许用户在ftp server上随意切换目录cd 6. 允许用户查看当前目录下文件ls 7. 允许上传put和下载get文件,保证文件一致性 8. 文件传输过程中显示进度条 附加实现的功能: 1.实现服务器端文件删除,创建.删除目录 2.查看当前账户状态 3.实现断点续传 二.实现过

python搭建ftp服务器

1 # coding: utf-8 2 import os 3 from pyftpdlib.authorizers import DummyAuthorizer 4 from pyftpdlib.handlers import FTPHandler 5 from pyftpdlib.servers import FTPServer 6 7 def main(): 8 #实例化用户授权管理 9 authorizer = DummyAuthorizer() 10 authorizer.add_us

python简易web服务器学习笔记(三)

import sys, os, BaseHTTPServer #------------------------------------------------------------------------------- class ServerException(Exception): '''For internal error reporting.''' pass #--------------------------------------------------------------

Ubuntu 14.10下搭建简易FTP服务器[vsftpd]

Ubuntu下公认最易上手的ftp软件是vsftpd,既然标题都说了是“简易”的,那么必然是用最大众的..下面是正题 目标需求:搭建一个允许匿名/本地登录的FTP,并且支持上传/下载/修改功能,同时FTP的端口可自主决定,FTP的根目录可自主决定. PS:部署过程中遇到任何问题可以先看看本文最下方的Note部分,也许你现在遇到的问题正是我曾经遇到而且解决了的^..^ 步骤一:安装vsftpd sudo apt-get update   # 更新源 sudo apt-get install vsf

python简易web服务器学习笔记(二)

import BaseHTTPServer #------------------------------------------------------------------------------- class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): '''Respond to HTTP requests with info about the request.''' # Template for page to sen

centos7搭建需密码登入的简易ftp服务器

一.安装vsftpd服务yum install vsftpd 二.安装ftp服务yum install ftp 三.修改vsftpd服务配置文件vi /etc/vsftpd/vsftpd.confanonymous_enable=YES 改为NO #禁止匿名登录补充说明:chroot相关设置很重要1)chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)2)chro