【问题标题】:Verify if a local port is available in python验证python中是否有本地端口可用
【发布时间】:2017-09-02 09:50:35
【问题描述】:

我有一个项目,我在其中生成子进程,这些子进程又需要一个端口号来绑定。端口号由我的 Python 脚本分配,我只是在 49152 和 65535 之间随机取一个端口。

我想验证该端口是否可用并且没有被本地系统上的任何其他工具使用 (*nix)。

来自another question我有这个sn-p:

import socket;
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('127.0.0.1',80))
if result == 0:
   print "Port is open"
else:
   print "Port is not open"

我可以在我的情况下使用它吗?这不会打开一个端口,也不会关闭它以供进一步使用吗?

【问题讨论】:

  • @TessellatingHeckler 这个确实很像,不过我就是想看看随机端口有没有。 python 脚本永远不应该真正为自己使用它。
  • 这种方法本质上是容易失败的,因为您在检查和实际使用之间存在竞争条件 - 如果同时其他人窃取了该端口怎么办?

标签: python linux unix port


【解决方案1】:

代码很好,它创建了一个套接字并尝试连接。它不会打开或关闭任何端口。您只需在末尾添加此行即可关闭套接字:sock.close()

【讨论】:

    【解决方案2】:

    只需创建一个临时套接字,然后尝试绑定到端口以查看它是否可用。验证端口可用后关闭套接字。

    def tryPort(port):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = False
        try:
            sock.bind(("0.0.0.0", port))
            result = True
        except:
            print("Port is in use")
        sock.close()
        return result
    

    【讨论】:

    猜你喜欢
    • 2020-07-31
    • 2019-03-30
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多