Python识别远程主机操作系统
最近在写exp,需要识别远程主机操作系统。
通常判断远程主机操作系统,有以下几种方式:
- 大小写判断
- ttl值判断
- 扫描器扫描
由于不清楚目标链接是否存在某个文件或者目录,因此使用大小写来判断操作系统,也并非良策。
ttl值可以自定义,因此也不太好判断是否正确。
因此就想到了调用扫描器的扫描结果,来判断扫描是否正确。
这里我调用的是python-nmap这个库。
安装方式
pip install python-nmap
使用方式如下
import nmap def scan_system(domain_name): nm = nmap.PortScanner() #创建扫描对象 os_list = [] try: scan_result=nm.scan(hosts=domain_name,arguments='-O') #添加扫描参数 for i,j in scan_result['scan'].items(): #将扫描结果转成字典 if j['osmatch']: #判断是否有osmatch for k in j['osmatch']: for os in k['osclass']: # print(domain_name,os['osfamily'],'\n') os_list.append(os['osfamily']) #osfamily对应的是操作系统家族 else: break except Exception as e: print(domain_name,'None\n') #当链接不能被访问时,抛出异常 print(domain_name,max(os_list, key=os_list.count)) if __name__ == "__main__": url = [] #url列表 for i in range(len(url)): scan_system(url[i])
nmap扫描结果是模糊测试的结果,会返回很多测试的数据包,数据包的结果中,含有linux,windows以及别的系统,因此我在这里是统计了数据包中频数最大的操作系统,然后输出结果。
网安小菜鸡