nmap主机发现格式化输出

作为一个运维人员,内部有大量的主机,如何发现哪些主机是存活的,最好的工具还是nmap,但是nmap输出的数据太多,如何过滤自己需要的数据。本来主要介绍利用Python脚本 过滤nmap 输出结果,存入csv文件中。

0x00 nmap 扫描命令

  1. 参考资料

(1)nmap中文手册

https://nmap.org/man/zh/

(2)NMAP 输出XML文件详解

http://www.insecure.org/nmap/data/nmap.dtd

  1. nmap ping探测扫描,以xml格式输出结果
    nmap -sP -ox nping.xml 192.168.2.0/24

ping 模式扫描192.168.2.0/24 网段,并以xml格式输出结果,输出结果文件为nping.xml

nmap -sP -iL test.txt -oX ceshi.xml XML输出

ping 模式扫描test.txt 文件中的地址,并以xml格式输出结果,输出结果文件为nping.xml

0x01 Python代码解析xml文件,存入csv文件

此脚本未写异常处理,如需要处理请自行编写

#coding:utf-8
import csv
from xml.etree import ElementTree as et
# version Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
def Get_ip(f_xml): #清洗xml数据
    file_xml=f_xml  #XML文件名
    sum=[]          #返回结果列表变量
    data=open(file_xml).read()
    root=et.fromstring(data)
    t1= root.findall("host") 

    for t2 in t1:
        #s2=[]  # s2[0] save hosts ip address, s2[1] save hosts status
        s2={"ip":"null","status":"null"} #存放主机IP地址和状态

        for t3 in t2:
            if(t3.tag=="status"):
               #s2.append(t3.attrib["state"]) # Get hosts status
               s2["status"]=t3.attrib["state"] #存放主机状态
            
            elif(t3.tag=="address"):
                if(t3.attrib["addrtype"]=="ipv4"):
                    #s2.append(t3.attrib["addr"])
                    s2["ip"]=t3.attrib["addr"] #存放主机IP地址
                    #sum.append(s2[::-1])    # Get hosts IP address,s2[::-1]:Reverse s2
                    sum.append(s2)  #将字典s2存入列表sum变量中

                                    
    return sum

def Write_csv(f_csv,datas): #写入csv文件中
    file_csv=f_csv     #csv文件名
    datas=datas        #需要写入文件的数据
    headers=["ip","status"]

    f=open(file_csv,"wb")
    writer = csv.DictWriter(f,fieldnames=headers)
    writer.writerows(datas)
    f.close()

if __name__ == '__main__':
    file_xml="nping.xml" #需要清洗的xml文件
    file_csv="test.csv"  #需要保存到的csv文件

    s1=Get_ip(file_xml)
    Write_csv(file_csv,s1)

0x02 格式化数据

  • Get_ip方法,清洗后格式
[{'status': 'up', 'ip': '192.168.2.1'}, {'status': 'up', 'ip': '192.168.2.2'}]
  • Write_csv方法,存入csv格式为


    图片.png

0x03 其他方法实现

其实Python 有一个python-nmap包可以直接调用nmap,可以参考
https://thief.one/2017/05/02/1/
https://pypi.org/project/python-nmap/
https://xael.org/pages/python-nmap-en.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容