使用80端口查找进程

Find process using port 80

我有一个 Windows 服务,它使用 OWIN 自托管 (WebApp.Start) 在端口 80 上侦听。我想使用 PowerShell 脚本以编程方式找到该服务。我有以下 PowerShell 脚本:

netstat -noab | Select-String ":80 " -Context(1,0) `
 | Where { $_.Context.PreContext[0].Trim().StartsWith("[") } `
 | ForEach { ($_.Context.PreContext[0].Substring(2) -split ']')[0] }

然而这只会产生 lsass.exe。

如果我 运行 netstat -noa,我会得到更多的结果,但是列出的所有进程都是系统进程(不是我的)或者当我包含 -b 时有 "Can not obtain ownership information"选项

  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    10.100.18.158:80       10.100.25.102:42967    ESTABLISHED     4
  TCP    10.100.18.158:80       10.100.25.102:42968    ESTABLISHED     4
  TCP    10.100.18.158:80       10.100.25.102:42974    ESTABLISHED     4
  TCP    10.100.18.158:80       10.100.28.8:44763      ESTABLISHED     4
  TCP    10.100.18.158:80       10.100.28.8:44764      ESTABLISHED     4
  TCP    10.100.18.158:80       10.100.28.8:44765      ESTABLISHED     4
  TCP    10.100.18.158:80       10.100.28.8:47400      ESTABLISHED     4
  TCP    [::]:80                [::]:0                 LISTENING       4

我认识到这可能是因为 OWIN 在内部使用 HTTP 侦听器的方式。

有什么方法可以可靠地确定 process/service 使用的端口?

通常这是 HTTP.sys、

的标志

我在这里回答了类似的问题:

但总结是你可以使用 弄清楚为什么会出现这种情况的最佳方法是 运行 从提升的命令提示符下执行以下命令,它将列出所有注册,包括使用它们的进程 ID:

    netsh http show servicestate view=requestq verbose=yes

Request queue name: Request queue is unnamed.
    Version: 2.0
    State: Active
    Request queue 503 verbosity level: Basic
    Max requests: 1000
    Number of active processes attached: 1
    **Process IDs**:
        1120
    URL groups:...

并在其中找到正确的预订,可能类似于:HTTP :// LOCALHOST:80/ 或 LOCALHOST:80,或 *:80

IIS 将使用应用程序池名称向请求队列名称注册预留,这让您可以轻松找出谁在使用它。