Как проверить, существует компьютер или нет?
Эта проблема не имеет решения. Вы просто не можете точно различить компьютер, который не существует в настоящее время, и компьютер, который существует, но вы не можете «пинговать».
DNS не помогает, потому что он говорит только о наличии связи между IP-адресом и DNS-именем. Он не сообщает вам, есть ли в данный момент машина, связанная с этим IP-адресом.
Протокол ARP низкого уровня и протоколы маршрутизации также не помогают. Они позволяют вам (или, более вероятно, вашей ОС) отправлять сетевые пакеты в (номинально) правильное место, но они не / не могут сказать вам, если что-то прослушивается в данный момент. Сетевой кабель компьютера мог быть просто отключен, компьютер мог быть отключен (но, конечно, все еще существует), или он мог быть просто поражен метеоритом.
И я даже не упомянул, что существуют вещи, называемые брандмауэрами, которые часто активно пытаются помешать вам узнать, что существуют определенные машины.
И есть случай, когда машина жива и использует IP-адрес, но IP-адрес не зарегистрирован в DNS.
Как программно проверить, существует имя хоста или нет?
Это другой вопрос. Имя хоста и компьютер - это не одно и то же по ряду причин.
Теперь выполнение DNS-запроса (обычно) даст вам ответ, который говорит , что имя хоста существует или не существует, но вам все равно нужно быть осторожным при интерпретации этого ответа.
Если DNS сообщает , что имя хоста "foo.bar.xyzzy.com" существует, это не означает, что в данный момент существует компьютер (или любой другой отвечающий объект), связанный с это имя, или что когда-либо было или будет. Он может просто отвечать информацией, которая не соответствует действительности.
Если DNS сообщает , что имя хоста "foo.bar.xyzzy.com" не существует, это может альтернативно означать:
- сбой внешней сети или ошибка конфигурации DNS-сервера привели к неверному результату DNS,
- Конфигурирующие устройства вашей машины "решателя" сказали ему, что он должен общаться со службой DNS, которая не знает (скажем) о TLD ".com".
- ваша машина общается с подорванным DNS; например думаю DNS Switcher !!
- авторитетный DNS-сервер скрывает существование имени машины; например по соображениям безопасности
- кто-то отключил внешний доступ на основе имени для машины, временно удалив его DNS-запись в источнике; например в то время как они делают некоторое обслуживание.
Другими словами, имя хоста все еще может существовать в значимом смысле, несмотря на то, что говорит ответ DNS.
Короче говоря, вы не можете вывести какие-либо факты о реальном мире со 100% уверенностью из ответа DNS. Наиболее простая и точная интерпретация, которую вы можете дать нетехническому пользователю, если (скажем) DNSQuery
возвращает 9003
что-то вроде:
The name 'foo.bar.xyzzy.com' cannot be resolved to a computer at this time