Как программно проверить ОС удаленного хоста? - PullRequest
1 голос
/ 23 июля 2010

Мне нужно проверить, является ли удаленный хост Windows или Unix / Linux. Я не могу предположить, что на нем настроен веб-сервер. Все, что я могу сделать, это попытаться подключиться к нескольким службам TCP или UDP.

Какие службы TCP (номера портов TCP) обычно открываются в Windows, а не в Unix / Linux и наоборот?

Другой способ - попытаться подключиться к нему по ssh, и в случае неудачи предположить, что это хост Windows. Проблема в том, что мне нужно это для того, чтобы выбрать метод удаленного доступа ssh или что-то дружественное для Windows, например psexec.

Ответы [ 3 ]

3 голосов
/ 23 июля 2010

Вы можете прочитать вывод nmap , чтобы определить, какая ОС работает на удаленном хосте. Для этого есть целый модуль. Вот руководство по его использованию .

1 голос
/ 23 июля 2010

Почему бы просто не попытаться подключиться одним способом, а если это не удастся, подключиться другим способом, и если ни один из них не сработает, сообщите пользователю?

Если это все, что вы пытаетесь сделать, нет необходимости проверять ОС.

0 голосов
/ 23 июля 2010

На этот вопрос ответить непросто с какой-либо степенью определенности, поскольку очень мало портов, которые всегда будут открыты в одной ОС, но не в другой.

Вы можете попробовать некоторые / все из следующих

  • 80 http, очевидно
  • 22,23 Telnet и SSH (обычно не открыт в Windows, по крайней мере один обычно открыт в * nix)
  • 135 Используется WMI, поэтому часто открывается на окнах
  • 1443 (возможно, SQL Server)
  • 691 Используется маршрутизацией MS Exchange
  • 3389 MS Remote Desktop

Я бы предположил, что сканирование диапазонов портов может привести к проблемам, особенно если это не ваши машины. Возможно, ваш IP-адрес зарегистрирован как возможный источник «сканеров портов»

В Интернете есть несколько довольно обширных списков портов. например http://keir.net/portlist.html

...