去B站咯

Python识别远程主机操作系统

最近在写exp,需要识别远程主机操作系统。

通常判断远程主机操作系统,有以下几种方式:

  1. 大小写判断
  2. ttl值判断
  3. 扫描器扫描

由于不清楚目标链接是否存在某个文件或者目录,因此使用大小写来判断操作系统,也并非良策。

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以及别的系统,因此我在这里是统计了数据包中频数最大的操作系统,然后输出结果。

posted @ 2020-10-10 09:39  不想长大a  阅读(1168)  评论(0编辑  收藏  举报