如何通过shell脚本知道目标计算机使用的操作系统的IP?

不使用NMAP )我使用TTL值来确定用户inputIP时在目标计算机上使用的操作系统。 实际上,我必须在Case语句中硬编码TTL值。

所以我的问题是:

  1. TTL是我们了解正在使用的操作系统的唯一途径吗?
  2. 如果TTL不是唯一的方法,那么你能build议/解释在input的IP的基础上可以使用哪些其他方法来检查在目标计算机上使用的操作系统吗?
  3. 在networking上searchTTL表时,我发现许多操作系统具有相同的TTL值。 那么有什么办法指出确切的操作系统?
  4. 有什么办法可以确定有关操作系统的更多信息,例如是32位还是64位? 如果是的话,哪个领域和什么基础?

以下是我使用TTL值确定正在使用的操作系统的示例代码:

#!/bin/bash echo "Enter IP to find it's OS" read ip a=`ping -c 1 $ip|grep -w "ttl" | cut -c 41-47 | tr -d ' '` echo $a case "$a" in ttl=64) echo "Linux Based";; *) echo "other";; esac 

您不能(可靠地)使用TTL来确定操作系统。 例如,您可以使用sysctl net.ipv4.ip_default_ttl=32轻松更改Linux上的默认TTL。 另外,正如你已经发现的,很多设备使用相同的TTL。

要有一个可靠的检测,你需要检查各种值形成一个“指纹”。 请参阅nmap的关于操作系统检测的页面,以了解可用于指纹的值。

我工作的公司也为我们的产品写了一个类似的操作系统检测,我们花了几个工作日来实现和微调这个。 如果你可以避免的话,我不建议自己动手(除非你为了好玩而去做,因为你想学点东西)。 如果你真的需要自己做,你将需要访问各种设备进行测试,并阅读很多有关IP,TCP和ICMP的细节,以获取指纹的数据。 我怀疑你可以查询所需的字段使用bash和标准的UNIX / Linux工具,顺便说一句。 你将需要做原始套接字编程或需要使用一些第三方网络工具…在这种情况下,你可以只使用nmap