使用python3查找免费的TCP端口

时间:2019-01-16 08:52:07

标签: python linux

我正在使用python在linux系统中寻找免费的tcp端口。 我使用这段代码

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 :(得分:0)

一种解决方案是杀死已在使用的端口,然后再次使用它。要杀死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)