Monitoring ports on windows

Portmon for Windows v3.03

By Mark Russinovich

Published: January 12, 2012

Download Portmon (226 KB)
Run now from Sysinternals Live.

Introduction

Portmon is a utility that monitors and displays all serial and parallel port activity on a system. It has advanced filtering and search capabilities that make it a powerful tool for exploring the way Windows works, seeing how applications use ports, or tracking down problems in system or application configurations.

Portmon 3.x

Version 3.x of Portmon marks the introduction of a number of powerful features.

  • Remote monitoring: Capture kernel-mode and/or Win32 debug output from any computer accessible via TCP/IP — even across the Internet. You can monitor multiple remote computers simultaneously. Portmon will even install its client software itself if you are running it on a Windows NT/2K system and are capturing from another Windows NT/2K system in the same Network Neighborhood.
  • Most-recent-filter lists:Portmon has been extended with powerful filtering capabilities and it remembers your most recent filter selections, with an interface that makes it easy to reselect them.
  • Clipboard copy: Select multiple lines in the output window and copy their contents to the clipboard.
  • Highlighting: Highlight debug output that matches your highlighting filter, and even customize the highlighting colors.
  • Log-to-file: Write debug output to a file as its being captured.
  • Printing: Print all or part of captured debug output to a printer.
  • One-file payload:Portmon is now implemented as one file.

The on-line help-file describes all these features, and more, in detail.

Installation and Use

Simply execute the Portmon program file (portmon.exe) and Portmon will immediately start capturing debug output. To run Portmon on Windows 95 you must get the WinSock2 update from Microsoft. Note that if you run Portmon on Windows NT/2K portmon.exe must be located on a non-network drive and you must have administrative privilege. Menus, hot-keys, or toolbar buttons can be used to clear the window, save the monitored data to a file, search output, change the window font, and more. The on-line help describes all of Portmon’s features.

Portmon understands all serial and parallel port I/O control (IOCTLs) commands and will display them along with interesting information regarding their associated parameters. For read and write requests Portmon displays the first several dozen bytes of the buffer, using ‘.’ to represent non-printable characters. The Show Hex menu option lets you toggle between ASCII and raw hex output of buffer data.

How it Works: WinNT

The Portmon GUI is responsible for identifying serial and parallel ports. It does so by enumerating the serial ports that are configured under HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm and the parallel ports defined under HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Parallel Ports. These keys contain the mappings between serial and parallel port device names and the Win32-accessible names.

When you select a port to monitor, Portmon sends a request to its device driver that includes the NT name (e.g. \device\serial0) that you are interested in. The driver uses standard filtering APIs to attach its own filter device object to the target device object. First, it uses ZwCreateFile to open the target device. Then it translates the handle it receives back from ZwCreateFile to a device object pointer. After creating its own filter device object that matches the characteristics of the target, the driver calls IoAttachDeviceByPointer to establish the filter. From that point on the Portmon driver will see all requests aimed at the target device.

Portmon has built-in knowledge of all standard serial and parallel port IOCTLs, which are the primary way that applications and drivers configure and read status information from ports. The IOCTLs are defined in the DDK file \ddk\src\comm\inc\ntddser.h and \ddk\src\comm\inc\ntddpar.h, and some are documented in the DDK.

How it Works: Windows 95 and 98

On Windows 95 and 98, the Portmon GUI relies on a dynamically loaded VxD to capture serial and parallel activity. The Windows VCOMM (Virtual Communications) device driver serves as the interface to parallel and serial devices, so applications that access ports indirectly use its services. The Portmon VxD uses standard VxD service hooking to intercept all accesses to VCOMM’s functions. Like its NT device driver, Portmon‘s VxD interprets requests to display them in a friendly format. On Windows 95 and 98 Portmon monitors all ports so there is no port selection like on NT.

Читайте также:  Настройка linux mint экран

Download Portmon (226 KB)

Run now from Sysinternals Live.

Стандартный монитор порта для TCP/IP

В этой статье описывается, как стандартный монитор портов работает в Microsoft Windows Server 2003, и сравнивает его с монитором порта LPR.

Исходная версия продукта: Windows Server 2003
Исходный номер КБ: 814586

Аннотация

В этой пошаговой статье описывается установка стандартного монитора портов. Стандартный монитор портов подключает клиентов к сетевым принтерам, которые используют протокол TCP/IP.

Microsoft Windows Server 2003 предлагает стандартный монитор портов для устройств сетевой печати в качестве альтернативы монитору порта LPR. Стандартный монитор порта был представлен в Microsoft Windows 2000. В Windows Server 2003 стандартный монитор портов был обновлен, чтобы обеспечить лучшую производительность и более подробное состояние устройства.

