Как узнать, использует ли удаленный компьютер Windows или Linux?
Есть ли какой-нибудь способ выполнить команду (например, сообщение ICMP или другой протокол), получить ответ от удаленного компьютера (не из моей собственной локальной сети) и проанализировать сообщение, чтобы найти некоторые доказательства того, что на этом компьютере работает Windows или операционная система Linux?
8 ответов
Это не окончательно, но Nmap сделает это с помощью команды nmap -O -v
( см. документацию для более подробной информации). Если вы используете Windows или хотите использовать графический интерфейс, посмотрите на zenmap.
Если вы в сети IPv4, просто используйте ping. Если ответ имеет TTL 128, цель, вероятно, работает под управлением Windows. Если TTL равен 64, цель, вероятно, использует какой-то вариант Unix.
: 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
)
)
)
)
Пакет: 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/
Один из способов - использовать NMap. Из ответа можно догадаться об удаленной ОС.
Следуя предложению Johnathon64, вы можете использовать SNMP для запроса непосредственно на сервере - при условии, что сам удаленный сервер настроен на использование SNMP. Для этого вы можете запустить запрос из командной строки, например, приведенный ниже:
snmpget -v1 -c public <RemoteServerIP> sysDescr.0 | sed -n 's/.*STRING: //p' | tr -d \"
Объяснение самой команды:
snmpget
запросит объект sysDescr, который содержит имя объекта по умолчанию.- Следующее
sed
исключит начальный вывод, который содержит только опрошенный OID и начало строки. - Последняя команда,
tr
, исключит любые двойные кавычки, которые обычно встречаются в запросах SNMP.
Последние две команды предназначены только для форматирования вывода - если они вам не нужны, вы можете использовать самую первую команду для извлечения всего вывода.
Старый пост, но я хотел бы добавить к этому тоже, если устройство поддерживает SNMP, вы также можете запросить sysDescr, который сообщит вам об используемой ОС.
Загрузите браузер MIB, хороший вариант которого я использую здесь: http://www.ireasoning.com/downloadmibbrowserfree.php. Вы в основном даете ему IP-адрес устройства и выполняете операцию обхода.
is a common command between Windows and Linux systems.
If you send something erroneous like cd +
The Linux systems I've tested will give you something like,
-bash: cd: +: No such file or directory
Always starting with a shell ID, a reference to the problem character, and ending with "No such file or directory"
Windows always gives,
The system cannot find the path specified.
Even simpler...
in Linux gives no output
cd
in Windows gives the current directory as output
Programmatically you can identify the system based on the output of 0
or >0
characters.
I created a switch using these patterns so that I could run a simple project on either Linux or Windows without modifying anything.