有助于本地TCP端口管理的实用程序。它可以找到一个未使用的TCP本地主机端口,并记住关联。

port-for的Python项目详细描述


PyPI VersionBuild StatusCode Coverage

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试图遵循以查找和 返回新的未使用端口:

  1. 端口必须未使用:port-for通过尝试连接来检查 连接到端口并绑定到它。
  2. 端口必须是IANA UNASSIGNED,否则不知名: 这是通过维护未分配端口列表来实现的 (摘自IANA和维基百科)。
  3. 端口不应在临时端口范围内。 这一点很重要,因为来自临时端口范围的端口可以 由操作系统临时分配(例如,由机器的IP堆栈)和 在某些情况下,这可能会阻止服务重新启动。 port-for不从临时端口范围返回端口 在当前计算机上配置。
  4. 还应用了其他启发式方法: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

从源签出。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在JAVA中,将十六进制转换为十进制,将十进制转换为时间戳   无法识别java子类构造函数   java JavaFx将两个“setOnAction”设置为同一个按钮   java重载的StringBuilder insert()以及偏移量和索引之间的差异   java调试异常初始化错误   带有可插拔组件的应用程序的面向对象设计中的java问题   java中mysql的Socket编程   java NetBeans平台和TinyLaF 1.4.0   java Sql server 2005知道插入了新记录   java正则表达式如何匹配2个任意但不同的字符   java如何在两个类之间使用double?   java我可以使用嵌套的rest webservice或在webservice中打开链接吗   java如何将Swagger与Maven+Jersey+jboss EAP 6.2集成   java无法更新视图寻呼机中的中间片段。   安卓中的java For循环会在项目之间创建间隙   具有重复模式的java正则表达式   用于Swagger的java GraphQL扩展   基于Android Fonttype在纯Java中查找精确的Fonttype   Java字符串返回方法不返回