Как мне найти открытый порт в Linux? - PullRequest
4 голосов
/ 14 февраля 2012

Есть ли какой-нибудь системный вызов, который вернет, доступен ли порт? Или, по крайней мере, обычным способом сделать это, который не делает ваш процесс плохим гражданином?

На данный момент я так делаю:

def find_open_port(min_port, max_port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    for port in range(min_port, max_port):
        if port > max_port:
            raise IOError('Could not find a free port between {0} and {1}'.format(min_port, max_port))
        try:
            s.bind(('localhost', port))
            return port
        except socket.error as error:
            if error.strerror == 'Address already in use':
                continue
            else:
                raise error

Тьфу!

1 Ответ

12 голосов
/ 14 февраля 2012

Самый простой из известных мне способов проверить, доступен ли конкретный порт, - это попытаться подключиться к нему или подключиться к нему (если вам нужен TCP). Если связывание (или подключение) выполнено успешно, оно было доступно (используется).

Однако, если вы просто хотите любой открытый порт, вы можете привязаться к порту 0, и операционная система назначит вам порт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...