Nmap教程:探索网络中的瑞士军刀

admin 2024年2月17日01:04:43评论13 views字数 7885阅读26分17秒阅读模式

欢迎来到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的位数。

  1. 示例一: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。

  1. 示例二: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进行扫描时,您可能会得到大量的结果。学会如何过滤和排序这些结果,将帮助您更快地找到重要信息。

使用例子

  1. 过滤扫描结果 📝

只显示开放的端口:

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)编写和执行脚本,以执行更复杂的网络探测和攻击。

    使用例子

    1. 版本探测 🕵️‍♂️

    使用默认脚本探测服务版本:

    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提供了多种高级网络扫描技术,允许用户执行更复杂和详细的网络探测。

    使用例子

    1. 防火墙绕过 🔥

    使用碎片化扫描绕过防火墙:

    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提供了多种隐蔽扫描技巧,帮助您实现这一目标。

    使用例子

    1. 慢速扫描 🐢

    使用T5选项进行极慢的扫描,减少被发现的机会:

    nmap -T0 192.168.1.1

  • 僵尸网络扫描 🧟‍♂️

  • 使用僵尸主机进行扫描,隐藏自己的IP地址:

    💡

    在进行僵尸网络扫描时,您需要配置一个具有足够带宽和稳定性的僵尸主机。请确保您在合法和合规的环境中进行实验,并且只针对您有授权的目标进行扫描。要配置僵尸主机,您需要按照以下步骤进行操作:

    1. 在目标主机上安装并配置代理软件,例如Squid。

    1. 将代理软件配置为允许转发Nmap扫描请求。

    1. 配置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教程:探索网络中的瑞士军刀

    • 左青龙
    • 微信扫一扫
    • weinxin
    • 右白虎
    • 微信扫一扫
    • weinxin
    admin
    • 本文由 发表于 2024年2月17日01:04:43
    • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                     Nmap教程:探索网络中的瑞士军刀http://cn-sec.com/archives/2498541.html

    发表评论

    匿名网友 填写信息