局域网监控:Nmap扫描程序及其设置与用法

需积分: 13 2 下载量 42 浏览量 更新于2024-10-24 1 收藏 9KB ZIP 举报
资源摘要信息:"Nmap是一个开源的网络扫描和探测工具,用于发现网络上的设备以及侦测它们开放的端口和服务。它可以用于多种目的,包括网络安全审计、监控和维护网络以及网络映射等。Nmap通过发送原始IP包并分析回应来侦测网络上的设备和端口。它支持多种扫描技术,比如TCP SYN扫描、TCP connect扫描、UDP扫描和ICMP扫描等。" 知识点: 1. Nmap扫描概念: Nmap扫描是网络管理员和安全专家常用的一种工具,它可以通过向目标网络发送数据包并分析返回的数据包来识别网络中的设备、开放的端口和服务。这种扫描通常用于网络安全审计,以发现可能的安全漏洞。Nmap支持多种类型的扫描,包括但不限于TCP扫描、UDP扫描、ICMP扫描和高级扫描技术如版本侦测和服务侦测。 2. LAN监控程序概念: LAN监控程序是指能够监控和报告局域网内部通信和设备状态的软件程序。这类程序通常用于监控网络活动,帮助网络管理员或用户了解哪些设备正在网络上活跃,以及它们打开了哪些端口。在本例中,该程序利用Nmap扫描局域网设备,并将获取的数据存储在数据库中供后续分析和监控使用。 3. MongoDB数据库: MongoDB是一个面向文档的开源数据库系统,由C++编写而成,旨在提供可扩展的高性能数据存储解决方案。与传统的关联型数据库不同,MongoDB不使用固定的表结构,而是将数据存储在称为"文档"的类似JSON格式的记录中。这种设计使得数据库能够非常灵活地存储和查询各种数据类型,并且便于水平扩展。在本例中,MongoDB用于存储扫描结果数据。 4. Python脚本执行: Python是一种广泛使用的高级编程语言,具有易于学习和使用的语法。在这个场景中,Python脚本被用来控制Nmap扫描过程并处理扫描结果,它可能还涉及与MongoDB数据库交互的功能,例如将扫描数据存储到数据库中。脚本可能包括调用Nmap命令、解析输出结果以及使用pymongo库连接和操作MongoDB数据库。 5. 设置与安装步骤: 为了使用Nmap和MongoDB进行网络扫描和数据存储,需要先安装必要的软件和库。对于OSX用户,首先需要使用brew(Homebrew是OSX的包管理器)安装mongodb。安装完成后,通过pip安装Python扩展pymongo,它是一个Python库,可以与MongoDB数据库交互。 6. 使用说明: 要运行这个局域网监控程序,用户必须拥有root权限,因为某些信息(如MAC地址)只能在管理员级别获取。此外,由于IP地址可能会随着DHCP的重新分配而改变,使用MAC地址作为设备的唯一标识是必要的。对于MongoDB的使用,需要使用特定的命令mongod --dbpath db来启动数据库服务器。一旦数据库运行,用户可以使用命令行工具mongo来跟踪客户端。 7. Python脚本使用方法: 在脚本文件名前加上sudo来以root权限运行,确保能够执行所有需要的操作。使用Python脚本进行扫描时,它会调用Nmap来扫描局域网中的设备和开放端口,并将扫描结果存储到MongoDB数据库中。 8. 命令行工具mongo的使用: mongo是MongoDB的命令行工具,用于管理MongoDB实例和操作数据库。通过mongo工具可以查询、插入、更新或删除数据库中的数据。在此例中,通过mongo工具可以列出数据库和选择特定的数据库进行操作。

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 上传
2023-06-10 上传