Как с сервера Linux я могу быстро определить, работает ли удаленная машина под управлением Windows или Samba?
Я хочу запускать команды на удаленных машинах Windows (XP и 7), чтобы вывести список установленного программного обеспечения и версий. И я хочу запускать эти команды с сервера Linux (используя Winexe).
Чтобы найти хосты Windows, я использую эту команду nmap:
nmap -oG - -T4 -p T:445 192.168.1.0/24 | awk '{print $2, $3}'
Однако я также получаю все серверы Samba и несколько принтеров.
Есть ли простой способ, с помощью дополнительных параметров nmap или отдельной команды, получить только реальные машины с Windows и избежать отправки нерелевантных команд Windows на серверы и устройства, отличные от Windows?
Обновить:
Я последовал предложению Пферата и использовал -O
. Я не пробовал, потому что думал, что это будет медленно и ненадежно, но в этой ситуации он работает хорошо. Теперь я использую это для обнаружения реальных машин Windows:
nmap -oG - -T4 -p T:445 -O --max-os-tries 1 192.168.1.0/24 | grep '445/open/.* Windows' | awk '{print $2, $3}'
Вы можете попробовать использовать опцию Nmap для обнаружения ОС, -O
.
nmap -O host
Вы также можете попробовать посмотреть на OS String
или Server String
для хозяина. Хотя это можно изменить, строка сервера по умолчанию для Samba Samba Server Version %v
. Я не уверен, какая строка сервера по умолчанию в Windows используется для всех вариантов, но на Win7 SP1 у меня есть Windows 7 Professional 6.1
.
На моем сервере Linux Samba строка ОС Unix
а на Win7 SP1 это Windows 7 Professional 7601 Service Pack 1
.
$ smbclient -L host
Domain=[MYDOMAIN] OS=[Unix] Server=[Samba x.y.z]
Sharename Type Comment
--------- ---- -------
Поскольку эти значения можно изменить, нельзя полностью доверять этому; но это может дать вам некоторое первоначальное представление.