我正在尝试将端口 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 部署代理服务”的服务更好的解决方案。
上次我检查过,你不能结束“系统”进程,如果你这样做,我猜它会产生灾难性的影响。我也不打算在我现在使用的电脑上尝试它!
Windows 本身内部的某些东西似乎正在侦听 :80 - 我猜测这可能是恶意的。找出答案的最佳方法是:
a) 打开本地主机的 Web 浏览器,看看会出现什么
b) 启动 Telnet 并 telnet 到 localhost 80 并运行一些基本的 HTTP GET(例如 GET /)并查看它返回的内容
如果您认为自己可能托管恶意软件,B 是更好的选择,因为您真的不想再次感染自己。虽然也许这并不重要。