有助于本地TCP端口管理的实用程序。它可以找到一个未使用的TCP本地主机端口,并记住关联。
port-for的Python项目详细描述
port-for是一个命令行实用程序和一个python库 有助于本地TCP端口管理。
它可以找到未使用的TCP本地主机端口并记住关联:
$ sudo port-for foo 37987
这在安装软件堆栈时非常有用 多个部件需要端口号。
注意
如果您正在寻找一个临时端口,那么socket.bind((host, 0)) 您的最佳选择是:
>>> import socket >>> s = socket.socket() >>> s.bind(("", 0)) >>> s.getsockname() ('0.0.0.0', 54485)
port-for在需要persistent空闲本地端口号时是必需的。
port-for与^{tt5}完全相反$ 从某种意义上说,它不应该返回端口s.bind((host, 0)) 可能会返回(因为这些端口可能是操作系统临时使用的)。
有几个规则port-for试图遵循以查找和 返回新的未使用端口:
- 端口必须未使用:port-for通过尝试连接来检查 连接到端口并绑定到它。
- 端口必须是IANA UNASSIGNED,否则不知名: 这是通过维护未分配端口列表来实现的 (摘自IANA和维基百科)。
- 端口不应在临时端口范围内。 这一点很重要,因为来自临时端口范围的端口可以 由操作系统临时分配(例如,由机器的IP堆栈)和 在某些情况下,这可能会阻止服务重新启动。 port-for不从临时端口范围返回端口 在当前计算机上配置。
- 还应用了其他启发式方法:port-for尝试返回 来自更大端口范围的端口;它也不返回 离知名港口太近。
安装
系统范围内使用简易安装(类似于python-setuptools 应安装):
sudo pip install port-for
或:
sudo easy_install port-for
或者在虚拟机中:
pip install port-for
脚本使用
port-for <foo>script查找未使用的端口并关联 它和<foo>一起。后续调用返回相同的端口号。
这个实用程序实际上并没有绑定端口或以其他方式阻止 端口被另一个软件占用。它试图选择 不太可能被其他软件使用的端口 (当然,在打电话的时候是不用的)。效用也使 确保port-for bar不会返回与^{tt15}相同的端口$ 在同一台机器上。
$ 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
深入研究源代码以获取更多信息。
贡献
在github进行开发:https://github.com/kmike/port-for/
问题跟踪器:https://github.com/kmike/port-for/issues/new
为了运行测试,请确保有tox 已安装,然后键入
tox
从源签出。