( 不使用NMAP )我使用TTL值来确定用户inputIP时在目标计算机上使用的操作系统。 实际上,我必须在Case语句中硬编码TTL值。
所以我的问题是:
以下是我使用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
。