Раньше я использовал приложение, которое могло пинговать или, возможно, запускать сканирование портов на машине, даже если машина была настроена так, чтобы это не разрешалось.
В настоящее время я пытаюсь проверить связь с удаленной машиной в нашей глобальной сети, но я настроил ее так, чтобы не разрешать проверку связи. Есть ли что-то похожее на ping, которое я могу использовать?
Опять же, это машина, находящаяся в другом городе, входящем в нашу сеть.
Вы можете подключиться по Telnet к открытому TCP-порту на машине. Например, если машина является веб-сервером и имеет открытый порт 80, просто:
telnet ip.ad.dre.ss 80
Это будет работать даже на зашифрованных портах (хотя вы не сможете понять данные)
Вот некоторые другие порты, которые стоит попробовать:
(список портов / сервисов есть в / etc / services на машинах linux)
Ответ полезный для Docker
Пинг - это ICMP, если вы заблокировали ICMP, вы не можете пинговать.
Вы все еще можете тестировать порты TCP или UDP, если вы принимаете соединения TCP / UDP.
Если вы запускаете свой тест на контейнерах, в которых отсутствуют ping, nc, telnet и другие инструменты, вы можете использовать этот трюк:
(echo >/dev/tcp/${host}/${port}) &>/dev/null && echo "open" || echo "closed"
Это попытается подключиться через tcp / udp через устройство (вау, я знаю) и отобразит эхо «open», если порт открыт, или «closed», если он закрыт.
Он будет зависать на некоторое время, прежде чем появится эхо «закрыть», если это так.
Если вы используете XP / 2003 + (включая Vista / 2008/7), вы можете использовать Win32_PingStatus. Компьютеры, на которых выполняется код сценария, являются единственной системой, которая должна быть XP / 2003 +, и она работает так же, как использование Ping.exe, только она не использует ping.exe, поэтому она должна действовать как лазейка для ваших настроек безопасности, которая не разрешает выполнение ping.exe.
strComputer = "192.168.1.1"
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_PingStatus " & _
"Where Address = '" & strComputer & "'")
For Each objItem in colItems
If objItem.StatusCode = 0 Then
WScript.Echo "Reply received."
End If
Next
См. Статью Scripting Guy для получения дополнительной информации о том, как использовать Win32_PingStatus:
http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0914.mspx
Запустите агент SNMP на удаленном компьютере и используйте диспетчер для чтения одного из значений из стандартной MIB.
Если у вас нет брандмауэров и маршрутизаторов, то есть если вы находитесь в том же сегменте, что и хост, который вы пытаетесь проверить, - большинство приведенных выше решений являются немного исчерпывающими, imho.
Не имеет значения, к какому порту вы подключаетесь, и фактически, если вы подключаетесь к порту, на котором вряд ли будет запущена служба, вы можете выполнить задание, не будучи обнаруженным.
Как?
Вы можете использовать любой инструмент, который вам нравится, но мы можем просто использовать telnet ...
% telnet <host> 313373
Trying 10.211.55.3...
telnet: connect to address 10.211.55.3: Connection refused
telnet: Unable to connect to remote host
%
Это должно произойти немедленно, если только хост не отбрасывает пакеты. На самом деле происходит то, что стек TCP / IP на хосте отправляет вам обратно сегмент TCP с установленным битом RST, т. Е. Завершает ваш SYN-пакет.
Тот факт, что вы получили пакет RST, означает, что на другом конце действительно есть хост, и, в качестве бонуса, вы сделали это незамеченным (TCP / IP не имел приложения верхнего уровня, с которым можно было бы поговорить об этом соединении) .
Однако вместо telnet я бы, вероятно, использовал что-то вроде scapy, напишу что-нибудь, что ищет флаг RST, и сообщит вам.
Чтобы завершить это, если на пробуемом IP-адресе нет хоста - он будет зависать на некоторое время, а время ожидания - то же самое, что бы произойдет, если на принимающем хосте есть брандмауэр с фильтром отбрасывания.
Если задействованы брандмауэры, то, как предлагали другие, используйте такие инструменты, как nmap
и все остальное.
Если у вас есть доступ к другой машине в той же локальной сети, что и ваша целевая машина, вы можете использовать арпинг.
Arping работает, отправляя пакеты ARP, нацеленные на машину, это работает отлично, потому что вы не можете блокировать пакеты arp, если хотите использовать сеть (ну, вы можете настраивать статические таблицы arp везде: D) Но обратная сторона заключается в том, что вы должны быть в пределах та же LAN, что и ваша цель arping.
Простым решением этой проблемы будет использование утилиты netcat. Единственным предварительным условием для этого сценария является то, что нужно знать хотя бы один порт, открытый на этом удаленном компьютере.
nc -nv ip_address номер_порта
Вышеупомянутая команда даст результат, который определит, открыт ли указанный порт или нет, и, следовательно, доступность машины.
Есть ли какие-либо услуги на машине? Один из способов узнать, есть ли машина, - это использовать telnet-клиент для подключения к ней, но изменив порт, который вам нужно открыть.
Допустим, на машине запущен MS SQL, который по умолчанию работает на порту 1433. Вы используете следующую команду
telnet machine-name-address 1433
Если Telnet подключается, машина запущена и работает, это не означает, что она работает правильно, но тем не менее прослушивает этот порт.
для меня в seq 1 65535
; выполните tcpconnect -v remotehost $ i; сделано
nmap -T5 -sS -P0 ho.st.ip.addr Это покажет, какой порт доступен на этой машине. Рекомендуется установить cygwin, если вы работаете в Windows или у вас нет доступа к Linux-машине.
softperfect сетевой сканер.
Google для этого.
Я много этим пользуюсь. Прекрасно работает
Google по запросу "nmap". Я использую это все время. Отлично подходит для проверки того, что ваши брандмауэры работают должным образом. К тому же я считаю, что на него ссылались в фильме «Матрица», что делает его вдвойне потрясающим.
Вы можете заставить машину отправлять ловушку (пакет) snmp раз в минуту на удаленный монитор и настроить правило для отслеживания того, что вы получаете ловушку каждую минуту.
Вы можете установить простой веб-сервер и использовать веб-страницу с надписью «ОНЛАЙН». Вам нужно только подключиться к нему, где вы хотите, конечно, вам нужен статин IP или услуги linke dyndns
Очень простой подход - подключиться по telnet к TCP-порту, который должен быть открыт на сервере, то есть:
telnet theServerHostname 80
Хотя, если служба не работает, вы получите такой же результат, как если бы хост не работал.
Есть всевозможные виды сканирования, которые можно выполнить с помощью nmap, узнайте о них на сайт nmap и вы должны стать экспертом в том, как проверить, включен ли хост. Сюда входит использование протоколов, отличных от icmp (ping), таких как TCP (как это делает telnet) и UDP.
Кроме того, если вы хотите что-то, что включает в себя возможность подключения к udp, что похоже на telnet в этом смысле, рассмотрите netcat.
Собственный Сканер портов командной строки PortQry Версия 2.0
Я часто использую его для тестирования портов SQL Server
open port = LISTENING or NOT LISTENING firewall = FILTERED