Преодолеваем ограничения Netstat

Администраторам Windows то и дело приходится проверять порты TCP/IP, выясняя, какие порты сетевых приложений сервера являются активными, чтобы убедиться, что нет нерегламентированного открытия портов, и выяснить, с какими удаленными системами взаимодействует компьютер. Самый простой способ — воспользоваться для получения такой информации встроенным в Windows инструментом Netstat. Однако у Netstat есть несколько ограничений. Версия, поставляемая с Windows 2000 и более ранними операционными системами, не выдает сведений о процессе, запущенном на конечной точке; версия, поставляемая с Windows Server 2003 и Windows XP, показывает идентификатор (PID) активного процесса, но не отображаемое имя процесса. Эти ограничения мешают понять, какой процесс владеет открытым сетевым портом. Кроме того, при работе с Netstat неудобно следить за изменениями в использовании порта TCP/IP.

TCPView компании Sysinternals - бесплатное приложение с графическим интерфейсом, работающее на версиях Windows начиная с NT 4.0, отображает расширенный набор сведений по сравнению с информацией, выдаваемой Netstat, и предоставляет удобный способ следить за изменениями в использовании порта TCP/IP. Загрузить TCPView и его версию для командной строки, TCPVCon, можно по адресу http://www.sysinternals.com.

Как работать с конечной точкой

Когда выполняется Netstat без аргументов, команда выводит список конечных точек TCP, которые находятся в состоянии установленного соединения, вместе с набором локальных IP-адресов каждого соединения и IP-адресом удаленного компьютера для этого соединения. Поскольку TCP представляет собой протокол, ориентированный на соединение, TCP-коммуникация требует двустороннего обмена данными для установления соединения на время обмена.

Ключ -a утилиты Netstat отображает все активные конечные точки TCP и UDP, включая конечные точки TCP в других состояниях, таких как LISTENING (ожидание соединения) и TIME_WAIT (закрыто). UDP не ориентирован на соединения, поэтому UDP-сообщения могут быть отправлены на любые удаленные IP-адреса. Таким образом, конечные точки UDP не имеют статусов и к ним неприменимо понятие статического связывания удаленных IP-адресов.

Версия Netstat, поставляемая с Windows 2003 и XP, располагает ключом -o, который выдает информацию об идентификаторах процессов (PID), открывших каждую конечную точку. Но при использовании ключа -o необходим еще один инструмент, такой как Task Manager, для того чтобы связать PID с отображаемым именем.

В XP Service Pack 2 (SP2) представлен еще один ключ Netstat, -b, который также будет использоваться в Windows 2003 SP1. Этот ключ выводит отображаемое имя активного процесса внизу строки вывода конечной точки. Для конечных точек, открытых процессами svchost.exe или rundll.exe, он выводит имена DLL-файлов, которые были в стеке выполняемых задач, открывших конечную точку. Нужно иметь в виду, что в тексте справки по Netstat файлы DLL называются компонентами. Поскольку Svchost — главный процесс, который загружает службы Windows, реализованные в DLL, а Rundll32 — главный процесс Control Panel для элементов DLL из Control Panel, информация о DLL может помочь определить, какая служба или приложение Control Panel открыли конечную точку. К сожалению, ошибка в способе, которым Netstat исследует стек данных, настолько замедляет вывод результатов, что ключ -b почти бесполезен.

TCPView

Окно TCPView, показанное на экране 1, выдает основную информацию по конечной точке, как и Netstat. Но следует обратить внимание на столбец Process, который содержит пиктограмму, имя и PID процесса, владеющего каждой конечной точкой.

Экран 1. Окно TCPView

В тех случаях, когда отображаемое имя малосодержательно, TCPView предоставляет дополнительную информацию о процессе. Для того чтобы просмотреть эту информацию, следует дважды щелкнуть конечную точку, задействованную данным процессом, или выделить конечную точку и выбрать в меню процесса пункт Process Properties, в результате чего откроется диалоговое окно свойств, показанное на экране 2. Это диалоговое окно содержит полный путь к файлу образа процесса, команду, которая использовалась для запуска процесса, и те сведения, которые TCPView извлекает из версии образа (если она доступна): описание образа, наименование поставщика и номер версии.

