Найти бесплатный порт TCP, используя Python3 - PullRequest
0 голосов
/ 16 января 2019

Я ищу бесплатный порт TCP в системе Linux с использованием Python. Я использую этот код

from contextlib import closing

def find_free_port():
    with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
        s.bind(('', 0))
        return s.getsockname()[1]

if __name__ == "__main__":
    print(find_free_port())

Иногда я получаю эту проблему

  File "test_script.py", line 10, in <module>
    print(find_free_port())
  File "test_script.py", line 6, in find_free_port
    s.bind(('', 0))
OSError: [Errno 98] Address already in use

Почему?

1 Ответ

0 голосов
/ 16 января 2019

Одним из решений является уничтожение уже используемого порта и его повторное использование. Чтобы уничтожить определенный порт в Linux, используйте следующую команду:

sudo fuser -k Port_Number/tcp

Например: в вашем случае это будет выглядеть следующим образом:

sudo fuser -k 98/tcp

Но чтобы ответить на ваш вопрос, я думаю, что приведенный ниже код поможет вам найти все свободные порт TCP:

from contextlib import closing
import socket

for port in range(1, 8081):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        res = sock.connect_ex(('localhost', port))
        if res == 0:
            print (port)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...