Test-NetConnection: проверка открытых/закрытых TCP портов из PowerShell
В PowerShell 4.0 (Windows 2012 R2, Windows 8.1 и выше) появился встроенный командлет для проверки сетевых соединений — Test-NetConnection. С помощью данного командлета вы можете проверить доступность удаленного сервера или сетевой службы на нем, блокировку TCP портов файерволами, проверить доступность по ICMP и маршрутизацию. По сути, командлет Test-NetConnection позволяет заменить сразу несколько привычных сетевых утилит: ping, traceroute, сканер TCP портов и т.д.
Основное преимущество командлета Test-NetConnection – он уже входит в состав всех современных версий Windows и вам не нужно устанавливать его отдельно. Командлет входит в состав модуля NetTCPIP (начиная с PoSh v4.0).
Значение 4 в столбце Major говорит о том, что на компьютере установлен PowerShell 4.0.
TCP Port Ping: Использование Test-NetConnection для проверки открытых портов и доступности серверов
Проверим, открыт ли порт TCP 25 (SMTP протокол) на почтовом сервере с помощью Test-NetConnection:
Test-NetConnection -ComputerName msk-msg01 -Port 25
В сокращенном виде аналогичная команда выглядит так:
TNC msk-mail1 -Port 25
Разберем результат команды:
Как вы видите, командлет выполняет разрешение имени сервера в IP адрес, выполняется проверка ответа ICMP (аналог ping) и доступность TCP порта. Указанный сервер доступен по ICMP ( PingSucceeded = True ) и 25 TCP порт также отвечает ( RemotePort=25, TcpTestSucceeded= True ).
У командлета есть специальный параметр –CommonTCPPort, позволяющий указать наименование известного сетевого протокола (HTTP, RDP, SMB, WINRM).
Например, чтобы проверить доступность веб-сервера, можно использовать команду:
Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP
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, значит удаленный порт доступен.
(New-Object System.Net.Sockets.TcpClient).Connect(‘msk-msg01’, 25)
В Windows 10/ Windows Server 2016 вы можете использовать командлет Test-NetConnection для трассировки маршрута до удаленного сервера при помощи параметра –TraceRoute (аналог tracert). С помощью параметра –Hops можно ограничить максимальное количество хопов при проверке.
Test-NetConnection msk-man01 –TraceRoute
Командлет вернул сетевую задержку при доступе к серверу в милисекундах ( PingReplyDetails (RTT) : 41 ms ) и все IP адреса маршрутизаторов на пути до целевого сервера.
Test-NetConnection в скриптах мониторинга
Следующая команда позволить проверить доступность определенного порта на множестве серверов, список которых хранится в текстовом файле servers.txt. Нас интересуют сервера, где искомая служба не отвечает:
Аналогичным образом вы можете создать простейшую систему мониторинга, которая проверяет доступность серверов и выводит уведомление, если один из серверов недоступен.
Например, вы можете проверить доступность основных служб на всех контроллеров домена (список 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,isGlobalCatalog,Site,Forest,OperatingSystem
ForEach($DC in $AllDCs)
<
Foreach ($P in $Ports)<
$check=Test-NetConnection $DC -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
else
>
Скрипт проверит указанные TCP порты на контроллерах домена, и, если один из портов недоступен, выделит его красным цветом (с небольшими доработками можно запустить данный PowerShell скрипт как службу Windows).
Сканер сети на PowerShell
Также вы можете реализовать простой сканер портов и IP подсетей для сканирования удаленных серверов или подсетей на открытые/закрытые TCP порты.
Просканируем диапазон IP адресов на открытый порт 3389:
Просканируем диапазон TCP портов от 1 до 1024 на указанном сервере:
Ping определенный порт
Просто быстро проверив проверку.
Вы можете выполнить ping определенный порт машины, и если да, можете ли вы привести пример?
Я ищу что-то вроде ping ip address portNum .
18 ответов
Вы не можете пинговать порты, поскольку Ping использует ICMP , который не имеет концепции портов. Порты относятся к протоколам транспортного уровня , таким как TCP и UDP. Однако вы можете использовать nmap , чтобы узнать, открыты ли порты или нет.
Изменить: Как упоминалось в flokra, nmap — это больше, чем просто ping-for-ports-thingy. Это лучшие аутсайдеры и хакеры безопасности, а также множество отличных вариантов. Проверьте документ для всех возможных флагов.
Откройте сеанс telnet для определенного порта, например:
Чтобы закрыть сеанс, нажмите Ctrl + ] .
Вы можете использовать PaPing:
Если вы работаете с установкой Windows с powershell v4 или новее, вы можете использовать модуль powershell test-netconnection:
Пример: Test-NetConnection example.com -порт 80
Этот командлет также имеет псевдоним tnc . Например tnc example.com -port 80
Нет, вы не можете, потому что ping использует ICMP протокол , который даже не имеет понятия о портах.
Попробуйте выполнить команду curl , например:
Выше команда вернет Fail на ненулевые коды статуса выхода. В некоторых частных случаях, таких как пустой или некорректный ответ (см. man curl ), вы можете обработать определенные коды выхода как успешные, поэтому, пожалуйста, проверьте этот для более подробного объяснения.
Я нашел более простое решение, используя PsPing:
PsPing реализует функции Ping, TCP-пинг, задержку и измерение полосы пропускания.
В Linux вы можете использовать hping , но он использует TCP, а не ICMP.
Ping очень специфичен, но если вы хотите проверить, открыт ли порт или нет, и запускается окно Windows, то PortQry является вашим другом.
Я использовал его только для тестирования контроллеров домена для проблем с подключением, но он работал для этого, поэтому должен работать на вас.
Вот быстрое и грязное консольное приложение .NET:
Нет гарантии, что служба, работающая на порту, понимает ping. Это также открывает вопрос о том, какой «вкус» порта вы хотите выполнить ping, TCP или UDP? Поскольку протокол ping не использует ни один (ping реализован с использованием ICMP ), он не имеют большой смысл.
Это решение , которое работает для VPN с клиентской машиной Windows Vista или Windows 7 , поскольку другие перечисленные ответы просто не работают. Этот ответ был ранее удален и не должен был быть, поскольку это единственное решение для обычного случая в реальном мире. Поскольку для удаления нет апелляции, я отправляю его, чтобы сохранить других, разочарование, которое я испытывал, пытаясь использовать другие ответы.
В приведенном ниже примере показано, какие IP-адреса в VPN, которые имеют VNC /порт 5900, открыты с клиентом, работающим в Windows 7.
Короткий сценарий Python (v2.6.6) для сканирования данного списка IP-адресов и портов:
Результаты выглядели так:
Четыре переменных в верхней части должны быть изменены, чтобы они соответствовали требуемым тайм-ауту, сети, хостам и портам. 5,0 секунд на моей VPN, казалось, было достаточно, чтобы работать должным образом последовательно, меньше (всегда) не давали точных результатов. В моей локальной сети 0.5 было более чем достаточно.
Я абсолютно уверен, что Nagios check_tcp зонд делает то, что вы хотите. Их можно найти здесь и хотя они предназначены для использования в контексте Nagios, все они автономные программы.
Для него есть инструмент lightweigth, называемый tcping: http: //www.linuxco. де /tcping /tcping.html
В оболочке Bash вы можете использовать TCP файл псевдо-устройства , например:
Вот версия, реализующая тайм-аут 1 секунды:
Если вы используете операционную систему * nix, попробуйте установить и использовать «zenmap», это графический интерфейс для nmap и имеет несколько полезных профилей сканирования, которые отлично помогают новому пользователю.
Основные команды cmd в Windows
Операционная система Microsoft Windows невероятно распространена и каждому администратору приходится с ней сталкиваться. Поэтому мы решили собрать список основных команд для командной строки CMD которые пригодятся при настройке и траблшутинге сети.
КОМАНДЫ CMD
Ping — Конечно же пинг! Самая используемая утилита, отправляющая ICMP пакеты для проверки доступности узла на другой стороне. Показывает ответы, время за которое пакеты были доставлены и TTL (Time To Live), а по окончанию показывает статистику. По умолчанию высылается 4 пакета, и увеличить их количество можно добавив в строку –n число_пакетов , либо запустив непрерывный пинг набрав –t . Помимо этого есть параметр –l размер_пакета , позволяющий изменить размер отправляемого пакета.
Подробную информацию обо всех параметрах, которые можно использовать с командой можно узнать, введя /? после самой команды. Это работает и для других команд.
Tracert — Trace route как и ping позволяет определить доступность удаленного узла, однако она отображает в выводе все маршрутизаторы, через которые проходил пакет. При выполнении этой команды высылается ICMP пакет, с TTL=1, и после того как первый маршрутизатор отбросит пакет, будет выслан пакет с TTL увеличенным на 1, и так далее, пока не будет достигнет пункт назначения, либо пока TTL не станет равным 30.
Pathping — Эта команда аналогично команде tracert выполняет трассировку, дополнительно показывая статистику по задержкам и потерям на промежуточных узлах.
Ipconfig — Эта команда отображает текущие настройки протокола TCP/IP – IP адрес, маску, шлюз. Для отображения полной информации сетевого адаптера нужно добавить после команды параметр /all – теперь можно узнать mac-адрес, адрес DHCP сервера и многое другое. Для просмотра всех ключей можно воспользоваться параметром /? . Так же могут быть полезными параметры /release для отмены сетевых настроек, полученных по DHCP, /renew для обновления конфигурации сетевого адаптера по DHCP и /flushdns для очистки DNS кэша.
Getmac – эта команда используется для определения MAC-адреса компьютера. Использование этой команды отображает MAC-адрес сетевых адаптеров устройства.
Nslookup — Name Server Lookup. Используется для того чтобы определить IP-адрес по доменному имени.
Netstat – эта команда показывает состояние входящих и исходящих TCP соединений. Если мы используем команду с параметром –r , то она выведет нам таблицы маршрутизации, а использовав параметр –s мы получим статистику по протоколам
Netsh – Net Shell, сетевая оболочка. Используется для локальной или удаленной настройки сетевых параметров. После ввода команды строка переходит в режим оболочки, внутри которой можно ввести /? и увидеть все доступные настройки. Внутри каждой команды таким способом можно посмотреть список доступных подкоманд.
Возможности этой команды действительно обширны. Мы можем при помощи нее конфигурировать ip-адреса, маски, шлюзы, dns и wins сервера, включать и отключать сетевые интерфейсы, просматривать сетевые настройки, а также сохранять и восстанавливать конфигурацию сетевых интерфейсов
Например, мы можем указать статический адрес для интерфейса:
netsh interface ip set address local static 192.168.1.10 255.255.255.0
Net view – отображает имена компьютеров в текущем домене
Arp – команда для просмотра записей в arp таблице. Для просмотра текущих записей используется ключ –a . Для удаления записи из таблицы используется ключ –d интернет_адрес [адрес_интерфейса] . Если нужно удалить все записи, то вместо адреса нужно поставить звездочку (*).
Hostname – показывает имя компьютера.
NbtStat — отображение статистики протокола и текущих подключений TCP/IP с помощью NBT (NetBIOS через TCP/IP).
Route – команда для обработки таблиц сетевых маршрутов. Показывает текущую таблицу, имеется возможность добавлять и удалять маршруты. Чтобы вывести все содержимое таблицы маршрутизации нужно набрать команду route print .
Telnet – клиент сервера Telnet для подключения к удаленным хостам.
Внимание: по умолчанию telnet не установлен. Чтобы установить его из командной строки нужно выполнить команду pkgmgr /iu:»TelnetClient»
Для подключения используем команду так: telnet ip-адрес порт
Также эту команду можно использовать для проверки доступности порта на узле – если команда выдает ошибку, то значит порт закрыт, а если появляется приглашение или окно становится пустым – то открыт.
На этом все! Мы что-то упустили или вы хотите о чем-то прочитать поподробнее? Напишите об этом в комментариях.