我如何知道远程计算机是使用Windows还是Linux?


10

有什么方法可以运行命令(例如ICMP消息或其他协议),从远程计算机(不在我自己的专用本地网络上)获得响应并分析该消息以查找一些证据,证明该计算机正在运行Windows或Windows XP。 Linux操作系统?


您打算如何处理这些信息?可能不可靠...
pjc50

实际上,上周我是一名客户,他使用的系统阻止任何人在其网络上使用Windows系统。它是由不属于同一网络的远程服务器制造的,我感到很奇怪,因为我不知道它是如何制造的。
Diogo

您可以采用多种方法来执行此操作。例如,如果使用DHCP提供网络地址,则DHCP请求将包含有关客户端OS的信息。
哈里·约翰斯顿

Answers:



10

如果您使用的是IPv4网络,则只需使用ping。如果响应的TTL为128,则目标可能正在运行Windows。如果TTL为64,则目标可能正在运行Unix的某些变体。


你是什​​么意思?
Dchris 2013年

TTL = 255呢?我认为是Unix ..
Dchris

1
我认为我从未见过255的
哈里·约翰斯顿

这是什么解释/为什么是这种情况。
Hervian

1
@Hervian,如果您是说为什么选择了这些特定的TTL,则必须询问原始程序员。如果您是说为什么大多数UNIX变体或所有UNIX变体都相同和/或为什么每个版本的Windows的TTL相同,那只是惯性-在没有任何特定原因进行更改的情况下,它倾向于保持不变。相同。
哈里·约翰斯顿

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。
Eddie Studer'17



0

老帖子,但我想我也会补充一点,如果设备启用了SNMP,您还可以查询sysDescr,它将告诉您正在使用的操作系统。

下载一个MIB浏览器,我在这里使用的是一个很好的浏览器:http : //www.ireasoning.com/downloadmibbrowserfree.php。您基本上可以给它提供设备的IP地址,然后执行步行操作。


您能否扩大答案以说明如何实现?谢谢。
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查询中找到的所有双引号。

最后两个命令仅用于格式化输出-如果您不需要它们,可以使用第一个命令提取完整的输出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.