Укажите порт диапазона данных для ftp-сервера в активном режиме - PullRequest
0 голосов
/ 09 мая 2019

Я использую 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
...