系统(PID 4)正在使用端口 80,那是什么?

13 windows port netstat pid

我正在尝试将端口 80 用于我的应用程序服务器,但是当我执行“netstat -aon”时,我得到

TCP 0.0.0.0:80 0.0.0.0:0 聆听 4

当我在任务管理器中查找进程时,它显示 PID 4 是 SYSTEM,就是这样,而不是扩展名......没有,只是“SYSTEM”。这里发生了什么?

我害怕结束这个过程,我该怎么办?

Ian*_*ths 20

尽管人们指出了特定的服务(例如“Web 部署代理服务”),但这并没有解决根本原因。如果您只是禁用触发问题的服务,那么它将来很可能会以稍微不同的形式再次抬头。因此,了解出了什么问题是值得的,因为这会导致更好的修复。

当应用程序服务器想要完全控制端口 80 时会出现此问题。这与 Windows 的一项功能冲突,该功能旨在使多个进程能够处理端口 80 上的请求。完全有可能让任意数量的进程都在端口上接收 HTTP 请求80,因为Windows有内置的HTTP调度机制。每个进程都可以告诉 Windows 它想要处理哪些 URL。

但是,如果应用程序服务器完全忽略这一点,那么您又回到了灵活性较低的老式套接字世界,在那里只有一个进程可以接收发往任何特定端口的请求。

这可能没问题——如果除了处理端口 80 上的 HTTP 请求的特定进程之外,你真的不想要任何其他东西,那么使用无法支持 Windows 提供的更灵活机制的应用程序服务器就变得可以容忍了。(一些流行的应用服务器有这个限制。例如,AFAIK,Tomcat 无法与其他人很好地合作,并坚持将端口 80 全部用于自己。因此,如果您使用的是其他人的应用服务器,则很可能不切实际调整它以使用首选机制。)

Windows 试图通过不将其调度机制绑定到端口 80 来适应这种不灵活的服务,直到有人主动提出要求。(这就是为什么您最初不一定会看到问题,但在进行某种更新或配置更改后可能会遇到此问题。)但是依赖于这不是一个非常可靠的解决方案 - 您基本上相信没有任何问题在您的应用服务器启动之前尝试在端口 80 下侦听。(有多种原因,一个进程可能会推测性地尝试在端口 80 上注册某些 URL,如果不允许,则退出。)

因此,如果您希望一项服务独占访问端口 80,则最好告诉 Windows。尝试关闭所有可能尝试使用常用端口共享机制的服务并不够好,因为很难确信您已经找到了所有这些服务。(特别是当 Windows 更新似乎改变了默认情况下的内容时。)禁用您知道的那些可能是一种很好的做法,但最好从两端进行处理:禁用您不想要的服务,并确保它不是对于那些你不知道会绊倒你的人来说是可能的。

默认情况下HTTP.SYS(Windows 中的底层端口共享 HTTP 调度机制)能够侦听所有地址。但是你可以告诉它不要。此页面显示了一种方法:http : //www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

这是一种相对轻松的方法,因为它仍然可以在 localhost 上侦听 IPv6。它只是释放了 IPv4 端口 80。您可以使用更专业的配置进一步使用它。(您甚至可以HTTP.SYS完全禁用,但这可能会破坏使用 80 以外的端口的功能,因此可能会导致问题。)

但无论你做什么,关键是确保HTTP.SYS它不会尝试在你关心的 IP 地址上侦听端口 80。完成此操作后,您无需担心禁用服务,也无需担心其他更改会重新引入问题。如果您已确保您需要的端点有效地超出了端口共享范围,那么您应该会发现系统进程停止绑定到它。


小智 13

罪魁祸首是 Web 部署代理服务。

net stop http停止名为“Web 部署代理服务”的服务更好的解决方案。

  • 您需要停止和禁用的服务的具体名称是“万维网发布服务”。虽然“net stop http”本身就是一个充满令人讨厌的副作用的非常残酷的答案 - 诸如打印后台处理程序和 Windows 10 登录过程的一部分依赖于 http - 如果你尝试它会做什么,是给你一个列表依赖于 http 的服务,以及退出的选项。一一尝试该列表中的少数服务,我发现 WWW Publishing Service 是罪魁祸首。 (4认同)
  • 男人!他妈的可怕的微软做法!我不得不花费数小时试图找出为什么有一个 IIS 实例(通过 telnet 连接时根据标头判断)侦听 0.0.0.0:80 并阻止 Apache 启动,即使我从 Windows 功能/角色中删除了 IIS。是的,它是 Web 部署代理服务,阻止对任何地址上的端口 80 的所有访问!男人! (3认同)
  • 更多应用服务器使用不良做法的案例。Windows 有一种机制,旨在使多个进程能够处理端口 80 上的 HTTP 请求。IIS 完全有可能与处理端口 80 请求的多个其他应用程序共存。这就是系统进程为您侦听 80 的原因 - 它可以将每个请求分派给负责特定 URL 的任何进程。不幸的是,如果一个应用程序服务器完全忽略了这一点,并希望完全拥有端口 80,那么一切都会出错。如果应用服务器不忽略约定,则不会出现此问题。 (2认同)

Mar*_*son 0

上次我检查过,你不能结束“系统”进程,如果你这样做,我猜它会产生灾难性的影响。我也不打算在我现在使用的电脑上尝试它!

Windows 本身内部的某些东西似乎正在侦听 :80 - 我猜测这可能是恶意的。找出答案的最佳方法是:

a) 打开本地主机的 Web 浏览器,看看会出现什么

b) 启动 Telnet 并 telnet 到 localhost 80 并运行一些基本的 HTTP GET(例如 GET /)并查看它返回的内容

如果您认为自己可能托管恶意软件,B 是更好的选择,因为您真的不想再次感染自己。虽然也许这并不重要。