получите открытый порт TCP в Python

Я хочу получить любой случайный открытый порт TCP на localhost в Python. Каков самый легкий путь?

25
задан Albert 14 May 2010 в 23:27
поделиться

2 ответа

Мое текущее решение:

def get_open_port():
        import socket
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind(("",0))
        s.listen(1)
        port = s.getsockname()[1]
        s.close()
        return port

Не очень хорошее и не на 100% правильное, но пока оно работает.

46
ответ дан 28 November 2019 в 18:29
поделиться

Я действительно использую следующее в одной из моих программ:

port = random.randint(10000,60000)

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

По мотивам комментария Марсело Кантоса по вашему вопросу, я добавлю, что стандартное решение в подобных случаях - привязать процесс, который будет использовать порт, к нему, а затем поделиться этой информацией с любой другой программой, которая в ней нуждается. . Обычно он делает что-то вроде записи временного файла, содержащего номер порта, в какое-то стандартное место в файловой системе. Поскольку процесс, с которым вы работаете, этого не делает, в каком-то смысле любое решение, которое вы придумаете, будет чем-то вроде взлома. Но опять же, если это просто для вашего собственного использования, это, вероятно, нормально.

3
ответ дан 28 November 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: