defttl_scan(ip):
packet = IP(dst=ip)/ICMP()
result = sr1(packet,timeout=1,verbose=0)# 构造ping包向目标主机发送if result isNone:passelifint(result[IP].ttl)<=64:# 判断目标主机响应包中TTL值是否小于等于64print("%s is Linux/Unix"%ip)# 是的话就为linux/Unixelse:print("%s is Windwows"%ip)# 反之就是linux
通过python-nmap对操作系统进行识别
使用nmap提供的python-nmap模块,调用-O参数对主机操作系统进行识别
返回回来的数据排序很乱,需要通过切片提取数据
defnmap_scan(ip):
nm = nmap.PortScanner()try:
result = nm.scan(hosts=ip,arguments='-O')#调用nmap执行-O扫描操作系统
os = result["scan"][ip]['osmatch'][0]['name']# 从返回值里通过切片提取出操作系统版本
time.sleep(0.1)print(ip,os)except:pass