在 Windows 中是否有办法检查可以打开哪个端口

在 Windows 中是否有办法检查可以打开哪个端口

我遇到一个问题,无法打开端口 64120 到 64130。Eclipse SonarLint 插件需要这些端口。

端口未被使用,已使用 netstat、tcpview 和 portqry 检查。有某些东西或某些设置阻止打开这些端口。

我想创建一个所有不能打开的端口的列表。我希望如果我知道被阻止的范围,我就能找出阻止它们的原因。

是否有命令可以创建这样的列表?

Windows 11 企业版 23H2

端口阻塞问题如何体现

PS C:\workspace> netstat -anp | findstr 64120

没有返回任何内容,而且 tcpview 和其他实用程序也没有显示端口 64120 正在使用中。

  1. Sonarlint 插件在启动时显示错误
Starting SonarLint for Eclipse 9.3.3006
Error while starting port: 64120, Address already in use: bind
Error while starting port: 64121, Address already in use: bind
Error while starting port: 64122, Address already in use: bind
Error while starting port: 64123, Address already in use: bind
Error while starting port: 64124, Address already in use: bind
Error while starting port: 64125, Address already in use: bind
Error while starting port: 64126, Address already in use: bind
Error while starting port: 64127, Address already in use: bind
Error while starting port: 64128, Address already in use: bind
Error while starting port: 64129, Address already in use: bind
Error while starting port: 64130, Address already in use: bind
  1. 使用 python tcp_server 示例

https://docs.python.org/3/library/socketserver.html

python3.11.exe c:/cce/workspaces/develop128/tcp_server.py
Traceback (most recent call last):
  File "c:\workspace\tcp_server.py", line 24, in <module>
    with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\socketserver.py", line 456, in __init__
    self.server_bind()
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\socketserver.py", line 472, in server_bind
    self.socket.bind(self.server_address)
PermissionError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

防火墙 ?

我怀疑防火墙和其他系统管理工具可能是原因,但目前我无法检查。我想创建阻止端口列表,以便我可以将其传达给我们的系统管理员

在此处输入图片描述

答案1

我创建了一个小型 Python 程序,尝试打开所有端口并列出结果。

import socket

def check_port(port):

    try:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.bind(('0.0.0.0', port))
            result = "available"
    except OSError as e:
        result = f"closed: {e}"
    return result

def main():
    # Define the range of ports you want to check
    start_port = 2
    end_port = 65535

    first_port = 1
    last_port = first_port
    first_result = check_port(first_port)

    for port in range(start_port, end_port + 1):
        result = check_port(port)
        if (result == first_result):
            last_port = port
        if (result != first_result or port == end_port):
            print(f"{first_port}-{last_port} : {first_result}")
            first_port = port
            last_port = first_port
            first_result = result

if __name__ == "__main__":
    main()

样本输出(已修剪)

python -u "tcp_testports.py"
...
2180-3388 : available
3389-3389 : closed: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
3390-5039 : available
5040-5040 : closed: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
5041-5984 : available
5985-5985 : closed: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
5986-7679 : available
...

端口锁定问题已消失。我禁用了 Internet 连接共享服务并重新启动。这似乎解决了问题,但当我检查时发现 ICS 服务已重新启动,因此我不确定是什么阻塞了端口。我会保留此代码以防再次遇到同样的问题。

相关内容