Я использую команду ping, чтобы узнать, включен ли удаленный компьютер или нет. Но проблема в том, что команда ping (ICMP Packect) не принимается на удаленной машине, если брандмауэр включен и предполагается, что удаленная машина выключена, поскольку статус ping возвращает false. Есть ли альтернативный способ узнать, включен ли удаленный компьютер или не предполагается, что брандмауэр включен.
В зависимости от конфигурации брандмауэра вы можете использовать TCP SYN ping.
Фактически вы получите либо ACK, если он прослушивает порт, либо RST, если это не так.
Существуют различные инструменты, которые делают это, в частности NMAP
Если другой компьютер находится в той же локальной сети, он все равно должен отвечать на запросы ARP, даже если он блокирует ping
. В этом случае вы можете попробовать использовать что-то вроде arping
. Больше информации в Википедии.
В более крупной сети я не могу придумать надежного способа узнать, включен ли хост или нет, без его сотрудничества.
Если брандмауэр исправен, проверить это невозможно. Вся суть брандмауэра заключается в том, что, если отправленный вами пакет отклоняется, вы вообще не получаете никаких подсказок относительно состояния принимающего сервера: основная идея заключается в том, что вы не можете различать случаи из
1) сервера нет, и
2) брандмауэр вас заблокировал.
Чтобы определить, включен ли удаленный сервер, вы должны выбрать порт, на который сервер будет отвечать, и сделать соответствующую дыру в брандмауэре.
(недостаточно репутации, чтобы комментировать, поэтому я добавляю это в качестве ответа)
Это причина, по которой я обычно рекомендую разрешить хотя бы несколько типов icmp (на ум приходят эхо-запрос, эхо-ответ и превышенное время) на всех машинах, потому что удаление ICMP в любом случае не скрывает существования машины (это может быть для машин за ним), но в основном мешает мониторингу и отладке сети.
Если вы действительно параноидально относитесь к атакам pingflood, вам может пригодиться какое-то ограничение скорости (или фильтры только на границе сети).
Обратите внимание, что отсутствие ответа на эхо-запрос не является признаком отсутствия машины, о чем обычно сообщает последний маршрутизатор, отвечающий пакетом ICMP типа 3, код 1 (хост недоступен), поэтому сделать машину действительно невидимой - это сложнее, чем кажется.
Что касается исходного вопроса, одно из сканирований nmap обычно выполняет свою работу (чаще всего это так называемое сканирование "tcp ping").
Я делаю это, инициируя TCP-соединение с известным открытым портом. Если это веб-сервер, он будет отвечать через порт 80 (или 443). Положительный ответ говорит о том, что машина жива. Отрицательный ответ указывает на одну из многих возможных проблем, таких как подключение по сети, неправильная конфигурация брандмауэра, сбой в обслуживании или отключение машины.
Если вы настраиваете мониторинг и просто хотите знать, когда следует обратить внимание на машину, просто положитесь на заведомо открытый порт. По крайней мере, если он перестанет отвечать, вы узнаете, что что-то не так.
Большинство современных брандмауэров также могут перехватывать начальный SYN-SYN / ACK-ACK, чтобы предотвратить атаки типа исчерпания ресурсов (т.е. отправлять много SYN, вынуждая сервер поместить запись в свою таблицу соединений, а затем никогда не продолжать соединение - чтобы сделать этот тип атаки более агрессивен, эти соединения могут быть с поддельных IP-адресов).
Возможно, вам потребуется открыть соединение и фактически запросить данные, чтобы иметь больше уверенности, что сервер действительно работает (конечно, кеширование серверов и другие вещи могут помешать даже этому).
Что это за сервер? Тип подключения может быть привязан к услуге, предлагаемой сервером. Такие инструменты, как nmap (http://nmap.org/) может запросить, например, заголовок http.
Разве это не вопрос Windows? Windows - единственная ОС, которая достаточно отстала, чтобы по умолчанию блокировать пинг.
Я действительно ненавижу это. Интересно, сколько человеко-лет было потрачено зря на устранение неполадок в сети только потому, что ping не работал?
Вы можете выполнить ARP Ping. Даже если брандмауэр предотвращает выполнение эхо-запросов ICMP, ARP Ping в основном спрашивает, использует ли кто-нибудь конкретный IP-адрес. ARP используется, чтобы убедиться, что нет конфликтов IP, поэтому машина должна ответить. Когда-то такой инструмент Вот.