Стандартный монитор портов использует протокол SNMP для чтения конфигурации целевого устройства печати и определения подробного состояния устройства. Кроме того, стандартный монитор портов обеспечивает более точную отчетность об ошибках, чем сообщения об ошибках ограниченной печати, которые включены другими мониторами портов, такими как монитор порта LPR. Например, стандартный монитор портов поддерживает ошибку «выход из бумаги».

Если стандартный монитор портов не может использовать порты TCP по умолчанию для настройки целевого устройства печати и SNMP, стандартный монитор портов использует протокол LPR. (Целевое устройство должно поддерживать протокол LPR.)

По умолчанию TCP-порт назначения — 9100. Исходный порт TCP по умолчанию — это случайно выбранный открытый порт больше 1023.

Для просмотра состояния стандартных событий монитора порта можно использовать веб-интерфейс любого подключенного к Интернету клиента.

Установка стандартного монитора порта

  1. Нажмите Пуск и выберите пункт Принтеры и факсы.
  2. Дважды щелкните «Добавить принтер».
  3. Когда запускается мастер добавления нового принтера, нажмите кнопку «Далее».
  4. Выберите тип принтера, который нужно настроить, и нажмите кнопку «Далее».
  5. Нажмите кнопку «Создать новый порт», выберите «Стандартный порт TCP/IP» в списке «Тип порта» и нажмите кнопку «Далее».
  6. Следуйте инструкциям на экране, чтобы завершить мастер добавления стандартного порта принтера TCP/IP. По мере продолжения стандартный монитор порта запрашивает устройство печати и пытается настроить его на основе ответов SNMP. Если модель принтера и параметры принтера определяются с помощью SNMP, выбирать принтер не нужно. Принтер настраивается автоматически.

Дополнительные сведения

Для устройств печати, подключенных к сети, оптимальным вариантом является стандартный монитор портов. В отличие от монитора порта LPR, стандарт выбора в сетевой печати за последние несколько лет, стандартный монитор порта быстрее, масштабируется и имеет возможность двухнаправленной печати. Монитор порта LPR, напротив, ограничен во всех этих областях.

Стандартный монитор портов использует протоколы печати RAW или LPR для отправки документов на принтер. Вместе эти протоколы поддерживают большинство текущих принтеров TCP/IP. Не путайте эти протоколы печати с транспортными протоколами, такими как TCP/IP или DLC.

По умолчанию стандартный монитор порта отклоняется от монитора порта LPR двумя способами:

Port Monitors

Port monitors consist of user-mode DLLs. They are responsible for providing a communications path between the user-mode print spooler and the kernel-mode port drivers that access I/O port hardware. A port monitor typically uses the CreateFile, WriteFile, ReadFile, and DeviceIOControl functions, described in the Microsoft Windows SDK documentation, to communicate with kernel-mode port drivers. Port monitors are also responsible for management and configuration of a server’s printer ports, as described in Managing a Port.

An NT-based-operating system user’s view of a «printer» is really a print queue, to which one or more physical printer devices can be connected. A port is the physical connection between the print queue and a single printer device. Each port monitor supports one or more instances of one or more types of ports. For example Localmon.dll, the sample port monitor, can support all of a server’s local COM and LPT ports. (The print folder assigns ports to port monitors by calling the Windows SDK documentation’s AddPrinter function.)

Читайте также:  Загрузочная флешка dmg под windows

For print queues representing multiple printer devices (through multiple ports), the spooler sends each print job to the first available port. If the port monitor indicates that a specified port is busy or has encountered an error, the spooler resubmits the job to the queue, specifying another port supported by the port monitor.

Besides Localmon.dll, Windows 2000 and later operating system versions provide several additional port monitors. The Windows 2000 Server Resource Kit describes each of these port monitors. (This resource may not be available in some languages and countries.)

Customized port monitors can be written to support additional types of I/O port hardware.

For Windows 2000 and later, each port monitor is divided into two DLLs:

Port Monitor UI DLL
A port monitor’s user interface DLL contains user interface functionality and executes on print client systems.

This DLL must reside in the client system’s System32 subdirectory.

Port Monitor Server DLL
A port monitor’s server DLL contains port communications functionality and executes on print servers. It must not display a user interface.

The UI DLL communicates with the server DLL by calling the spooler’s XcvData function.

A sample port monitor is included in the Windows Driver Kit (WDK).

Утилиты мониторинга портов TCPView и TCPVCon

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

Читайте также:  Красивый linux для слабого пк
Экран 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

Поделитесь материалом с коллегами и друзьями

Оцените статью