Битлента
Сетевые команды и утилиты5 мин чтения·

Get-NetTCPConnection: как узнать, какой процесс держит порт и соединение

Get-NetTCPConnection показывает TCP-соединения и порты вместе с идентификатором процесса. Примеры фильтров по состоянию и порту, связка с Get-Process.

Кратко

Get-NetTCPConnection выводит TCP-соединения с адресами, портами, состоянием и номером процесса (OwningProcess). Фильтры -State и -LocalPort помогают найти слушающий порт, а Get-Process по номеру называет программу.

Что умеет командлет и чем он удобнее netstat

Get-NetTCPConnection — это современный аналог netstat для TCP в PowerShell. Он выводит не текст, а объекты, поэтому результат можно фильтровать без разбора строк. Там, где в cmd приходится комбинировать netstat с findstr, здесь достаточно параметров или Where-Object.

Основные свойства в выводе: LocalAddress и LocalPort, RemoteAddress и RemotePort, State и OwningProcess. Последнее — числовой идентификатор процесса, по которому потом находится имя программы. Для обычного просмотра права администратора, как правило, не нужны, хотя сведения о некоторых процессах могут оказаться неполными.

Командлет работает только с TCP. Для UDP есть отдельный Get-NetUDPEndpoint, но у UDP нет понятия соединения, поэтому там вы увидите только открытые конечные точки.

Состояния соединений: что означают значения State

Столбец State описывает стадию соединения. Не все значения вам встретятся, но основные полезно знать.

StateСмысл
ListenПрограмма ждёт входящих подключений на порту
EstablishedСоединение установлено, идёт обмен данными
TimeWaitСоединение закрыто, ожидание перед освобождением
CloseWaitДругая сторона закрыла, локальная программа ещё нет
SynSentОтправлен запрос на соединение, ответа пока нет
BoundПорт привязан, но соединение ещё не начато

Много записей в SynSent при плохой связи указывают на то, что ответы не приходят. Долгие CloseWait часто связаны с ошибкой в самой программе, не закрывающей сокет.

Найти, кто слушает конкретный порт

Самый частый запрос: порт уже занят, какая программа его держит. Порядок действий простой:

  1. Выполните Get-NetTCPConnection -LocalPort 8080 -State Listen, подставив нужный порт.
  2. Запишите значение OwningProcess из найденной строки.
  3. Выполните Get-Process -Id и вставьте это число. Увидите имя процесса.
  4. Решите, что с ним делать: закрыть программу из интерфейса, остановить службу или сменить порт у своего приложения.

Принудительное завершение через Stop-Process допустимо только если вы понимаете, что это за процесс. Нередко порт занимает системная служба, и остановка может нарушить работу Windows. Если не уверены, лучше сменить порт в настройках своей программы.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Фильтры, которые пригодятся чаще всего

Параметры командлета позволяют ограничить список без дополнительных команд:

  • -State Established показывает только действующие соединения;
  • -LocalPort 443 оставляет записи с указанным локальным портом;
  • -RemoteAddress задаёт адрес удалённой стороны;
  • -OwningProcess ограничивает выборку одним процессом.

Для сложных условий используйте конвейер: Get-NetTCPConnection | Where-Object { $_.State -eq "Established" -and $_.RemotePort -eq 443 }. Конструкция читается так: из всех соединений оставить установленные, у которых удалённый порт равен 443.

Чтобы сразу получить имена процессов, соединения можно объединить с Get-Process в одну строку скрипта, но для разового запроса проще выполнить две команды подряд, как в предыдущем разделе.

Как понять, что соединения выглядят подозрительно и сравнение с netstat и ss

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

Но сам по себе вывод ничего не доказывает. Адрес удалённой стороны нужно сопоставить с чем-то известным, например проверить по whois, кому он принадлежит. Если подозрения серьёзные, запустите проверку защитным ПО и измените пароли с чистого устройства. Подробнее о безопасности домашней сети рассказывают материалы раздела про безопасность.

Не завершайте незнакомые системные процессы наугад: сначала выясните, что это.

Результаты разных инструментов можно сопоставлять. В cmd для той же задачи используют netstat -ano, в Linux — ss. Формат вывода отличается, но принцип одинаков: адрес, порт, состояние и процесс. Если вы работаете в основном в PowerShell, Get-NetTCPConnection удобнее, потому что результат сразу готов к фильтрации и сохранению в файл командой Export-Csv.

Для разовой проверки вручную разницы почти нет. Выбирайте то, что вы помните без подсказки.

Пример разбора занятого порта и сохранение результатов и мониторинг

Допустим, ваша программа не запускается и сообщает, что порт 3000 занят. Выполните Get-NetTCPConnection -LocalPort 3000. Если в ответе есть строка с состоянием Listen и OwningProcess 4812, остаётся выполнить Get-Process -Id 4812. Допустим, имя процесса окажется вашей же прежней копией программы, которая не завершилась. Тогда достаточно закрыть её штатно.

Если же команда ничего не вернула или сообщила, что подходящих соединений нет, порт свободен на уровне TCP. Тогда ошибка вызвана иным: правами или самим приложением. Проверьте журнал программы.

Числа здесь приведены как пример, на вашем компьютере будут другие значения. Идентификатор процесса меняется при каждом запуске программы, поэтому записывать его надолго не нужно.

Чтобы сохранить текущий снимок соединений, перенаправьте результат в файл: Get-NetTCPConnection | Export-Csv C:\tcp.csv -NoTypeInformation. Такой файл удобно открыть в таблице и отсортировать по удалённым адресам или по процессам.

Для наблюдения за изменениями делайте снимки с интервалом и сравнивайте их. Это полезно, когда нужно понять, какая программа создаёт соединения в определённые моменты, например при запуске или простое. Постоянный мониторинг в окне PowerShell возможен циклом, но для него подойдут и специализированные средства системы.

Не храните снимки долго: в них попадают адреса, к которым вы обращались, а это сведения о вашей активности.

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

Помните и о пределах метода: список соединений отражает состояние компьютера в момент запроса и ничего не говорит о содержимом обмена. Если нужно понять, что именно передаётся, потребуется отдельный анализ трафика, а он уже затрагивает вопросы приватности. Для повседневных задач достаточно знать, кто слушает порт и с кем установлено соединение.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
powershellпортыnetstatwindows

Часто задаваемые вопросы

Читайте также