我如何在python的特定范围内获得免费端口

时间:2019-07-18 01:54:32

标签: python python-3.x port ubuntu-16.04

我可以使用python获取免费端口,但是我想获取特定范围的免费端口。

我尝试使用while循环来获取它,但是我无法获得想要的效果,可能要花很长时间

import socket

SO_BINDTODEVICE=25

def get_free_port(iface=None):
    s = socket.socket()

    if iface:
        s.setsockopt(socket.SOL_SOCKET, SO_BINDTODEVICE, bytes(iface,'utf8'))

    s.bind(('',0))
    port = 0
    while(port<60100 or port>60300):
        ip = s.getsockname()[0]
        port = s.getsockname()[1]
    s.close()

    return ip,port


print(get_free_port())

我希望能在短时间内得到我想要的端口

1 个答案:

答案 0 :(得分:0)

def next_free_port( port=1024, max_port=65535 ):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    while port <= max_port:
        try:
            sock.bind(('', port))
            sock.close()
            return port
        except OSError:
            port += 1
    raise IOError('no free ports')