Как узнать, какая программа использует тот или иной порт в Windows 7
Существует много различных приложений, показывающих, какое приложение «слушает» тот или иной порт в настоящее время. Вы можете воспользоваться приложениями SysInternals Process Explorer, Sysinternals TCPView, Nirsoft CurrPorts, все они весьма замечательны, но в нужный момент их может просто не оказаться под рукой. Их отсутствие можно восполнить встроенными средствами операционной системы.
В состав Windows входит консольная утилита netstat. Запустив её с параметром /?, вы увидите, что предназначена она для отображения статистики и активных соединений протокола TCP/IP, а также полный перечень её опций:
Из этого перечня нас интересуют в первую очередь эти:
- -a – отображать все соединения и используемые порты.
- -o – отображать числовой идентификатор процесса, отвечающего за конкретное соединение (Process ID, или попросту PID).
Также хочу обратить ваше внимание на опцию –n, которая указывает утилите netstat отображать реальные айпи адреса и цифровые значения портов вместо из DNS-имен и общепринятых псевдонимов. В ряде случаев это может оказаться полезным.
Порядок действий
- Запустите netstat командой
[code]Netstat –ao[/code]
У меня вывод выглядит так: - Теперь найдем, к какому процессу относится, ну например, вот это соединение:
Proto Local Address Foreign Address State PID
TCP 192.168.1.100:49183 bos-m057a-sdr1:https ESTABLISHED 3104
Оно принадлежит процессу с идентификатором 3104, и выполняется к удаленному узлу с именем bos-m057a-sdr1 на 443 порт. Не покидая командной строки, вы можете быстро выяснить, что такое процесс 3104. Вот так:
[code]tasklist | find «3104»[/code]
Итак, это мессенджер Miranda-IM, а соединение выполнено с сервером ICQ.
Если вам претит tasklist, вы можете воспользоваться системным «Диспетчером задач«. Запустите его, нажав CTRL+SHIFT+ESC, перейдите на вкладку «Процессы». В меню «Вид» выберите пункт «Выбрать столбцы», и отметьте столбец PID:
Нужный процесс можно найти по значению этого столбца:
Я лично предпочитаю tasklist по той причине, что в диспетчере задач нет поиска.
Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
Судя по тому, что вы читаете этот текст, вы дочитали эту статью до конца. Если она вам понравилась, поделитесь, пожалуйста, с помощью кнопок ниже. Спасибо за вашу поддержку!
Вы здесь: Главная страница » Windows » Windows 7 » Как узнать, какая программа использует тот или иной порт в Windows 7
Публикации по теме
- Как открыть командную строку от администратора в Windows 11
- Как в Windows 11 отключить брандмауэр
- Как в Windows 11 заменить Терминал на Командную Строку
- Как в Windows 11 сделать сеть частной или открытой
- Как в Windows 11 открыть Терминал Windows
- Как в Windows 11 включить или отключить Wi-Fi
- Как в Windows 11 открыть Командную строку
- Как в Windows 11 включить Режим в самолете (Режим полета)
- Как включить Wake on Lan в Windows 10
- Как открыть Командную строку от Администратора в Windows 10
- Как открыть Командную строку в Windows 10 — все способы
- Как добавить Командную строку в меню Win + X в Windows 10
- Масштабирование окна консоли в Windows 10 (cmd, WSL, PowerShell)
- Как открыть очередь печати принтера из командой строки
- Как убрать пустую строку из вывода команды echo в Windows
Автор: Сергей Ткаченко
Сергей Ткаченко создал этот сайт в далёком 2009 году, и с тех пор продолжает над ним работать, публикуя новые материалы о Windows и её приложениях практически каждый день. Посмотреть все записи автора Сергей Ткаченко
Автор Сергей Ткаченко Опубликовано 20 октября 2011 20 ноября 2020 Рубрики Windows 7 Метки Командная строка, Сеть
Кунг-фу стиля Linux: разбираемся с последовательными портами
Раньше последовательные порты были буквально повсюду. И они, в каком-то смысле, никуда и не делись, так как многое, что подключается к компьютеру по USB, на самом деле, выглядит для системы как последовательный порт. Проблема тут заключается в том, что в наши дни всё в мире завязано на компьютерные сети. Конечно, можно купить терминальный сервер, который преобразует последовательный порт в интерфейс Ethernet. Но это совсем не интересно. Здесь я хочу рассказать о том, как пробрасывать последовательные порты по сети с использованием существующих Linux-инструментов. Решение это не идеальное, оно оказывается работоспособным далеко не всегда, но если оно работает, то работает оно хорошо.
Все переводы серии
Всё — это файл — до тех пор, пока это не так
Когда-то в прошлом ОС Unix — прародитель Linux — практически всё считала файлом. Все файлы были созданы более или менее равными. Программы не заботило то, с чем именно им приходилось работать: с локальными файлами, с файлами, доступными по сети, с файлами, считанными с ленточного накопителя, или с файлами, прибывшими по именованному каналу.
Но ситуация начала меняться. Несмотря на то, что в Linux последовательный порт — это просто файл, у него имеются некоторые особые атрибуты, которые позволяют, например, задать скорость порта в бодах. И, что ещё хуже, некоторые программы слишком много «знали» о файлах и настоятельно требовали придерживаться определённых соглашений по их именованию. Поэтому, в теории, у пользователя должна была быть возможность создать сетевой сокет и подключить один из его концов к последовательному порту, а другой — к программе. После этого всё должно было нормально работать. Но это — в теории.
Переходник USB/последовательный порт
Практика, конечно, отличается от теории. В некоторых случаях, очень простых, это может и сработать. Для настройки вышеописанной схемы работы с последовательными портами можно воспользоваться утилитой socat (это — нечто вроде cat для сокетов). Но если программа, которую мы пытаемся таким образом обмануть, попробует, например, задать скорость порта в бодах, то у неё, вероятно, ничего не получится. А некоторые программы даже не распознают такой вот ненастоящий последовательный порт.
Подробности о socat
Программа socat напоминает волшебный кабель-переходник, который просто передаёт на выход всё, что поступает на его вход, и, кроме того, поддерживает передачу данных в обратном направлении. Программа может читать данные из файлов, из каналов, с различных устройств, из сокетов и из некоторых других мест. Например, может понадобиться создать простой TCP-прокси для перенаправления соединений с одного локального хоста на другой хост. С помощью socat решить эту задачу очень просто:
socat TCP4-LISTEN:88 TCP4:10.1.1.125:8000
То, что получится в результате выполнения этой команды, поддерживает лишь одно соединение. Но socat можно настроить так, чтобы для новых соединений создавались бы форки, что позволяет обрабатывать множество запросов.
Проблема
Правда, если попытаться применить socat для работы с последовательным портом, то получившаяся конструкция вряд ли будет работать без множества дополнительных настроек. Но нужно это так часто, что существует несколько программ, способных нам в этом помочь. В большинстве Linux-дистрибутивов заработает программа ser2net , которая умеет преобразовывать последовательный порт в сокет. Если ser2net кому-то не подойдёт — можно воспользоваться Python-кодом, который имеется среди примеров использования библиотеки pyserial . Правда, та версия pyserial , которая установлена в используемом дистрибутиве, может оказаться слишком старой для поддержки этого кода. Если это так и есть — нужно установить эту библиотеку в обход системного менеджера пакетов, например, воспользовавшись pip .
Далее я исхожу из предположения о том, что для работы с последовательным портом используется ser2net .
Эта утилита обычно устанавливается в виде системной службы, для её настройки можно прибегнуть к редактированию файла /etc/ser2net.conf . Я убрал из этого файла всё, что там было, и добавил туда описания двух нужных мне последовательных портов, указав, кроме прочего, их желаемую скорость в бодах:
7777:telnet:0:/dev/ttyUSB0:115200 8DATABITS NONE 1STOPBIT remctl 7778:telnet:0:/dev/ttyUSB1:115200 8DATABITS NONE 1STOPBIT remctl
После редактирования этого файла сервис надо перезапустить (вероятно, тут подойдёт команда systemctl restart ser2net ; а если она не сработает в первый раз — её стоит попробовать выполнить ещё раз, так как иногда она пытается запустить новую копию сервиса ещё до того, как предыдущая копия полностью завершила работу).
Для целей отладки может понадобиться остановить сервис и запустить его, включив возможность вывода отладочных сообщений:
ser2net -d -C "7778:telnet:0:/dev/ttyUSB1:115200 8DATABITS NONE 1STOPBIT remctl"
Но, в любом случае, после того, как сервер заработает, указанные порты (7777 и 7778 в моём конфигурационном файле) будут работать как соответствующие последовательные порты.
Хочу сделать тут несколько замечаний. Если вы пытаетесь проделать это с 3D-принтером, и если у вас запущено нечто вроде Octoprint, то вам понадобится или закрыть программу, или найти другой способ «отвязать» её от принтерного порта до выполнения вышеописанных настроек. Это применимо к любой программе, удерживающей последовательный порт, который нам нужно открыть. В случае с некоторыми стандартными портами нужно удостовериться в том, что механизм входа в систему не удерживает порт открытым, ожидая пользователя. То, как именно это всё заработает, зависит от конкретной системы. То же самое относится и к файрволу. Если прослушивается порт 7777 и при этом используется файрвол, нужно настроить его так, чтобы он разрешал бы подключения к этому порту. При этом надо помнить о том, что для открытия портов с небольшими номерами обычно нужны root-права.
Клиент
На стороне клиента можно использовать socat , но некоторые программы поймут, что перед ними — не настоящий последовательный порт. Правда, никто не мешает попробовать такую команду:
socat pty,link=$HOME/dev/ttyNET0,waitslave tcp:10.1.1.125:7777
Кое-какие программы, правда, ищут устройства лишь в папке /dev . Если это именно так — понадобится запустить socat с root-правами (воспользовавшись sudo ), а затем нужно будет настроить /dev/ttyNET0 , дав разрешения на чтение и запись (например — sudo chmod 666 /dev/ttyNET0 ).
Тестирование
Если созданный механизм выглядит работоспособным, я, всё равно, не рекомендую сразу же пробовать пользоваться им в программе, для которой он создавался. Советую сначала протестировать его, воспользовавшись чем-то вроде picocom . После запуска socat , например, на клиентской машине должна нормально отработать такая команда:
picocom -b 115200 $HOME/dev/ttyNET0
Утилита picocom может обмениваться данными по сети с использованием виртуального последовательного порта
Если вы попробуете сделать нечто подобное, то вам, понятно, нужно будет указать актуальные для вашей системы имя и скорость порта. У вас, в результате, должна появиться возможность обмениваться данными с удалённым устройством. Если это не получится — нужно разобраться с причинами неполадки до того, как виртуальный порт можно будет использовать в обычной программе. Если в основе вашего последовательного устройства не лежит передача текста, то, возможно, вам больше повезёт с cutecom. Но, к сожалению, эта программа знает о том, что виртуальный последовательный порт — это порт поддельный, и не позволит его выбрать. Правда, программа это опенсорсная, поэтому не слишком сложно будет создать её собственную версию, которая примет любое нужное имя устройства. Конечно, есть и другие варианты. Например — выбрать ненастоящий последовательный порт позволит gtkterm .
Если в ходе тестирования возникнет ошибка протокола, может оказаться так, что последовательный порт перемещён (например — был /dev/ttyUSB0 , а потом стал /dev/ttyUSB1 ), или окажется, что неправильно настроена скорость порта. Сообщения об ошибках не особенно информативны, но при поиске проблем стоит помнить об опции -d программы ser2net .
Документация программы ttynvt устроена просто, но отличается точностью
Когда же дело дойдёт до использования виртуального последовательного порта в обычной программе, всё может заработать как надо. Но может появиться ошибка, или, в некоторых случаях, программа может не позволить выбрать соответствующий файл, так как он не ассоциирован с настоящим последовательным портом. Иногда бывает так, что в чём-то просто не везёт. Правда, тут может пригодиться более интеллектуальный клиент, который знает толк в последовательных портах. Например — ttynvt. Программу, возможно, придётся собрать из исходников, но сделать это очень просто. Она зависит от libfuse , но больше ей ничего особенного не нужно.
После того, как программа будет готова к работе — попробуйте нечто вроде такой команды:
sudo src/ttynvt -M 199 -m 6 -n ttyNET0 -S 10.1.1.125:7777
Будет создано устройство /dev/ttyNET0 (отсюда — и потребность в root-правах). В моей системе у нового устройства были права на чтение и запись root-уровня, оно входило в группу dialout . Если вы воспользуетесь этой программой, то вам, возможно, нужно будет проверить и настроить под себя её разрешения.
Перед использованием в обычной программе то, что получилось, опять же, рекомендуется протестировать с помощью picocom . А во время проведения теста стоит скрестить пальцы и надеяться на удачу.
Почему всё так нескладно?
Я, когда связался с последовательными портами, хотел сделать так, чтобы программа Lightburn для лазерного резака работала бы на мощной машине с использованием удалённого рабочего стола. Мне хотелось, чтобы резак был бы подключён к USB-порту на простом локальном компьютере, и чтобы программа взаимодействовала бы с поддельным портом в более серьёзной системе.
Но, к сожалению, сейчас ситуация такова, что Lightburn — программа слишком умная, которая не ведётся на мои хитрости и не хочет показывать мне виртуальные последовательные порты. И нет известного мне способа заставить её использовать имя файла, выбранное мной. Поэтому я даже не могу проверить то, как она работает с виртуальным портом. Правда, мне удалось протестировать подобные порты с некоторыми другими G-Code-программами. И всё это работало хорошо. Я сообщил о моей проблеме разработчикам Lightburn. Возможно, в тот момент, когда вы это читаете, проблема уже решена.
Парадигма «всё — это файл» чрезвычайно мощна. Но, к сожалению, с каждым годом она всё меньше соответствует реальному положению дел. Это создаёт всё больше препятствий тем, кто хочет сделать в Linux что-то интересное и не совсем обычное. Но, как это обычно бывает в Linux, желаемого, всё равно, как-то можно достичь. Я не сомневаюсь в том, что смог бы отследить вызовы, которые выполняет Lightburn для открытия порта, а после этого смог бы найти способ обмануть программу и подсунуть ей последовательный клиент. Но я надеюсь, что делать этого мне не придётся.
Возникала ли у вас необходимость в работе с виртуальными последовательными портами в Linux?
Как открыть порт 7777 для игры Terraria?
У меня OC Windows Seven (Win 7) , я не могу открыть порт 7777 . как их открывать вообще ?
Дополнен 11 лет назад
у меня не модем а высоко скоросное подключение (через шнур)
Лучший ответ
1. Если есть модем, роутер или Wi-Fi, которые используют технологию NAT, нужно в их настройках открыть порты.
2. На компьютере порт добавить в исключения антивируса и фаервола или их отключить.
3. Запустить сервер, чтобы сервер открыл порт и начал его прослушивать.
4. Если провайдер использует прокси сервер или NAT, то здесь порт никак не открыть.
Остальные ответы
Похожие вопросы
Как узнать какой порт использует программа
На компьютере может быть установлено довольно много программ и все они резервируют в операционной системе определенный порт для взаимодействия с другим программным обеспечением по сети. В большинстве случаев пользователь заранее знает какой порт использует программа. Это может быть официально зарезервированный порт, под определенный сетевой протокол. Например почтовые программы используют для приема почты протокол POP3 и резервируют порт 110. Бывают неофициально резервируемые порты, например порт 1540 используемый агентом сервера 1С:Предприятие. Информацию об используемых неофициальных портах разработчики программного обеспечения указывают в документации.
На компьютере может быть установлено довольно много программ и все они резервируют в операционной системе определенный порт для взаимодействия с другим программным обеспечением по сети. В большинстве случаев пользователь заранее знает какой порт использует программа. Это может быть официально зарезервированный порт, под определенный сетевой протокол. Например почтовые программы используют для приема почты протокол POP3 и резервируют порт 110. Бывают неофициально резервируемые порты, например порт 1540 используемый агентом сервера 1С:Предприятие. Информацию об используемых неофициальных портах разработчики программного обеспечения указывают в документации.
Определения порта программы стандартными средствами Windows
Узнать какой порт использует программа в операционной системе Windows можно используя инструменты командной строки — tasklist и netstat. С помощью tasklist узнаем номер идентификатора процесса — PID, затем в netstat находим номер порта этого процесса.
Поиск идентификатора процесса PID
1. Открываем командную строку: сочетание клавиш и вводим команду CMD.
2. Запускаем tasklist и находим PID процесса.
Если необходимо отобразить полный список процессов, в том числе служебных и системных, необходимо использовать tasklist без аргументов.
tasklist
Команда tasklist /fi «status eq running» найдет только те процессы, которые были запущенны программами. Это сократит список процессов и облегчит поиск.
tasklist /fi "status eq running"
Находим в списке нужную программу, например OneDrive.exe и запоминаем соответствующий PID.
Поиск порта процесса
Для получения списка используемых портов воспользуемся утилитой командной строки netstat.
netstat -aon
B netstat были использованы слtдующие аргументы:
-a — показывает все сокеты, используемые процессами
-o — показывает PID процесса
-n — показывает адреса в числовом формате
В результате будет получен довольно крупный список активных сетевых соединений, среди которых необходимо найти соединение с нужным PID.
Чтобы отфильтровать список и сразу найти сетевое соединение с нужным PID перенаправим результаты netstat в утилиту findstr «PID_number», где PID_number — идентификатор искомого процесса.
netstat -aon | findstr "15304"
В найденных результатах видно, что процесс c PID 15304 (программа OneDrive.exe) использует несколько сетевых портов: 11906, 11907, 11908.
Обращайте внимание на то, для какого траспортного протокола открыт порт: ТСР или UDP. Это информация будет важна, когда будете пробрасывать порт через межсетевой экран.
Программы для просмотра сетевых соединений
Этот способ подойдет для тех, кто не хочет погружаться в работу утилит командной строки Windows, а желает быстро и просто получить информацию о портах, которые использует программа, в графическом интерфейсе.
Без труда в интернете можно найти 2 бесплатные программы для полчения списка сетевых соединений операционной системы — это «TCPView» и «Curr ports».
TCPView
TCPView — программа из набора утилит Sysinternals от Марка Руссиновича, с некоторых пор ставшей частью самого Microsoft. Программа не требует установки, занимает небольшой объем дискового пространства и скачать ее можно с официального сайта Майкрософт: https://docs.microsoft.com/ru-ru/sysinternals/downloads/tcpview .
После запуска программы будет сразу показан список всех сетевых соединений процессов с информацией о протоколе, локальном и удаленном адресе, локальном и удаленном порте соединения. Список можно фильтровать, сортировать и следить за изменениями онлайн. В дополнение к этому можно убить какой-либо процесс или определить кому принадлежит ip-адрес хоста, с которым установлено соединение.
Из мелких недостатков — отсутствие русского языка.
CurrPorts
CurrPorts — программа от проекта под названием NirSoft, который так же специализируется на разработке простых и бесплатных утилит для Windows. Программа так же не требует установки, мало весит и в целом очень похожа на TCPView, но имеет более аскетичный интерфейс. Скачать программу можно с официального сайта проекта: https://www.nirsoft.net/utils/cports.html#DownloadLinks .
Из плюсов программы следует отметить наличие русского языка. Чтобы русифицировать программу нужно скачать отдельный файл русификации и положить его в папку с программой.
Остались вопросы или что-то непонятно — смело оставляйте комментарии.