nmap-parser:高效解析Nmap扫描结果工具

需积分: 34 6 下载量 141 浏览量 更新于2024-11-24 收藏 1KB ZIP 举报
资源摘要信息: "nmap-parser是一款专为处理Nmap生成的XML文件设计的Python脚本。Nmap是一款广泛使用的网络探测和安全审核工具,能够对网络进行扫描,检测网络上存活的主机、开放的端口、正在运行的服务等信息,并将扫描结果输出为XML格式的文件。nmap-parser正是基于对这种XML文件的解析,提取其中的关键信息,如IP地址、主机名、端口号、服务类型及服务横幅等,以方便用户进一步处理或分析。 该脚本的使用方法非常简单,通过命令行参数“-x”指定Nmap XML文件的文件名即可。例如,运行“./nmap-parser.py -x NmapXMLFile.xml”命令,即可解析名为NmapXMLFile.xml的文件,并将解析结果打印在终端。 此脚本使用Python编写,利用Python强大的库支持和简洁的语法,高效地对Nmap的XML输出文件进行解析,提取有用信息。使用该脚本可以大大减少手工解析XML文件的繁琐工作,提高工作效率,尤其是在网络安全、网络管理等领域,对于处理大量的网络扫描结果文件有着重要的作用。 Python作为脚本语言,以其简洁易读、开发效率高、跨平台等特点,在系统管理、网络编程、数据处理等领域得到了广泛的应用。nmap-parser工具的开发再次证明了Python在处理特定任务时的灵活性和便捷性。 标签“Python”表明了nmap-parser的开发语言为Python,同时也意味着该工具具有Python脚本的典型特征,比如易用性、开放性和可扩展性。此外,Python语言还拥有大量的第三方库,这些库为nmap-parser提供了强大的数据处理能力,使其能够快速准确地解析XML文件。 压缩包子文件的文件名称列表中出现的“nmap-parser-master”,暗示了该脚本可能是一个开源项目。通常在GitHub等代码托管平台上,项目文件会以“master”分支来标识主版本,这意味着用户可以通过下载该项目,查看源代码,甚至进行修改和扩展。开源项目通常意味着社区支持和不断的更新改进,为用户提供更高的稳定性和功能性。 综上所述,nmap-parser是一个利用Python编写的、用于解析Nmap工具生成的XML文件的脚本工具,它通过提供简单的命令行操作,帮助用户快速获取网络扫描结果中的重要信息,极大地提高了处理XML文件的效率。此外,作为一个开源项目,它还具有较高的社区活跃度和可扩展性,是网络安全与管理领域的一个实用工具。"

import re import os import json masscan_path = "D:/0.脚本小子/Tools/masscan/masscan.exe" masscan_parser_path = "../Tools/Masscan-to-CSV/masscan_xml_parser.py" nmap_parser_path = "../Tools/Nmap-Scan-to-CSV/nmap_xml_parser.py" port_list_path = "./dict/ports-http-iamthefrogy.txt" port_list_fp = open(port_list_path, "r") port_list = port_list_fp.readline().strip() port_list_fp.close() # 判断IP是否符合规范 def check_ip(data): ip_pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0 - 5] | [0 - 4]\d)) | [0 - 1]?\d{1, 2})){3}') result = ip_pattern.match(data) if result is None: return None else: return result.group(0) def filter_ip(): ip_filepath = "./result/ip.txt" # IP数据保存路径 ip_fp = open(ip_filepath, 'r') ip_list = ip_fp.readlines() ip_fp.close() ip_fp = open(ip_filepath, 'w') for ip in ip_list: ip = check_ip(ip) if ip is not None: ip_fp.write(ip + '\n') ip_fp.close() # NMap: csv -> json,提取IP和端口的映射 def read_nmap(data_name): ip2port = {} for item in open("./result/nmap/" + data_name + '.csv'): if item.count(',') > 5: ip = item.strip().split(',')[0] port = item.strip().split(',')[4] if ip != "IP": if ip in ip2port.keys(): ip2port[ip].append(port) else: ip2port[ip] = [port] with open("./result/nmap/" + data_name + '.json', "w") as json_fp: json.dump(ip2port, json_fp) # 执行nmap命令将数据保存为xml与csv格式 def nmap(save_name, need_scan=True): if need_scan: cmd = "nmap -Pn -p {} -oX {} -iL {}".format(port_list, "./result/nmap/" + save_name + ".xml", "./result/ip.txt") os.system(cmd) cmd = "python3 {} -f {} -csv {}".format( nmap_parser_path, "./result/nmap/" + save_name + ".xml", "./result/nmap/" + save_name + ".csv" ) os.system(cmd) read_nmap(save_name) # Masscan: csv -> json,提取IP和端口的映射 def read_masscan(data_name): ip2port = {} for item in open("./result/masscan/" + data_name + '.csv'): if item.count(',') > 5: ip = item.strip().split(',')[0] port = item.strip().split(',')[3] if ip != "IpAddr": if ip in ip2port.keys(): ip2port[ip].append(port) else: ip2port[ip] = [port] with open("./result/masscan/" + data_name + '.json', "w") as json_fp: json.dump(ip2port, json_fp) # 执行masscan命令将数据保存为xml与csv格式 def masscan(save_name, need_scan=True): if need_scan: cmd = "{} -iL {} -Pn -p {} -oX {}".format( masscan_path, "./result/ip.txt", port_list, "./result/masscan/" + save_name + ".xml" ) os.system(cmd) cmd = "python3 {} -f {} -csv {}".format( masscan_parser_path, "./result/masscan/" + save_name + ".xml", "./result/masscan/" + save_name + ".csv" ) os.system(cmd) read_masscan(save_name) # 端口探测主函数 def search_port(conf, filename): filter_ip() if conf['use_nmap']: nmap(filename) if conf['use_masscan']: masscan(filename) if __name__ == '__main__': filter_ip() fp = open("./config.json", "r", encoding="utf-8") conf_json = json.load(fp) config = conf_json['ports'] search_port(config, '2023_1_8')

2023-02-07 上传