Pyhton:FTP代理端实现

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")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值