关键词搜索

源码搜索 ×
×

Pyhton:FTP代理端实现

发布2019-11-22浏览514次

详情内容

import socket
import select
import sys
import datetime

# 范围时间
# 根据指定的格式将一个时间字符串解析为时间元祖用于比价
start_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '7:30','%Y-%m-%d%H:%M')
end_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '23:00','%Y-%m-%d%H:%M')

# 当前时间
now_time = datetime.datetime.now()

# 判断当前时间是否在范围时间内
if now_time >= start_time and now_time <= end_time:

    to_addr = ('192.168.43.189', 6000)  # Ftp 服务器地址
    class Proxy:
        def __init__(self, addr):
            # 创建 socket 实例,指定面向网络,面向连接
            self.proxy = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.proxy.bind(addr)  # 绑定代理地址到套接字
            self.proxy.listen(10)  # 开启 TCP监听,设置最大连接数为 10
            self.inputs = [self.proxy]  # socket 列表
            self.route = {}  # 建立 客户端:服务端的连接,也就是将对应的socket绑定起来

        # 代理监听服务
        def proxy_serve(self):
            print('--------------- FTP 代理监听开始 ---------------')
            while True:
                 # 三个参数,第一个所有输入的data即外部发过来的数据,第二个监控和接收所有要发出去的data,第三个监控错误信息
                readable, _, _ = select.select(self.inputs, [], [])
                for self.sock in readable:  # 判定所有接受的套接字
                    if self.sock == self.proxy:  # 是指向代理的连接
                        self.connect_on()
                    else:
                        data = self.sock.recv(100000)  # 接受发送过来的TCP数据,数据以字符串形式返回,8096表示字节大小
                        if not data:
                            self.quit_on()  # 不存在数据则关闭这个 socket 套接字
                        else:
                            self.route[self.sock].send(data)

        def connect_on(self):
            client, addr = self.proxy.accept()  # 建立客户端的连接
            print('--客户端与服务端连接成功--')
            forward = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 实例化一个该客户端的对象
            forward.connect(to_addr)  # 与服务器建立连接
            self.inputs += [client, forward]  # 新建立的 socket 加入 inputs 列表
            # 建立客户端和服务端的对应
            self.route[client] = forward
            self.route[forward] = client

        def quit_on(self):
            for s in self.sock, self.route[self.sock]:
                self.inputs.remove(s)  # 移除套接字
                del self.route[s]
                s.close()

    if __name__ == '__main__':
        try:
            Proxy(('192.168.43.197',4500)).proxy_serve()  # 代理服务器监听的地址
        except KeyboardInterrupt:  # 执行中断操作:Ctrl + C
            sys.exit(1)
else:
    print("您好,FTP 每天的连接时间为上午7:30 - 23:00")

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载