python简单处理nmap的扫描结果

0x00 前言

     当我们使用nmap扫描大量目标的时候,会使用nmap 扫描大量的IP后,会使用nmap对扫描结果进行输出保存,例如-oX 保存为xml文件,但是我们经常使用的是excel表格进行分发结果到各个负责人。

0x01设计

我们可能使用不同时间的nmap扫描结果xml文件,这些文件可以使用excel打开,但是比较麻烦,不是很直接。我们一般需要的信息是IP地址,端口,端口开放情况,端口运行哪些服务等基本信息。

然后作为一个辅助工具,可以自己输入需要处理的文件,按需进行处理。此处我们选择python (版本3)进行处理该问题。

0x02 代码

在这里我们使用 xml.etree.ElementTree和csv库进行对xml进行处理和输出。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import xml.etree.ElementTree as ET
import csv

# XML文件文件,一般是当前路径
print("输入需要处理的nmap 扫描结果XML文件:", end='')
input_file = input("")
xml_file = input_file
# xml_file = 'nmap_targets_dx_jc_20240520142130.xml'
scan_results = xml_file.split('.')[0]
# print(scan_results)
# CSV文件路径
# csv_file = 'scan_results.csv'
csv_file = scan_results + '.csv'

# 解析XML文件
tree = ET.parse(xml_file)
root = tree.getroot()

# CSV文件头
headers = ['Host', 'Port', 'State', 'Service']
# headers = ['Host', 'Port', 'State', 'Service', 'Protocol']
# 写入CSV文件
with open(csv_file, 'w', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=headers)
    writer.writeheader()

    # 遍历XML中的每个host,查找任意层次下的子元素,.点为当前节点,..为父节点
    # https://www.osgeo.cn/cpython/library/xml.etree.elementtree.html
    for host in root.findall('host'):
        address = host.find('address').attrib['addr']
        for port in host.findall('.//port'):
            port_number = port.attrib['portid']
            protocol = port.attrib['protocol']
            state = port.find('state').attrib['state']
            service_elem = port.find('service')
            service_name = ''
            if service_elem is not None:
                service_name = service_elem.attrib['name']
                # 写入CSV行
            # row = {'Host': address, 'Port': port_number, 'State': state, 'Service': service_name, 'Protocol': protocol}
            row = {'Host': address, 'Port': port_number, 'State': state, 'Service': service_name}
            writer.writerow(row)
print("CSV文件已生成:", csv_file)

0x03 运行效果

0x04 总结

非常简单的一个小脚本,但是对于我们日常处理nmap扫描的结果文件是很实用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值