欢迎来到Nmap使用教程,这是一个既专业又有趣的指南,旨在帮助您掌握Nmap的使用,从基础到高级,每一步都充满乐趣!🎉教程中的每个部分都有相关关键术语的即时解释,让您一站化入门。
原文连接:https://hackerchi.top/article/b737227e-51d7-4281-8f0c-3e3748128167.html
引言 📖
Nmap,即NetworkMapper,是一款开源的网络探测和安全审计工具。它能帮助您发现网络中的设备,并识别潜在的安全风险。在这个教程中,我们将一步步引导您如何有效地使用Nmap,让您的网络更加安全。
因为Nmap还有图形化版本,这里为了原汁原味和适用性更强,这里采用终端版本,在KaliLinux中可以进行实验,如果为方便操作,可以参考我之前的文章,可以在官网和公众号中查找《2024真正可行的手机安装Kali Linux方法![1]》,您可以在Nmap官网[2]下载Nmap的图形化版本。
Nmap介绍 🌐
欢迎来到使用Nmap的终极指南,Nmap是网络映射工具,已成为任何网络安全专业人士工具箱中不可或缺的一部分。无论您是资深的安全专家还是刚刚起步,本教程旨在为您提供全面了解Nmap及其功能的知识,并教您如何有效地使用它来保护您的网络。
Nmap,即网络映射器,是一个用于网络发现和安全审计的免费开源工具。它由Gordon Lyon(也以其笔名FyodorVaskovich而闻名)创建,并因其多功能性和强大的扫描能力而在网络安全社区中备受青睐。
为什么学习Nmap?🤔
-
安全审计:Nmap允许您发现网络上运行的设备并识别潜在的漏洞。
-
网络清单:跟踪连接到您网络的所有设备。
-
监控:定期使用Nmap扫描可以帮助您检测未经授权的设备或网络中的变化。
-
乐趣与学习:Nmap不仅仅是一个工具;它是网络爱好者探索和学习网络协议、服务和安全的游乐场。
您将学到什么?📚
在本教程中,我们将涵盖从Nmap的基础使用到高级使用的所有内容。以下是即将介绍的内容概览:
-
基础使用:学习Nmap的基本知识,包括如何执行简单的网络扫描。
-
中级使用:深入探索Nmap的功能,了解更复杂的扫描和选项。
-
高级使用:掌握使用Nmap进行全面网络分析和安全审计的技艺。
通过本教程的学习,您将具备使用Nmap有效完成广泛网络任务的知识和技能。那么,让我们开始这一激动人心的旅程吧!🚀
基础使用 🛠️
欢迎进入Nmap基础使用部分!在这一部分,我们将探索Nmap的基本命令和参数,以及如何通过简单的网络扫描开始您的Nmap之旅。无论您是网络安全的新手还是想要复习基础知识的专家,这里都有您需要的信息。
Nmap安装 📦
在开始使用Nmap之前,您需要确保已经在您的系统上安装了它。Nmap支持多种操作系统,包括Windows、Linux和MacOS。
-
Windows: 访问Nmap官网[3]下载安装程序。
-
Linux: 大多数Linux发行版都可以通过包管理器安装Nmap,例如在Ubuntu上使用sudo apt-get install nmap。
-
MacOS: 可以通过Homebrew[4]使用命令brew install nmap安装。
基本命令和参数 📝
Nmap的基本格式如下所示,接下来的内容格式都为如此:
nmap [扫描目标] [选项]
您可以使用IP地址、主机名、CIDR块等作为扫描目标,而选项用于定义您想要执行的扫描类型和其他参数。
💡
CIDR(Classless Inter-Domain Routing)是互联网中一种新的寻址方式,与传统的A类、B类和C类寻址模式相比,CIDR在IP地址分配方面更为高效。CIDR采用斜线记法,表示为:IP地址/网络ID的位数。
-
示例一:CIDR格式换算为IP地址网段例如10.0.0.0/8,换算为32位二进制地址:00001010.00000000.00000000.00000000。其中/8表示8位网络ID,即32位二进制地址中前8位是固定不变的,对应网段为:00001010.00000000.00000000.00000000~00001010.11111111.11111111.11111111。则换算为十进制后,10.0.0.0/8表示:子网掩码为255.0.0.0,对应网段为10.0.0.0~10.255.255.255。
-
示例二:IP地址网段换算为CIDR格式例如192.168.0.0~192.168.31.255,后两段IP换算为二进制地址:00000000.00000000~00011111.11111111,可以得出前19位(8*2+3)是固定不变的,则换算为CIDR格式后,表示为:192.168.0.0/19。
Nmap的强大之处在于其灵活的命令行选项,下面是一些基本的命令和参数:
-
v: 增加输出的详细程度。
-
A: 启用OS检测、版本检测、脚本扫描和traceroute。
-
p:指定要扫描的端口范围,例如p 1-100。
使用例子 🌟
端口扫描 🚪
扫描目标主机上开放的端口:
nmap -v -p 1-65535 192.168.1.1
主机发现 🔍
发现局域网内的活跃主机:
#隐蔽扫描
nmap -sn 192.168.1.0/24
操作系统探测 🕵️♂️
探测目标主机的操作系统类型:
nmap -A 192.168.1.1
通过这些基础的使用例子,您已经可以开始使用Nmap进行简单的网络探测了。记得在实践中尝试不同的命令和参数,以更好地理解它们的工作原理。🚀
中级使用 🛡️
欢迎来到Nmap中级使用部分!在这里,我们将深入探讨Nmap的一些更高级的功能,包括过滤和排序结果、使用脚本扫描等。这些技巧将帮助您更有效地使用Nmap,以适应更复杂的网络环境和安全需求。
过滤和排序结果 📊
在使用Nmap进行扫描时,您可能会得到大量的结果。学会如何过滤和排序这些结果,将帮助您更快地找到重要信息。
使用例子
-
过滤扫描结果 📝
只显示开放的端口:
nmap -p 1-65535 192.168.1.1 --open
排序扫描结果 🔍
对扫描结果按照主机名进行排序:
nmap --dns-servers 192.168.1.1 --system-dns
输出格式化 🖨️
将扫描结果输出为XML格式:
nmap -oX scan_results.xml 192.168.1.1
使用脚本扫描 📜
Nmap的一个强大功能是它的脚本引擎,它允许用户使用Nmap脚本语言(Nmap Scripting Engine, NSE)编写和执行脚本,以执行更复杂的网络探测和攻击。
使用例子
-
版本探测 🕵️♂️
使用默认脚本探测服务版本:
nmap -sV 192.168.1.1
漏洞扫描 🛡️
使用Nmap脚本扫描目标主机的漏洞:
nmap --script vuln 192.168.1.1
脚本扫描 📚
使用特定的Nmap脚本进行扫描:
nmap --script=http-title 192.168.1.1
通过这些中级使用例子,您将能够更深入地了解Nmap的功能,并在您的网络探测和安全评估中更加灵活地使用它。继续探索,不断学习,您将成为Nmap使用的高手!🚀
高级使用 🚀
欢迎来到Nmap高级使用部分!在这一部分,我们将探索Nmap的一些最高级和最强大的功能,包括高级网络扫描技术和隐蔽扫描技巧。这些高级技巧将帮助您在进行网络探测和安全评估时,更加灵活和隐蔽。
高级网络扫描技术 🌍
Nmap提供了多种高级网络扫描技术,允许用户执行更复杂和详细的网络探测。
使用例子
-
防火墙绕过 🔥
使用碎片化扫描绕过防火墙:
nmap -f 192.168.1.1
IDS/IPS逃逸 🛡️
使用十六进制模式绕过入侵检测系统:
nmap --data-length 200 192.168.1.1
高级脚本扫描 📜
使用Nmap脚本引擎(NSE)执行复杂的脚本扫描:
nmap --script=auth,brute,vuln 192.168.1.1
隐蔽扫描技巧 🕵️♂️
在某些情况下,您可能需要在不被发现的情况下进行扫描。Nmap提供了多种隐蔽扫描技巧,帮助您实现这一目标。
使用例子
-
慢速扫描 🐢
使用T5选项进行极慢的扫描,减少被发现的机会:
nmap -T0 192.168.1.1
僵尸网络扫描 🧟♂️
使用僵尸主机进行扫描,隐藏自己的IP地址:
💡
在进行僵尸网络扫描时,您需要配置一个具有足够带宽和稳定性的僵尸主机。请确保您在合法和合规的环境中进行实验,并且只针对您有授权的目标进行扫描。要配置僵尸主机,您需要按照以下步骤进行操作:
-
在目标主机上安装并配置代理软件,例如Squid。
-
将代理软件配置为允许转发Nmap扫描请求。
-
配置Nmap命令,使用sI选项指定僵尸主机的IP地址。
请注意,使用僵尸网络扫描需要遵守法律法规,仅在授权范围内进行。确保您了解和遵守当地的网络安全和隐私法律。
nmap -sI 192.168.1.1 [僵尸主机IP]
分段扫描 🧩
将扫描任务分成多个小部分,逐一执行:
nmap -r 192.168.1.1
通过掌握这些高级使用技巧,您将能够更加灵活和有效地使用Nmap进行网络探测和安全评估。记得在实际操作中遵守法律法规,合理使用Nmap。🚨
结束语 🎉
恭喜您完成了这次Nmap使用教程的学习之旅!从基础使用到高级技巧,我们一起探索了Nmap的强大功能和多样化应用。希望这个教程不仅能够帮助您掌握Nmap,还能激发您对网络安全的热情和好奇心。🔍
学习之旅的回顾 🔄
-
基础使用 🛠️: 我们学习了Nmap的安装过程、基本命令和参数,以及如何进行简单的网络扫描。
-
中级使用 🛡️: 我们深入了解了过滤和排序结果、使用脚本扫描等更高级的功能。
-
高级使用 🚀: 我们探索了高级网络扫描技术、隐蔽扫描技巧,以及如何绕过防火墙等高级技巧。
-
Emoji Guide 😃: 我们通过emoji图标增强了学习的趣味性和表现力。
继续前进 🚴
虽然这个教程已经结束,但您的学习之旅才刚刚开始。Nmap是一个不断发展的工具,随着网络技术的进步,它也在不断地更新和增加新功能。我们鼓励您继续探索Nmap的更多功能,参与社区,与其他网络安全爱好者交流学习。
记住,实践是最好的老师。不要害怕在安全的环境下尝试新的命令和技巧,这将帮助您更深入地理解Nmap的工作原理和潜力。
最后的话 💌
再次感谢您的参与和努力。希望这个教程能成为您网络安全学习道路上的一盏明灯,照亮您前进的方向。如果您有任何反馈或建议,请不要犹豫,我们非常欢迎您的声音。
祝您在网络安全的世界里探索愉快!🚀看到这里了,免费彩蛋一枚!自动化内网扫描脚本,比较基础,方便小白直接使用。
import os
import platform
import nmap
import re
from rich.console import Console
from rich.table import Table
# 全局变量,用于保存上次扫描的IP地址
last_scan_ips = []
# 创建一个Console实例
console = Console()
# 显示制作者信息
def show_author_info():
console.print("""
___ _ _
|_ _|_ __ | |_ _ __ __ _ _ __ ___| |_ ___ ___ __ _ _ __ _ __ ___ _ __
| || '_ | __| '__/ _` | '_ / _ __| / __|/ __/ _` | '_ | '_ / _ '__|
| || | | | |_| | | (_| | | | | __/ |_ __ (_| (_| | | | | | | | __/ |
|___|_| |_|__|_| __,_|_| |_|___|__| |___/_____,_|_| |_|_| |_|___|_|
作者:黑客驰 HackerChi 官网:hackerchi.top 公众号:黑客驰
""")
# 获取操作系统类型
def get_os_type():
os_type = platform.system()
console.print("操作系统类型: ", os_type)
return os_type
# 执行ipconfig或ifconfig命令获取网络配置信息
def get_net_config(os_type):
console.print("正在获取网络配置信息...")
if os_type == "Windows":
net_config_result = os.popen('ipconfig').read()
else:
net_config_result = os.popen('ifconfig').read()
console.print("网络配置信息获取成功")
return net_config_result
# 执行arp命令获取arp表信息
def get_arp():
console.print("正在获取ARP表信息...")
arp_result = os.popen('arp -a').read()
console.print("ARP表信息获取成功")
return arp_result
# 执行route print或netstat -rn命令获取路由表信息
def get_route(os_type):
console.print("正在获取路由表信息...")
if os_type == "Windows":
route_result = os.popen('route print').read()
else:
route_result = os.popen('netstat -rn').read()
console.print("路由表信息获取成功")
return route_result
# 从网络配置、ARP表和路由表信息中提取可能的IP范围
def extract_ip_ranges(net_config_result, arp_result, route_result):
console.print("正在从网络配置、ARP表和路由表信息中提取可能的IP范围...")
ip_pattern = re.compile(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}')
ip_list = ip_pattern.findall(net_config_result + arp_result + route_result)
ip_ranges = [ip.rsplit('.', 1)[0] + '.0/24' for ip in ip_list]
console.print("IP范围提取成功")
return list(set(ip_ranges)) # 去除重复的IP范围
# 使用nmap进行网络扫描
def scan_network(ip_range, scan_type):
console.print("正在进行网络扫描...")
nm = nmap.PortScanner()
if scan_type == '1':
nm.scan(ip_range, '22-443') # 扫描指定IP范围的22-443端口
elif scan_type == '2':
nm.scan(ip_range, arguments='-sn') # 执行ping扫描
elif scan_type == '3':
nm.scan(ip_range, arguments='-O') # 执行操作系统检测
elif scan_type == '4':
nm.scan(ip_range, arguments='-A') # 执行超详细扫描
elif scan_type == '5':
nm.scan(ip_range, arguments='-T0') # 执行最安全扫描
elif scan_type == '6':
nm.scan(ip_range, arguments='--script=default') # 执行常用脚本扫描
else:
console.print("无效的扫描类型")
return []
console.print("网络扫描完成")
scanned_ips = []
for host in nm.all_hosts():
console.print('Host : %s (%s)' % (host, nm[host].hostname()))
scanned_ips.append(host)
console.print('State : %s' % nm[host].state())
for proto in nm[host].all_protocols():
console.print('----------')
console.print('Protocol : %s' % proto)
lport = nm[host][proto].keys()
for port in lport:
console.print('port : %ststate : %s' % (port, nm[host][proto][port]['state']))
return scanned_ips
# 主函数
def main():
global last_scan_ips
show_author_info()
while True:
os_type = get_os_type()
net_config_result = get_net_config(os_type)
arp_result = get_arp()
route_result = get_route(os_type)
ip_ranges = extract_ip_ranges(net_config_result, arp_result, route_result)
console.print("可能的IP范围:")
for i, ip_range in enumerate(ip_ranges):
console.print(f"{i+1}. {ip_range}")
if last_scan_ips:
console.print(f"{len(ip_ranges)+1}. 使用上次扫描的IP地址")
console.print(f"{len(ip_ranges)+2}. 自定义扫描地址")
ip_range_choice = input("请选择要扫描的IP范围(输入数字):")
if int(ip_range_choice) == len(ip_ranges) + 1:
ip_range = last_scan_ips
elif int(ip_range_choice) == len(ip_ranges) + 2:
ip_range = input("请输入自定义的IP地址:")
else:
ip_range = ip_ranges[int(ip_range_choice)-1]
console.print("请选择扫描类型:")
console.print("1. 端口扫描")
console.print("2. Ping扫描")
console.print("3. 操作系统检测")
console.print("4. 超详细扫描")
console.print("5. 最安全扫描")
console.print("6. 常用脚本扫描")
console.print("7. 自定义端口扫描")
scan_type = input("请输入扫描类型(输入数字):")
if scan_type == '7':
port_range = input("请输入自定义的端口范围(例如:22-443):")
console.print("开始扫描网络...")
last_scan_ips = scan_network(ip_range, scan_type, port_range)
else:
console.print("开始扫描网络...")
last_scan_ips = scan_network(ip_range, scan_type)
if __name__ == "__main__":
main()
原文始发于微信公众号(黑客驰):Nmap教程:探索网络中的瑞士军刀
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论