Найти процесс, использующий порт 80

У меня есть служба Windows, которая прослушивает порт 80, используя самостоятельный хостинг OWIN (WebApp.Start). Я хочу найти эту службу программно, используя сценарий 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, я получаю еще несколько результатов, но все перечисленные процессы являются системными процессами (не моими) или имеют "Can not obtain ownership information", когда я включаю параметр -b

  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.

Есть ли способ надежно определить процесс/службу с использованием порта?


person Jeff    schedule 11.11.2015    source источник


Ответы (1)


Обычно это признак того, что это HTTP.sys,

Я ответил что-то подобное здесь: Невозможно привязать к порту 80, Блокировка Microsoft-HTTPAPI/2.0

но в целом вы можете использовать. Лучший способ выяснить, почему это так, — запустить следующую команду из командной строки с повышенными привилегиями, и она выведет список всех регистраций, включая идентификаторы процессов, использующие их:

    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 зарегистрирует резервирование с именем очереди запросов, используя имя пула приложений, что позволит вам легко определить, кто его использует.

person Carlos Aguilar Mares    schedule 11.11.2015
comment
В данном случае это не IIS... это служба Windows, на которой размещается прослушиватель http с использованием http.sys... Итак, как я могу узнать идентификатор процесса? Не похоже, что netsh show скажет мне об этом - person Jeff; 12.11.2015
comment
Возможно, процесс даже не запущен, вы запускали состояние службы выше? это может быть единственный способ, по крайней мере, увидеть AppID, и, надеюсь, вы сможете найти его. - person Carlos Aguilar Mares; 12.11.2015
comment
Он работает, я это знаю. Хотя приложение, похоже, ничего однозначно не идентифицирует для меня ... Нет ли другого пути? - person Jeff; 12.11.2015
comment
Пожалуйста, попробуйте запустить параметр view=requestq, который выведет связанные идентификаторы процессов.: netsh http show servicestate view=requestq verbose=yes - person Carlos Aguilar Mares; 12.11.2015
comment
Ты супер классный. Пожалуйста, добавьте к вашему ответу. - person Jeff; 12.11.2015