跳转到主要内容

这是一个帮助管理本地TCP端口的工具。它可以找到一个未使用的TCP localhost端口并记住这个关联。

项目描述

PyPI Version Code Coverage

port-for 是一个命令行工具和 Python 库,用于帮助管理本地 TCP 端口。

它可以找到一个未使用的 TCP localhost 端口并记住这个关联。

$ sudo port-for foo
37987

当您安装一个由多个部分组成且需要端口号的软件栈时,这可能很有用。

port-for 在寻找和返回一个新未使用的端口时遵循一些规则

  1. 端口必须是未使用的:port-for 通过尝试连接到该端口并绑定到它来检查这一点。

  2. 端口必须是 IANA 未分配的,并且在其他方面不是众所周知的:这是通过维护未分配端口列表(从 IANA 和维基百科解析)来实现的。

  3. 端口不应位于临时端口范围内。这很重要,因为来自临时端口范围的端口可能被操作系统临时分配(例如,通过机器的 IP 栈),这可能在某些情况下阻止服务重启。port-for 不会返回当前机器配置的临时端口范围内的端口。

  4. 还应用了一些启发式规则:port-for 尝试从较大的端口范围返回一个端口;它也不返回太靠近知名端口的端口。

安装

使用 easy_install 系统范围内(应已安装类似于 python-setuptools 的软件)

sudo pip install port-for

或者

sudo easy_install port-for

或者在一个虚拟环境中

pip install port-for

脚本用法

port-for <foo> 脚本寻找一个未使用的端口并将其与 <foo> 关联。后续调用将返回相同的端口号。

此实用程序实际上不会绑定端口或以其他方式阻止其他软件占用端口。它尝试选择一个不太可能被其他软件使用的端口(当然,在调用时该端口是未使用的)。实用程序还确保 port-for bar 不会返回与同一台机器上的 port-for foo 相同的端口号。

$ sudo port-for foo
37987

$ port-for foo
37987

您可能需要制定一些命名约定(例如,在应用程序名称前加前缀)以使同一服务器上的多个站点能够运行

$ sudo port-for example.com/apache
35456

请注意,port-for 脚本需要读取和写入 /etc/port-for.conf 的权限。这通常意味着普通用户可以读取端口号值,但需要 sudo 权限来关联新的端口号。

列出所有关联的端口

$ port-for --list
foo: 37987
example.com/apache: 35456

删除一个关联

$ sudo port-for --unbind foo
$ port-for --list
example.com/apache: 35456

库用法

>>> import port_for
>>> port_for.select_random()
37774

>>> port_for.select_random()
48324

>>> 80 in port_for.available_good_ports()
False

>>> port_for.get_port()
34455

>>> port_for.get_port("1234")
1234

>>> port_for.get_port((2000, 3000))
2345

>>> port_for.get_port({4001, 4003, 4005})
4005

>>> port_for.get_port([{4000, 4001}, (4100, 4200)])
4111

更多内容请查看源代码。

贡献

开发发生在 github 上:https://github.com/kmike/port-for/

问题跟踪器:https://github.com/kmike/port-for/issues/new

发布

首先安装 pipenv 和 -dev 依赖项,然后运行

pipenv run tbump [NEW_VERSION]

支持者