If you’re checking from the outside, not from the server itself, and you don’t want to bother installing telnet (as it doesn’t come with the last versions of Windows) or any other software, then you have native PowerShell:
Test-NetConnection -Port 800 -ComputerName 192.168.0.1 -InformationLevel Detailed
(Unfortunately this only works with PowerShell 4.0 or newer. To check your PowerShell version, type $PSVersionTable
.)
PS: Note, these days there are some claims on the twittersphere that hint that this answer could be improved by mentioning «Test-Connection» from PowerShell Core, or the shortcut «tnc». See https://twitter.com/david_obrien/status/1214082339203993600 and help me edit this answer to improve it please!
(If you have a PSVersion < 4.0, you’re out of luck. Check this table:
Even though you can upgrade your version of PowerShell by installing the Windows Management Framework 4.0, it didn’t do the trick for me, Test-NetConnection cmdlet is still not available).
Обмен данными по локальной сети или через интернет осуществляется путем подключения друг к другу двух компьютеров. Чтобы получить данные с удаленного сервера, требуется соблюсти несколько условий – наличие IP-адреса у источника и получателя, выбор конкретного протокола приема-передачи и открытые порты на обоих компьютерах.
Что такое порт компьютера
Порт – это виртуальное дополнение к сетевому адресу, которое позволяет разделить запросы разных приложений и обрабатывать их автономно. Часть постоянно занята системными службами Windows или другой операционки, остальные свободны для использования прикладными программами, в том числе запускаемыми на удаленных серверах.
Особенности портов:
- Иногда порты путают с разъемами на материнской плате (формально они и являются ими, но там речь идет о подключении физических устройств).
- Общее количество портов составляет 65535. Они имеют определенное назначение, например, 20-21 «по умолчанию» используется для соединения по FTP, а 110 выделен под почтовый протокол POP3.
- Сочетание IP-адреса и порта принято называть сокетом или файловым дескриптором, при помощи которого программа передает данные.
Перед подключением к какому-либо порту рекомендуется проверить, свободен ли он. Если нет, то операционная система выдаст ошибку, и соединение прервется. Многие программы делают проверку в автоматическом режиме и сами пытаются менять номера в поиске незанятого подключения. Но в ряде случаев это требуется сделать вручную, например, при отладке собственного кода.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Как проверить, открыт ли порт для подключения
Порты присутствуют у всех сетевых устройств, включая маршрутизаторы и роутеры, поэтому при анализе среды важно понимать, какой именно узел проверяется. На этом отчасти основаны системы безопасности, когда ради блокировки вероятных хакерских атак закрываются все свободные сокеты и открываются только те, которые используются корпоративным софтом.
Существует три основных способа проверки открытых портов:
- Специализированные онлайн-сервисы.
- Прикладные приложения, запускаемые на компьютере.
- Встроенные в операционную систему утилиты.
Выбор решения зависит от задач. Так, если требуется открыть доступ к своему компьютеру извне, можно воспользоваться сервисами 2ip.ru или portscan.ru. При локальных работах удобнее приложения типа Portforward Network Utilities или штатная утилита TELNET. Она поставляется в «стандартной» сборке Windows и доступна для запуска в консоли CMD.
Перечень открытых портов на локальном компьютере
Открытый порт на домашнем или рабочем компьютере – это фактически «дыра» в безопасности и риски утраты контроля над ситуацией. Именно через них проникают трояны и иные вирусы, которые имеют цель предоставить злоумышленнику возможность удаленного подключения к ПК без разрешения владельца.
Проверить занятые порты легко:
- Нужно нажать комбинацию клавиш <Win+R>.
- Ввести команду CMD и нажать кнопку Enter.
- Ввести команду netstat –a и повторно нажать Enter.
В консоли отобразится перечень занятых портов с указанием, какое приложение или служба ими «распоряжается». Такой вариант проверки интересен тем, что он дает объективную картину. Если рассчитывать только на онлайн-сервисы, иногда создается впечатление, что открытых портов нет. Эффект создается из-за блокировки внешних запросов брандмауэром Windows или другим ПО.
Если хочется изучить список на предмет «посторонних» программ, его лучше выгрузить в файл при помощи команды netstat –a >имя.txt. По умолчанию список сохраняется в каталоге пользователя, в аккаунте которого происходил запуск утилиты (типа C:\\Пользователи\User\). При желании перед запуском утилиты можно перейти в корень диска командой cd c:\.
Просмотр открытых портов на удаленном компьютере
При взаимодействии с удаленным сервером используется другая утилита – TELNET. В Windows она по умолчанию отключена, потому что не относится к пользовательским приложениям. Перед первым запуском придется провести «активацию». Существует два способа включения – в консоли или через графический интерфейс.
Активация заключается во вводе специальной команды:
dism /online /Enable-Feature /FeatureName:TelnetClient
Она сработает только при запуске консоли с правами администратора. Схема открытия приложения несколько иная:
- Нажать комбинацию клавиш <Win+X>.
- Выбрать пункт «Командная строка (администратор)».
- В открывшемся окне ввести команду активации telnet.
Если пользователь предпочитает управлять компьютером через графический интерфейс, нужно запустить панель управления, а в ней утилиту «Удаление программы». В открывшемся окне нужно перейти в раздел «Включение или отключение компонентов Windows», далее в общем списке найти строку «Telnet», поставить в ней галочку и нажать кнопку ОК. Все, служба активирована и готова к использованию (даже в консоли).
Синтаксис:
telnet опции хост порт
Хост – это домен или его IP-адрес, порт – виртуальное дополнение для образования сокета, опции же позволяют менять режим подключения. Их основные варианты:
- -4 – использовать адреса стандарта IPV4;
- -6 – использовать адреса стандарта IPV6;
- -8 – применять 8-битную кодировку типа Unicode;
- -E – отключение поддержки Escape-последовательностей;
- -a – вход с именем пользователя из переменного окружения User;
- -b – использовать локальный сокет;
- -d – включить режим отладки;
- -p – режим эмуляции rlogin;
- -e – задать символ начала Escape-последовательности;
- -l – пользователь для авторизации на удаленном сервере.
Простейший вариант проверки открытых портов – это ввод команды без опций:
telnet 10.0.119.127 80
Если на экран будет выведено сообщение «Сбой подключения», порт закрыт, нужно подбирать другой номер. Если порт открыт, пользователь увидит пустой экран или приглашение со стороны сервера ввести логин и пароль.
Содержимое | |
---|---|
Выключение компьютеров в домене по списку |
Монолитный скрипт выключения компьютеров в домене по списку: @ECHO OFF SET "BEGIN_MARKER=:ENDFILE1" SET "END_MARKER=:ENDFILE2" |
Логофф сессий отключенных пользователей на терминальном сервере |
Убить все отключенные сессии: @ECHO OFF FOR /F "USEBACKQ TOKENS=2 DELIMS= " %%a IN (`quser^|findstr /b /v "^>"^|findstr /i /v " ID "^|findstr /v /i "rdp-tcp"`) DO logoff %%~a EXIT 0 |
Ошибка теневого копирования тома (VSS) |
Иногда на работающем сервере возникает такая ошибка: |
Интерпретатор CMD — вывод переменных со спецсимволами на экран и в файл |
Известная, но слабоосвещенная тема — обработка в коммандном интерпретаторе CMD данных со спецсимволами. |
Скрипты для CMD |
Скрипты выполняемые интерпретатором CMD.EXE — стандартной консольной оболочкой для Win2000/WinXP/Vista/Seven/Win8/Win2000 Server/Win2003/Win2008. |
Страховое копирование по списку |
Относительно простой вариант резервного копирования по списку файлов/папок с учетом типа резервной копии и количества хранимых копий по типам. Классические типы: дневная-недельная-месячная-годовая копии. Кодировка скрипта CP866…. |
Преобразование файлов 1CClientBankExchange в табличную форму |
Лично мне периодически приходилось сталкиваться с обработкой данных не в табличной форме, а в «именованном формате» то есть когда каждый параметр пишется на отдельной строке в виде Параметр=Значение параметра причем файл… |
Чтение данных из реестра в переменную окружения |
Продвинутый кросплатформенный модуль для встраивания в скрипты, позволяющий в удобной форме получать данные из реестра для дальнейшего использования(как всегда — кодировка скрипта CP866): |
В PowerShell для проверки доступности порта на удаленном компьютере можно использовать командлет Test-NetConnection. Этот командлет позволяет проверить доступность удаленного сервера или службы на нем, протестировать блокируется ли TCP порт файерволами, проверить доступность по ICMP и маршрутизацию. По сути, командлет Test-NetConnection позволяет заменить сразу несколько привычных сетевых утилит: ping, traceroute, telnet, сканер TCP портов и т.д.
Содержание:
- Проверка доступности TCP порта с помощью Test-NetConnection
- PowerShell: проверка открытых портов на нескольких IP хостах
- IP сканер сети на PowerShell
- Вывести список открытых портов в Windows
Проверка доступности TCP порта с помощью Test-NetConnection
Командлет Test-NetConnection можно использовать только для проверки TCP портов. Например, чтобы проверить, что на почтовом сервере открыт порт TCP 25 (SMTP протокол), выполните команду:
Test-NetConnection -ComputerName msk-msg01 -Port 25
Примечание. С помощью командлета Test-NetConnection можно проверить только TCP соединение, для проверки доступности UDP портов он не применим.
В сокращенном виде аналогичная команда выглядит так:
TNC msk-mail1 -Port 25
Разберем результат команды:
ComputerName : msk-msg01 RemoteAddress : 10.10.1.7 RemotePort : 25 InterfaceAlias : CORP SourceAddress : 10.10.1.70 PingSucceeded : True PingReplyDetails (RTT) : 0 ms TcpTestSucceeded : True
Как вы видите, командлет выполняет разрешение имени сервера в IP адрес, выполняется проверка ответа ICMP (аналог ping) и проверка ответа от TCP порта (доступность). Указанный сервер доступен по ICMP (
PingSucceeded = True
) и 25 TCP порт также отвечает (
RemotePort=25, TcpTestSucceeded= True
).
Примечание. Если команда вернула PingSucceeded=False и TcpTestSucceeded= True, скорее всего означает, что на удаленном сервере запрещен ICMP Ping.
Если выполнить команду Test-NetConnection без параметров, выполнится проверка наличия подключения к интернету на компьютере (проверяется доступность узла internetbeacon.msedge.net):
Для вывода детальной информации при проверки удаленного TCP порта можно добавить опцию -InformationLevel Detailed:
TNC 192.168.31.102 -Port 3389 -InformationLevel Detailed
Доступность популярных сервисов Windows на удаленном компьютере (HTTP, RDP, SMB, WINRM) можно проверить с помощью параметра CommonTCPPort.
Например, чтобы проверить доступность веб-сервера, можно использовать команду:
Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP
Или проверить доступность стандартного RDP порта (TCP/3389):
Test-NetConnection msk-rds1 –CommonTCPPort RDP
Можно вывести все параметры, которые возвращает командлет Test-NetConnection:
Test-NetConnection msk-man01 -port 445|Format-List *
Если нужна только информация по доступности TCP порта, в более лаконичном виде проверка может быть выполнена так:
TNC msk-mail1 -Port 25 -InformationLevel Quiet
Командлет вернул True, значит удаленный порт доступен.
Совет. В предыдущих версиях Windows PowerShell (до версии 4.0) проверить доступность удаленного TCP порта можно было так:
(New-Object System.Net.Sockets.TcpClient).Connect('msk-msg01', 25)
Командлет Test-NetConnection можно использовать для трассировки маршрута до удаленного сервера при помощи параметра –TraceRoute (аналог команды трассировки маршрута tracert). С помощью параметра –Hops можно ограничить максимальное количество хопов при проверке.
Test-NetConnection msk-man01 –TraceRoute
Командлет вернул сетевую задержку при доступе к серверу в миллисекундах (
PingReplyDetails (RTT) : 41 ms
) и все IP адреса маршрутизаторов на пути до целевого сервера.
PowerShell: проверка открытых портов на нескольких IP хостах
С помощью PowerShell можно проверить доступность определенного порта на нескольких компьютерах. Сохраните список серверов или IP адресов в текстовый файл servers.txt.
Например, ваша задача – найти сервере на которых не отвечает или закрыт порт TCP/25:
Get-Content c:\Distr\servers.txt | where { -NOT (Test-Netconnection $_ -Port 25 -InformationLevel Quiet)}| Format-Table –AutoSize
Вы можете использовать PowerShell в качестве простейшую систему мониторинга, которая проверяет доступность серверов и выводит уведомление, если один из серверов недоступен.
Например, вы можете проверить доступность основных служб на всех контроллерах домена в AD (список DC можно получить командлетом Get-ADDomainController). Проверим следующие службы на DC (в утилите PortQry есть аналогичное правило Domain and trusts):
- RPC – TCP/135
- LDAP – TCP/389
- LDAP – TCP/3268
- DNS – TCP/53
- Kerberos – TCP/88
- SMB – TCP/445
$Ports = "135","389","636","3268","53","88","445","3269", "80", "443"
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address
ForEach($DC in $AllDCs){
Foreach ($P in $Ports){
$check=Test-NetConnection $DC.Ipv4address -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.hostname $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.hostname $P -Separator " => " -ForegroundColor Red}
}
}
Скрипт проверит указанные TCP порты на контроллерах домена, и, если один из портов недоступен, выделит его красным цветом (можно запустить данный PowerShell скрипт как службу Windows).
IP сканер сети на PowerShell
Вы можете реализовать простой IP сканер, которые сканирует удаленные хосты или IP подсети на открытые/закрытые TCP порты.
Чтобы просканировать диапазон IP адресов с 10.10.10.5 до 10.10.10.30 и вывести компьютеры, на которых открыт порт 3389:
foreach ($ip in 5..30) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 10.10.10.$ip}
Можно просканировать диапазон TCP портов (от 1 до 1024) на указанном сервере:
foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}
Вывести список открытых портов в Windows
Если вам нужно вывести список портов, открытых на локальном компьютере, исопльзуется командлет Get-NetTCPConnection (это PowerShell-эквивалент NETSTAT). Полный список открытых портов на компьютере можно вывести так:
Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort| Sort-Object -Property LocalPort | Format-Table
Если вам нужно проверить, какая программа (процесс) слушает определенный порт на вашем компьютере, выполните команду:
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path
Как проверить, открыт ли порт
Чтобы обмениваться данными по локальной сети или через интернет, устройства должны связаться друг с другом. Для этого каждому из них необходимо иметь собственный IP-адрес и открытые порты для взаимодействия. В статье подробно разберем, что такое порт, зачем он нужен и как самостоятельно проверить его доступность.
Что такое порт сервера и зачем он нужен
Порт можно сравнить с разъемами на материнской плате, только если в том случае речь идет о подключении физических устройств, то здесь – о виртуальных процессах. Представьте: на вашем устройстве находится много разных сетевых приложений, но вам нужно найти и подключится к одному конкретному. Порт нужен именно для того, чтобы открыть с ним соединение и дождаться завершения процесса. Сам порт выглядит как числовой идентификатор от 0 до 65 535.
Перед тем, как подключится к любому порту, нужно проверить, открыт ли он. Большинство программ делают проверку доступности порта автоматически, но иногда требуется сделать это самостоятельно. В случае если порт будет несвободен, установить соединение не получится.
Один из наиболее распространенных способов проверить доступность порта – сделать это с помощью команды Telnet. Дальше расскажем, как именно это сделать.
Что такое Telnet? Telnet – это сетевая утилита, позволяющая установить соединение с удаленным портом любого компьютера и каналом связи. Она работает по протоколу TELNET и позволяет им управлять. Сам протокол работает на основе TCP – то есть, можно передавать обычные строковые команды на другое устройство. Также его можно использовать для взаимодействия между процессами. Как правило, утилита установлена по умолчанию во всех системах. Если на вашем устройстве ее нет – воспользуйтесь и установите Telnet в одном из официальных репозиториев, например, в Ubuntu:
$ sudo apt install telnet
Общий синтаксис утилиты Telnet выглядит следующим образом:
$ telnet опции хост порт
Разберем по порядку, что здесь подразумевается.
Хост – это удаленный компьютер (домен или IP-адрес).
Порт – тот порт, через который устанавливается соединение, то есть на этом компьютере.
Опции необходимы, чтобы подключиться к удаленному серверу. Самые распространенные опции выглядят так:
- -4 – использовать поддержку стандарта IPv4;
- -6 – использовать поддержку стандарта IPv6;
- -8 – использовать 8-битную кодировку – например, Unicode;
- -E – отключить поддержку Escape-последовательностей;
- -a – автоматический вход с логином из переменного окружения USER;
- -b – использовать локальный сокет;
- -d – использовать режим отладки;
- -p – использовать эмуляцию rlogin;
- -l – указать пользователя авторизации.
После подключения к удаленному серверу нужно ввести команды для управления процессами. Для этого у Telnet есть два режима:
- Построчный – строка полностью редактируется на локальном компьютере и в готовом виде целиком отправляется на сервер.
- Посимвольный – каждый символ, который вы набираете, отправляется на сервер. В этом случае не получится что-то исправить, если вы допустите ошибку при вводе.
Стандартные команды утилиты Telnet
Мы не будем рассматривать все существующие команды, возьмем только самые необходимые. Подробную информацию о них можно найти в официальной документации разработчиков программы.
- CLOSE – отключить соединение с удаленным сервером;
- ENCRYPT – передавать всю информацию в зашифрованном виде;
- LOGOUT – выйти и закрыть соединение;
- MODE – переключить режима со строчного на символьный или наоборот;
- STATUS – показать текущий статус соединения;
- SEND – отправить один из специальных символов telnet;
- SET – установить значение параметра;
- OPEN – открыть соединение с удаленным сервером;
- DISPLAY – показать используемые спецсимволы;
- SLC – изменить используемые спецсимволы.
Как проверить, открыт ли порт на удаленном компьютере, с помощью Telnet
Команда Telnet – отличный вариант, чтобы проверить доступность порта на удаленном компьютере. Как проверить доступность порта через Telnet? Чтобы это сделать, нужно ввести в командной строке одну из команд:
В командной строке Windows введите одну из команд:
telnet имя_сервера номер_порта
или telnet IP_сервера номер_порта
Если вы увидите в ответе терминала или командной строки ошибку, то можно сделать вывод, что порт закрыт.
Если вы видите пустое окно или появилось приглашение сервера, то порт открыт.
Также с Telnet можно посмотреть открытые порты linux:
- Запустите терминал комбинацией клавиш Ctrl+Alt+T
- Введите команду, чтобы установить утилиту:
sudo apt install telnet
- После установки введите команду в терминале:
telnet имя_сервера номер_порта
- Если появится ошибка, то порт закрыт. Если порт открыт, вы увидите сообщение Unable to connect to remote host.
Как проверить открытые порты на локальном компьютере
Открытые порты на локальном компьютере, например, который вы используете дома или для работы, могут привести к серьезным последствиям – именно через них на устройства проникают вирусы и есть риск стать жертвой злоумышленников. Помимо Telnet есть еще несколько встроенных утилит, которые можно использовать, если вам нужно проверить открытые и закрытые соединения. Рассмотрим, как проверить, открыт ли порт на компьютере, примере утилиты netstat.
Как проверить порты в Windows, используя утилиту netstat:
- Введите комбинацию клавиш Win+R
- Задайте команду CMD и нажмите Enter
- Задайте команду netstat –a и нажмите Enter
После этого перед вами должен появиться список занятых портов, где также будет видно, какая программа его использует. Чтобы выгрузить файл и проверить его на наличие лишних приложений, задайте команду netstat –a >имя.txt.
Как еще можно проверить доступность порта
Онлайн-сервис ping.eu
Если вы не хотите использовать утилиты для проверки, есть онлайн-сервисы, которые помогут это сделать.
Один из таких сервисов – ping.eu. Это многофункциональный сервер, который позволяет быстро проверить открытые порты. Нужно зайти на сайт, выбрать вкладку Port check. Далее понадобится ввести IP-адрес и номер соединения, адрес пользователя будет определен автоматически. После этого нажмите Go и сервис покажет результат.
Специальные программы
Кроме онлайн-сервисов и встроенных утилит, можно воспользоваться для проверки портов отдельными приложениями. Их достаточно много, и они работают примерно по одному принципу, при необходимости вы можете найти подходящее для себя через поиск. Мы рассмотрим, как работает программа Portforward Network Utilities. Она является платной, но можно выбрать пробный режим. Кстати, эта программа поможет не только проверить порты, но и открыть их, если вам это нужно.
Как проверить порты с помощью Portforward Network Utilities
- Перейдите на сайт разработчика и скачайте приложение в разделе загрузок.
- Запустите приложение и выберите режим использования. Можно использовать бесплатный режим или оплатить на сайте – тогда нужно ввести регистрационный ключ.
- Откройте раздел Tools и выберите пункт Port Checker.
- Введите номер порта и выберите протокол передачи информации.
- Нажмите кнопку Check Me и дождитесь результатов сканирования.
Заключение
Один из аспектов безопасности – это закрытые порты, поэтому если регулярно их проверять, то вы сможете не допустить утечки ваших данных и доступа злоумышленников. При этом порты иногда необходимо открыть, чтобы настроить некоторые программы, приложения или сервисы операционной системы. Проверку портов можно провести с помощью встроенных утилит, онлайн-сервисов или специальных программ, которые понадобится скачать отдельно. Какой из инструментов выбрать – вопрос только ваших предпочтений и требований.