如何在Linux中找到开放端口?

Cer*_*era 4 python unix linux networking tcp

是否有某种系统调用将返回端口是否可用?或者至少是一种传统的做法,不会让你的过程成为一个坏公民?

目前我正在这样做:

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
Run Code Online (Sandbox Code Playgroud)

呸!

Dav*_*ver 12

我知道检查某个特定端口是否可用的最简单方法是尝试绑定它或尝试连接它(如果你想要TCP).如果绑定(或连接)成功,则它可用(正在使用中).

但是,如果您只想要任何开放端口,则可以绑定到端口0,并且操作系统将为您分配一个端口.

  • 当然,使用[`socket.getsockname()`](http://docs.python.org/library/socket.html#socket.socket.getsockname). (2认同)