假设出于某种原因,在我管理的 Windows 系统上,我不希望任何应用程序侦听某个端口,例如 8000。
结果是,当用户尝试运行应用程序来侦听该端口时,例如,python -m http.server 8000
他会收到通常的错误提示OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
。当他使用命令检查是否有任何东西已经在使用该端口时,netstat -ano|findstr 8000
他不会找到任何东西。
这有点像保留,就像说“不允许任何人使用此端口,因为我可能需要使用它来处理重要业务”。
我该怎么做?Windows 本身是否支持此功能?我需要第三方软件来实现这一点吗?
答案1
您应该查看“netsh”命令行实用程序。这将“保留”端口……使非特权进程无法绑定它们。
NETSH 列出 ipv4 > tcp 堆栈上的保留端口:
netsh interface ipv4 show excludedportrange protocol=tcp
NETSH 保留端口(模板):
netsh int <ipv4|ipv6> Add excludedportrange [protocol=]tcp|udp [startport=]<integer> [numberofports=]<integer> [[store=]active|persistent]
示例:NETSH,为 ipv4 > tcp 保留端口 8000,使用以下命令:
netsh int ipv4 add excludedportrange protocol=tcp startport=8000 numberofports=1
默认情况下,端口预留在重启后仍然有效。
无论如何,我建议你阅读NETSH 文档和相关用法及示例链接
如果上述解决方案不起作用,您可以尝试:
- windows-server 通过注册表保留端口范围。
- 但是,如果你正在运行Windows 服务器 2008,您可能会遇到功能问题,需要安装HOTFIX或更新系统,正如这里解释的那样。
希望能帮助到你