为活动模式下的ftp服务器指定数据范围端口

时间:2019-05-09 16:01:38

标签: mode active-model-serializers ftplib frp passive-mode

我使用python ftplib连接到以活动模式运行的ftp服务器;这意味着当我们之间发送数据时,服务器将在随机端口上连接我的客户端计算机。

我可以指定客户端用于与服务器通信的端口范围吗?

我尝试修补makeport方法,但不确定是否成功:

def makeport(self):
    '''Create a new socket and send a PORT command for it.'''
    err = None
    sock = None
    for res in socket.getaddrinfo(None, 0, self.af, socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
        af, socktype, proto, canonname, sa = res
        try:
            sock = socket.socket(af, socktype, proto)
            sock.bind(sa)
        except OSError as _:
            err = _
            if sock:
                sock.close()
            sock = None
            continue
        break
    if sock is None:
        if err is not None:
            raise err
        else:
            raise OSError("getaddrinfo returns an empty list")
    sock.listen(1)
    port = sock.getsockname()[1] # Get proper port
    host = self.sock.getsockname()[0] # Get proper host
    if self.af == socket.AF_INET:
        resp = self.sendport(host, port)
    else:
        resp = self.sendeprt(host, port)
    if self.timeout is not _GLOBAL_DEFAULT_TIMEOUT:
        sock.settimeout(self.timeout)
    return sock

0 个答案:

没有答案
相关问题