【问题标题】:How do I find an open port in Linux?如何在 Linux 中找到开放端口?
【发布时间】:2012-03-05 12:51:08
【问题描述】:

是否有某种系统调用会返回端口是否可用?或者至少是一种不会使您的流程成为坏公民的传统方式?

目前我是这样做的:

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

糟糕!

【问题讨论】:

  • 您是否正在寻找确定一个端口在 Linux 中是否打开?还是你需要它在 Python 中?
  • 总的来说,我只是使用 Python,因为它的套接字库接近金属。
  • 解析netstat的输出呢?
  • 考虑过了,但未使用的端口并不意味着用户有权绑定到该端口。

标签: python linux unix networking tcp


【解决方案1】:

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

不过,如果你只是想any打开端口,你可以绑定到端口0,操作系统会给你分配一个端口。

【讨论】:

  • 啊,那行。操作系统会告诉我它以某种方式分配给我的端口吗?
  • 当然,使用socket.getsockname()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2010-10-30
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
相关资源
最近更新 更多