Как узнать, использует ли удаленный компьютер Windows или Linux?

10

Есть ли какой-нибудь способ выполнить команду (например, сообщение ICMP или другой протокол), получить ответ от удаленного компьютера (не из моей собственной локальной сети) и проанализировать сообщение, чтобы найти доказательства того, что на этом компьютере работает Windows или операционная система Linux?

Диого
источник
Что вы планируете делать с этой информацией? Это может быть ненадежно ...
pjc50
На самом деле на прошлой неделе я работал на клиенте, и он использовал систему, которая запрещает кому-либо использовать систему Windows в своей сети. Он был сделан удаленным сервером, который не был одной и той же сетью, я очень странно, потому что я не знал, как это было сделано.
Диого
Есть множество способов сделать это. Например, если вы используете DHCP для предоставления сетевых адресов, запрос DHCP содержит информацию о клиентской ОС.
Гарри Джонстон

Ответы:

16

Это не является окончательным, но nmap сделает это с помощью команды nmap -O -v( см. Документацию для более подробной информации). Если вы работаете в Windows или хотите использовать графический интерфейс, посмотрите на zenmap.

Подмастерье Компьютерщик
источник
1
Имейте в виду - некоторые провайдеры будут обнаруживать сканирование портов, используя nmap как злоупотребление.
Jeroen Baert
2
@JeroenBaert namelly AWS прислал мне страшное письмо
Джонатан душ Сантуш
10

Если вы в сети IPv4, просто используйте ping. Если ответ имеет TTL 128, цель, вероятно, работает под управлением Windows. Если TTL равен 64, цель, вероятно, использует какой-то вариант Unix.

Гарри Джонстон
источник
Что вы подразумеваете под, вероятно?
декабря
А как насчет TTL = 255? Я думаю, что Unix ..
Дхрис
1
Я не думаю, что когда-либо видел TTL 255.
Гарри Джонстон
Чем это объясняется / Почему это так.
Эрвиан,
1
@ Hervian, если ты имеешь в виду, почему были выбраны именно эти TTL, тебе следует спросить оригинальных программистов. Если вы имеете в виду, почему большинство или все варианты UNIX одинаковы и / или почему TTL одинаковы для каждой версии Windows, это будет просто инерцией - в отсутствие какой-либо конкретной причины что-либо изменить, он стремится остаться одно и тоже.
Гарри Джонстон
2
: Presumes ping service enabled on Windows local and remote hosts
:
del _IX.txt, Windows.txt
ping -n 1 [computername|ipaddress] | findstr /i /c:"Reply" > ttl.txt
for /f "tokens=1-9* delims=:=< " %%a in (ttl.txt) do (
    if %%i leq 130 (
       if %%i geq 100 (
          echo Windows & rem or echo %%c >> Windows.txt
       ) else (
          if %%i equ 64 (
             echo *IX & rem or echo %%c >> _IX.txt
          )
       )
    )
)
Ривервинд
источник
Можно ли это модифицировать для работы с целым рядом IP? Если бы я хотел запустить это, чтобы найти все ttl для всего моего стека серверов.
Эдди Студер
1

Один из способов - использовать NMap . Из ответа можно догадаться об удаленной ОС.

апаш
источник
1

Пакет: xprobe 'ИЛИ' xprobe2
Описание: Идентификация удаленной ОС Xprobe2 позволяет вам определить, какая операционная система работает на удаленном хосте. Он отправляет несколько пакетов на хост и анализирует возвращенные ответы. Функциональность Xprobe2 сравнима с функцией снятия отпечатков ОС в nmap.

Пример:
$ sudo apt-get install xprobe
$ sudo xprobe2 -T21-23,80,53,110 ###. ###. ###. ###

Ссылка:
http://www.sys-security.com/html/projects/X.html
http://sourceforge.net/projects/xprobe/

дао
источник
0

Старый пост, но я хотел бы добавить к этому тоже, если устройство поддерживает SNMP, вы также можете запросить sysDescr, который сообщит вам об используемой ОС.

Загрузите браузер MIB, хороший вариант которого я использую здесь: http://www.ireasoning.com/downloadmibbrowserfree.php . Вы в основном даете ему IP-адрес устройства и выполняете операцию обхода.

Johnathon64
источник
Можете ли вы расширить свой ответ, чтобы объяснить, как этого добиться? Спасибо.
fixer1234
Вы можете скачать браузер MIB, хороший из которых я использую здесь ireasoning.com/downloadmibbrowserfree.php . Вы фактически даете ему IP-адрес устройства и выполняете операцию прогулки
Johnathon64
0

Следуя предложению Johnathon64, вы можете использовать SNMP для запроса непосредственно на сервере - при условии, что удаленный сервер настроен на использование SNMP. Вы можете запустить запрос командной строки, такой как приведенный ниже, чтобы сделать это:

snmpget -v1 -c public <RemoteServerIP> sysDescr.0 | sed -n 's/.*STRING: //p' | tr -d \"

Объясняя саму команду:

  1. snmpget запросит объект sysDescr, который содержит имя объекта по умолчанию.
  2. Следующее sedисключит начало вывода, которое содержит только опрошенный OID и начало строки.
  3. Последняя команда, trисключает любые двойные кавычки, обычно встречающиеся в запросе SNMP.

Последние две команды предназначены только для форматирования вывода - если они вам не нужны, можно использовать самую первую команду для извлечения полного вывода.

FoxBuster
источник