Экран 2. Дополнительная информация о процессе

Чтобы преобразовать имя DNS (например, www.winnetmag.com:http) в соответствующий IP-адрес и номер порта, нужно просто нажать Ctrl+R, щелкнуть кнопку преобразования адресов утилиты или выбрать Resolve Addresses в меню Options. TCPView переключится в режим отображения всех адресов в цифровом виде; тем же способом можно перейти обратно в режим имен.

Если понаблюдать за работой TCPView, можно заметить, что строки с конечными точками ненадолго подсвечиваются красным, зеленым или желтым цветом. Это делается для того, чтобы привлечь внимание пользователя к происходящим изменениям. Вновь открытые конечные точки будут подсвечиваться зеленым, конечные точки, которые были закрыты, будут подсвечиваться красным, а конечные точки TCP, у которых изменился статус, будут окрашены желтым. Эти цвета остаются неизменными, пока не произойдет три обновления экрана. Интервал обновления TCPView по умолчанию равен 1 секунде, но пользователь может изменить его или даже совсем приостановить обновление, выбрав в меню пункт View, Update Speed.

Также с помощью данного инструмента можно закрыть установленное приложением TCP-соединение. Для этого следует выделить строку соединения и выбрать File, Close Connections; другой способ - щелкнуть правой кнопкой на записи и выбрать в контекстном меню Close Connections.

TCPVCon

TCPVCon — это вариант TCPView для командной строки. Так же, как и Netstat, будучи выполненным без указания аргументов, TCPVCon просто выводит перечень подключенных конечных точек TCP или показывает перечень всех конечных точек, когда добавляется ключ -a. Но в отличие от Netstat, TCPVCon выводит данные в формате стандартного 80-позиционного окна командной строки (см. экран 3) для облегчения чтения. Другое отличие TCPVCon от Netstat состоит в том, что TCPVCon всегда выводит полный путь и PID процесса для каждой конечной точки, а не только имя процесса. Если пользователя интересуют конечные точки TCP/IP конкретного процесса, можно указать имя процесса или PID в командной строке TCPVCon, и инструмент отфильтрует конечные точки только этого процесса. С помощью ключа -c можно организовать вывод в формате с разделителем в виде запятой (CSV). Эта функция превращает TCPVCon в простой инструмент аудита, собирающий данные для хранения в базе, к которой потом можно делать запросы.

Экран 3. Результаты работы TCPVCon

Инструменты изнутри

При работе с TCPView и TCPVCon на Windows 2003 или XP инструменты используют недокументированные функции (представленные в XP), которые получают информацию о конечных точках TCP/IP, включая PID процесса, открывшего каждую конечную точку. Инструменты также используют документированные функции нумерации процесса, получающие список процессов и позволяющие конвертировать идентификаторы PID в имена процессов. Чтобы получить подробную информацию о процессе, необходимо запускать утилиты от имени учетной записи, имеющей привилегию Debug programs.

В Windows 2000 и NT инструменты задействуют недокументированные интерфейсы для запроса информации о конечных точках. Поскольку эти ранние интерфейсы не поддерживают информацию о PID, утилиты применяют встроенный драйвер устройства, который они устанавливают во время запуска для привязки конечных точек к процессам. Следовательно, для использования инструментов в Windows 2000 и NT учетная запись должна иметь и привилегию Debug programs, и привилегию Load drivers.

В целом TCPView и TCPVCon позволяют успешно преодолеть ограничения Netstat и могут стать отличным дополнением к набору инструментов системного администратора. Способность этих инструментов показывать отображаемые имена процессов и другую информацию о процессах, разрывать соединения и использовать выделение цветом в зависимости от произошедших изменений поможет сэкономить время и получить ясное представление о работе сети.


Редактор Windows & .NET Magazine, автор многих популярных утилит для Windows, в том числе Process Explorer и Regmon. mark@sysinternals.com