1. 为什么内网排查和安全自检总是绕不开Nmap
1.1 Nmap到底是个什么东西
做网络运维或者安全自查的人,应该都绕不开一个叫Nmap的工具。老实说,我第一次接触Nmap纯粹是因为公司内网有一台服务器的Web服务莫名卡顿,当时只知道它是个“端口扫描器”,结果用下来才发现,这个工具能看的东西远比想象的多:端口开没开、服务版本是多少、系统可能是哪一套、甚至还能跑一堆内置脚本做初步自检。今天这篇内容,我想把自己这几年的使用经验整理一遍,从下载安装开始,到参数理解,再到一次完整的内网自检案例,尽量让刚接触的朋友也能照着操作。
Nmap全称是Network Mapper,说白了就是“网络映射器”。名字听起来有点抽象,你就把它理解成一张大楼的楼层分布图,IP地址相当于楼层号,端口相当于楼层里的房间门。Nmap做的事,就是拿着这张图挨个检查:哪些门开着,哪些门锁着,哪些门外面加了挡板。比如我扫一台服务器,就是想确认它对外开放了哪些服务,再把服务和版本号对上,做一遍“暴露面梳理”。
为什么说是“暴露面”?因为一台设备只要联网,就必然要监听某些端口来提供服务。Web服务器要监听80或443,远程登录要监听22,数据库可能会监听3306或5432。端口开着没问题,但如果开着不该开的端口,或者服务版本老旧,那就成了风险点。Nmap的核心价值,就是把这些原本藏在内网里的信息,用比较标准、可重复的方式暴露给你自己看。
另外要注意,Nmap是开源软件,跨Windows、Linux、macOS都能跑,而且免费。它不止是“扫描端口”,还能做主机发现、服务版本识别、操作系统指纹猜测、甚至通过NSE脚本引擎执行一系列自动化检查,所以很多安全测试流程里,Nmap往往是第一件被打开的工具。
1.2 适合哪些人用,哪些场景用
先说适合谁。我这些年见过不少人把Nmap当成黑客工具,其实不是那么回事。Nmap在正经工作里的使用场景非常多。
- 网络运维人员:排查内网设备是否在线、某个端口到底被哪个服务占用、防火墙策略是否生效。这些场景我都实际用过,比登录每台设备翻配置快得多。
- 安全测试人员:项目开始前的信息收集阶段,用Nmap梳理目标IP段里有哪些存活主机、开放了哪些端口,后续再针对性检查。
- 后端开发工程师:排查微服务之间到底通了没有,某个中间件端口是否被别的进程占用,这类小问题Nmap一条命令就能给出答案。
- 网络管理人员:定期做资产盘点,看看内网有没有私自接入的物联网设备、摄像头、打印机等。这个场景尤其实用,Nmap能直接识别大量设备的厂商信息。
再说适合的场景。我自己最常用的是内网资产自查、端口状态确认、服务版本识别这三个方向。比如公司突然多了一台设备,我想知道它是谁,就可以扫描对应网段,通过MAC地址前几位判断厂商;再比如线上服务突然连不上了,先扫一下本机端口,能快速确认服务到底是没起来,还是被防火墙挡了。这些事听起来不大,但每次都靠手工排查,会把人拖崩溃。
但有一条红线必须说清楚:Nmap只应该用于你自有资产,或者明确获得授权的目标。未经允许扫描别人的网络,在任何国家和地区都可能触犯法律。工具本身没有偏向,关键是使用者拿它做什么。我自己一般只在公司内网、自己的服务器、实验室虚拟机里做测试,建议新手也从自己的路由器开始练手。
2. Nmap下载与安装实操
2.1 Windows系统安装Nmap
Windows下安装Nmap最简单的方式,就是去官网下载安装包。官网地址是nmap.org,进来之后在Download页面找到Windows版本,下载最新的稳定版exe文件。安装过程没什么难度,一路Next就行,但有几个细节要注意。
第一,安装时会有一步提示你是否安装Npcap。Npcap是Windows下的数据包捕获库,Nmap要用它来发送原生数据包,实现SYN扫描、OS识别这些高级功能。默认建议勾选安装,不然之后的很多参数都用不了。
第二,安装目录尽量不要用中文,路径里最好不要有空格,比如默认的C:\Program Files (x86)\Nmap其实也能用,但后续如果你要用脚本或者配合其他工具,纯英文路径会更省心。
第三,安装完成后,命令行里直接敲nmap可能提示找不到命令。这是因为安装程序不一定把Nmap目录加进系统环境变量。解决办法有两种:一是重开一个命令行窗口,因为环境变量是登录时读取的;二是手动把C:\Program Files (x86)\Nmap加入PATH。如果实在不想折腾,也可以到安装目录下,用完整路径C:\Program Files (x86)\Nmap\nmap.exe执行,但那样效率太低,所以我还是建议把环境变量配好。
2.2 Linux和macOS安装Nmap
Linux上装Nmap一般用系统自带的包管理器。这里我把常见的发行版命令列一下,方便你直接对照操作。
| 操作系统 | 安装命令 | 备注 |
|---|---|---|
| Debian / Ubuntu | sudo apt update && sudo apt install nmap | 软件源自带,装完版本通常比较新 |
| CentOS / RHEL | sudo yum install nmap | 老版本源可能没有,需要先装EPEL |
| Fedora | sudo dnf install nmap | 直接用dnf |
| openSUSE | sudo zypper install nmap | 如果用了zypper发行版 |
| macOS | brew install nmap | 需要先安装Homebrew |
我自己的主力机器是Ubuntu,所以最常用sudo apt install nmap。CentOS那边有个小坑:默认源里的nmap版本可能很旧,如果你用nmap -V看到版本是6.x或者更老,建议先装EPEL源再装一次,不然某些--script参数和NSE脚本资源会缺。macOS用户直接用Homebrew最方便,不用自己编译源码。
如果你是非主流发行版或者有特殊定制需求,也可以从源码编译。但说实话,日常使用真没必要,因为编译要装依赖库,还要处理权限,折腾一圈下来跟直接包管理器安装的体验没有本质区别。除非你要改Nmap源码或者二次开发,否则包管理器就够了。
2.3 安装成功后先做一个冒烟测试
装好之后别急着扫描外部目标,先做一次“冒烟测试”,检查工具能不能正常工作。第一件事是确认版本号,在终端里执行:
nmap -V正常会输出类似Nmap version 7.94 ( https://nmap.org )这样的信息。看到版本号,说明主程序已经装好了。
接着扫本机回环地址,验证端口扫描功能。Windows下一般需要管理员权限,Linux下建议加sudo,因为某些扫描模式需要原始套接字。执行:
sudo nmap -sT 127.0.0.1 -p 22,80,443这个命令含义是:使用TCP Connect扫描模式(-sT),只扫本机的22、80、443三个端口。如果本机没开这些服务,你会看到端口状态是closed,如果开了,会显示open。这个测试不是为了找什么结果,而是确认程序能正常收发网络数据包、能正常输出结果。看到类似下面这样的输出,就说明Nmap已经可用了:
Starting Nmap 7.94 ( https://nmap.org ) Nmap scan report for localhost (127.0.0.1) Host is up (0.00030s latency). PORT STATE SERVICE 22/tcp closed ssh 80/tcp closed http 443/tcp closed https Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds之后你就可以开始正式使用了。我见过不少人装完工具第一件事就是扫别人服务器,这种冲动还是先压一压,对自己本机扫清楚了再考虑下一步。
3. Nmap核心使用逻辑与参数解析
3.1 一条扫描命令背后发生了什么
不少新手第一次用Nmap,就是记几个参数,然后照着网上的命令抄。这样虽然也能出结果,但遇到问题就抓瞎了,因为你不知道扫描底层是怎么办事的。所以先花两分钟讲讲Nmap扫描的基本原理。
一台服务器上的某个端口是否开放,本质上是看它是否在监听。如果你想判断远程主机上的80端口是不是开着,最简单的办法就是尝试建立一个TCP连接。TCP连接要经过三次握手:客户端发送SYN包,服务端如果同意连接就回复SYN/ACK包,客户端再回一个ACK包,连接就建立了。
Nmap就是利用这个握手过程来探测端口的。根据服务端的反应,它能判断出三种典型状态:
- open(开放):目标端口回应了SYN/ACK,说明有服务在监听,而且愿意接受连接。
- closed(关闭):目标端口回应了RST,相当于对方冷冷地说“这里没人”,说明端口是关着的,但主机在线。
- filtered(被过滤):目标端口没有任何回应,或者返回了ICMP不可达信息。这种情况通常是防火墙把包丢掉了,或者安全设备拦截了探测流量,你只能确定“这个端口的状态看不清楚”,不能直接说它关着。
除了这三种,还有unfiltered和open|filtered等更细的状态,在输出结果里也会出现。我实操时遇到最多的是open和filtered,filtered状态通常意味着你需要考虑绕过防火墙或者换一种扫描方式。
3.2 常用扫描模式怎么选:SYN、TCP Connect和UDP
Nmap的扫描模式很多,但平时高频使用的就那几种。理解它们的区别,能帮你判断什么时候该用哪个。
SYN扫描,参数是-sS。它发送SYN包,如果收到SYN/ACK就认为端口开放,然后发送RST包中断连接,而不是完成完整三次握手。所以这种扫描也叫“半开扫描”,速度很快,在目标机器上留下的连接记录更少。但注意,你仍然能从防火墙或系统日志里发现扫描痕迹,别觉得它完全隐形。SYN扫描需要root权限或管理员权限,所以Windows上要用管理员命令行,Linux上要加sudo。我在Linux下最常用-sS,因为它快,结果也准确。
TCP Connect扫描,参数是-sT。它走完整的三次握手,相当于真的和目标端口“握了个手”再断开。这种模式不需要管理员权限,普通用户也能执行,但速度慢一些,而且在目标系统上更容易留下访问记录。如果没有root权限,可以退而求其次用-sT。
UDP扫描,参数是-sU。UDP协议不像TCP那样有三次握手,所以判断端口是否开放要依赖协议本身的反应。很多UDP服务对收到的包不做回应,这时Nmap很难判断端口状态,所以UDP扫描慢而且误报率高。我一般只在明确需要排查DNS、SNMP、NTP这类UDP服务时才用,还要配合--top-ports只扫高频端口,不然全端口扫下去能等到天亮。
还有一个常用的主机发现参数是-sn,以前叫-sP。它只做Ping探测,看看目标主机是否存活,不扫描端口。比如你要先知道内网某个网段里哪些机器在线,就可以用sudo nmap -sn 192.168.1.0/24,输出会列出“某某IP is up”。这个命令是资产盘点的第一步,非常实用。
3.3 服务版本识别、系统指纹和端口范围控制
光知道端口是开着的,还不够。比如你看到80端口开着,但到底是Nginx还是Apache?是哪个版本?这就需要服务版本识别。
参数是-sV。Nmap会主动连接目标端口,发送一些探测数据,根据响应特征跟指纹库比对,最后给出服务名和版本号。比如输出里显示nginx 1.18.0,你就能知道这台机器上跑的是Nginx的某个版本,接下来再判断这个版本有没有已知问题就心里有数了。-sV还可以配合--version-intensity调整探测强度,默认是7,范围0到9,数值越大探测越细,耗时也越长。
操作系统识别参数是-O。它通过发送一系列特殊的TCP包,观察目标系统的响应行为,比如初始TTL、窗口大小、TCP选项等,推断它可能是Windows、Linux还是别的系统。这个功能不是百分百准确,尤其目标前面有防火墙或者被修改过系统默认参数时,结果可能只是“Linux 2.6.x”这种宽泛猜测。但作为参考,已经很有价值了。
端口范围控制是你最常用到的部分。默认情况下Nmap只扫1000个高频端口,包括SSH、HTTP、HTTPS、MySQL等都覆盖在内。如果你想指定端口,用-p:
sudo nmap -sS -sV -p 22,80,443,3306 192.168.10.11如果要扫连续范围,可以写-p 1-1024;要扫全部65535个端口,直接写-p-。注意,全端口扫描很耗时,如果是千兆内网还好,跨公网扫描可能非常慢,所以一般先扫重点端口,再决定要不要全扫。
我还有一个常用参数是--top-ports,比如--top-ports 200就是扫最常用的前200个端口。这个参数配合--top-ports可以让我既控制时间,又覆盖到高频服务,适合快速摸底。
3.4 结果导出与二次分析
命令跑完只是第一步,结果怎么保存、怎么分析同样重要。Nmap提供了几种输出格式,我用得最多的是普通文本、XML和grepable三种。
-oN result.txt:普通文本输出,给人看的,直观明了。-oX result.xml:XML格式,方便脚本或工具二次解析,适合接入自动化平台。-oG result.gnmap:grepable格式,每一行都规范化排列,适合用grep过滤关键字段。-oA result:这个参数会把上面三种格式一次性全部输出,文件名都以result开头。我做完一次完整扫描,基本都是用-oA,因为不知道后续会用到哪种格式。
分析结果时,我最常用的是grep命令。比如扫完拿到文本输出,想快速找出所有开放端口,可以执行:
grep -E "open" result.txt这样输出里就只剩状态为open的行,方便你一眼扫过去。如果要做成报告,我会把XML文件导入Excel或写脚本转成表格,把IP、端口、服务、版本列出来,结构清晰,给领导看也方便。
3.5 时序参数与常用组合
Nmap默认的扫描速度其实偏保守,怕影响目标网络。但内网自检的场景里,设备和带宽都是自己的,可以适当调快。时序参数从-T0到-T5有六个档位,-T0是极慢,几乎是一秒一个包;-T4是激进速度,适合内网环境;-T5是极度激进,容易对目标设备造成较大负载,不建议在生产环境用。我默认用-T4比较多,在速度和稳定性之间比较平衡。
还有一个很有用的参数是-Pn。正常情况下Nmap扫描前会先发ICMP Ping探测目标是否在线,如果目标禁Ping,Nmap会误判为主机离线,直接跳过扫描链路,最后你什么都扫不到。加了-Pn之后,Nmap会跳过Ping探测阶段,直接假设目标在线并开始端口扫描。这个参数在扫描防火墙后的主机时几乎是必用的,尤其很多Windows服务器默认会屏蔽ICMP,不加-Pn很容易漏。
另外,-A是一个“全家桶”参数,开启后相当于同时启用了操作系统指纹识别、服务版本识别、默认脚本扫描和路由追踪。虽然方便,但耗时也更长,而且会发送更多探测包。我一般是在确认目标存活、且目标不多的时候才用-A,大范围扫描时避免使用。
4. 实战案例:一次内网资产自查的完整过程
4.1 场景设定与目标范围确认
假设现在要对自己负责的内网做一次资产自查,网段是192.168.10.0/24,里面混杂着办公电脑、打印机、开发服务器、数据库服务器。我的目标是搞清楚三件事:
- 网段里到底有哪些设备在线,有没有不认识的“陌生设备”;
- 重点服务器对外开放了哪些端口和服务;
- 有没有端口明显暴露过大的问题,比如数据库端口对全网开放。
动手之前,先确认我对这个网段有管理权限。这是工作职责范围内的资产,所以操作是合规的。如果你是拿来练手,建议搭个虚拟机环境或者用自己的路由器做实验。
4.2 第一步:主机存活探测
任何一次完整扫描,我都建议先做主机发现,而不是上来就全端口扫描。原因很简单:整个/24网段最多有254个可用主机,如果全做详细端口扫描,耗时翻倍还不说,大量无关设备会制造噪音,干扰你对判断。
执行主机发现命令:
sudo nmap -sn 192.168.10.0/24 -oN alive.txt这里加了-oN保存成文本文件,方便后续对照。输出大概长这样:
Nmap scan report for 192.168.10.1 Host is up (0.00040s latency). MAC Address: 00:1A:2B:3C:4D:5E (Cisco-Linksys) Nmap scan report for 192.168.10.11 Host is up (0.00045s latency). MAC Address: BC:24:11:22:33:44 (Dell)从MAC地址里可以初步判断设备厂商,比如Cisco-Linksys多半是路由器,Dell多半是服务器或办公电脑。我把输出和资产台账一一比对,如果发现有不在台账里的MAC地址,就得重点标记,确认是谁悄悄接进来的。
4.3 第二步:重点资产端口扫描
存活主机确认完之后,重点转向服务器。比如办公网里有台开发服务器192.168.10.11,我想看看它到底开放了哪些常用端口,就可以这样扫:
sudo nmap -sS -sV -T4 -p 22,80,443,3306,6379,8080 192.168.10.11 -oN focus_ports.txt拆解一下这条命令:-sS用SYN扫描,-sV识别服务版本,-T4加速,-p指定端口列表,最后保存文本输出。
执行完的输出关键部分类似:
Starting Nmap 7.94 ( https://nmap.org ) Nmap scan report for 192.168.10.11 Host is up (0.00042s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 80/tcp open http nginx 1.18.0 3306/tcp open mysql MySQL 8.0.32 6379/tcp open redis Redis 5.0.7 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 8.47 seconds这个结果一看就知道问题在哪了。正常的开发服务器开22做远程登录、80跑Web服务没问题,但3306(MySQL)和6379(Redis)不应该对全网开放。特别是Redis,6379端口如果暴露出来且没有设置强密码,很容易被扫描到后被攻破作为跳板。到这里我就不需要继续做任何攻击性测试了,因为我只需要确认暴露面,然后推动整改。
再举一个例子,假设我要检查一台Web服务器192.168.10.15,不仅要看端口,还想了解HTTP响应头、页面标题、证书信息,可以加脚本扫描:
sudo nmap -sS -sV -p 80,443 --script=http-title,http-headers,ssl-cert 192.168.10.15--script参数会调用Nmap脚本引擎(NSE)。http-title会抓取页面标题,http-headers会查看响应头,ssl-cert会显示HTTPS证书的信息。这些信息在排查服务器异常时非常有用,比如响应头里泄漏了具体框架版本,你就能判断是不是需要升级加固。
4.4 第三步:补漏与结果整理
扫描过程中,我发现网段里有几台主机虽然在线,但端口全部显示filtered,这说明它们前面可能开启了系统防火墙。我再加-Pn重新扫描,跳过Ping探测,直接打端口:
sudo nmap -sS -sV -Pn -p 1-1024 192.168.10.18 -oA 192.168.10.18这次能扫出一些之前看不到的结果,但还是有一部分端口是filtered,说明防火墙确实在拦截探测包。这种情况我会认定“端口不可从本网段访问”,算是等保自检里的一个发现项,但不强行绕过防火墙,因为绕过别人安全策略本身就是越界行为。
最后把所有在线主机、开放端口、服务版本汇总到一张表格里,标注风险点和整改建议。我通常会用-oA保存所有格式,然后用一个简单脚本从XML里提取关键字段,输出成CSV。但如果你只需要手工整理,把grep -E "open"的结果粘贴到表格里也够用了。
5. 常见问题、报错与避坑技巧
5.1 主机明明在线但是扫不到端口
这个坑我踩过很多次。现象是目标主机Ping能通,但Nmap用-sT扫端口时结果全是“0 hosts up”,或者端口全是filtered。
原因多数出在主机发现阶段。Nmap默认会先发ICMP Echo请求和TCP ACK包到目标端口来确认主机是否存活,如果目标启用了防火墙,尤其是Windows系统默认会拦截ICMP Echo,Nmap就会认为主机离线。遇到这种情况,用-Pn跳过主机发现环节,直接扫描端口,往往立刻就能扫出结果。
还有一个相关原因是目标主机设置了iptables规则,禁止所有入站流量,这时候你扫外部端口当然是什么都看不见。这种情况不是Nmap问题,而是网络策略问题,需要同时看防火墙配置才能判断。
5.2 扫描太慢怎么办
全端口扫描在跨网段或者跨公网时,慢得让人怀疑人生。我有一次扫阿里云上一台机器,-p-全端口扫了一晚上都没结束,最后不得不把参数调整成只扫常用端口才跑完。
提升速度的几个思路:
- 使用
-T4或-T5提高并发,但-T5比较激进,不建议在正式环境用,容易把老设备拖死。 - 缩小端口范围,不要盲目
-p-,用--top-ports 1000或直接指定常用端口列表。 - 加
--min-rate 500,设置最小发包速率,单位是包每秒。这个参数能大幅提速,但要注意目标网络的承受能力。 - 加
--host-timeout 10m,如果单个主机扫描超过10分钟就自动放弃,避免一台设备卡住整个任务。
我一般在内网用-T4 --min-rate 500 -p 1-1024,速度稳定结果也准;跨公网会再降一点,防止被安全设备误判成攻击流量。
5.3 权限不足的典型表现
Nmap很多高级功能需要root或管理员权限。如果你不是管理员,执行-sS或者-O这类参数,可能会看到类似You cannot use -sS with raw sockets或Operation not permitted的报错。解决办法有两个:一是加上sudo或右键管理员运行;二是改用不需要原始套接字权限的-sT扫描,但有些功能比如OS指纹识别还是会受限制。
这个坑最简单,但很多人一开始都会卡住,尤其是Windows用户。很多初学者在普通命令行里跑Nmap,结果连本机端口都扫不出来,实际上是权限不够。
5.4 NSE脚本怎么选
Nmap脚本引擎(NSE)非常强大,但也要谨慎使用。我平时最常用--script=http-title、--script=http-headers、--script=ssl-cert这类安全脚本,它们只发送普通HTTP或TLS请求,不会对目标造成什么影响。另外会用--script=default扫一组常用检查项,用于快速体检。
NSE脚本按功能分类,常见的有default、safe、intrusive、vuln、exploit、dos等。这里面safe类脚本风险较低,intrusive类可能会导致目标服务出错或者产生大量日志,exploit和dos类可能对目标造成实际影响,没有书面授权千万不要乱跑。哪怕是在自己资产上测试,也要先评估会不会影响业务。
我的原则是:能用safe脚本解决的问题,绝不用intrusive;默认组合解决不了,再按需单个指定,绝不一把梭跑全部脚本。
5.5 我常备的几条命令组合
这里整理几条我自己用得很顺手的命令,可以当作工作里的“模板”复用。
| 目的 | 命令 |
|---|---|
| 快速发现网段存活主机 | sudo nmap -sn -n 192.168.10.0/24 |
| 重点端口体检 | sudo nmap -sS -sV -T4 -p 22,80,443,3389,3306,6379 192.168.10.11 |
| 全端口高强度识别 | sudo nmap -sS -sV -A -T4 -p- 192.168.10.11 |
| UDP高频端口抽样 | sudo nmap -sU --top-ports 200 -T4 192.168.10.11 |
| 跳过Ping强制扫描 | sudo nmap -sS -sV -Pn -p 1-1024 192.168.10.18 |
解释一下最后两条。UDP扫描我平时很少全扫,只用--top-ports 200抽样,重点看DNS、SNMP、NTP这些服务,够用了。跳过Ping那条命令主要用来应付禁Ping的Windows主机。
6. 关于Nmap学习路径的一点个人建议
6.1 我的建议学习路线
如果你看完这篇文章,想系统把Nmap学扎实,我建议按照这样的顺序来。
第一步,先把TCP协议搞清楚。不要求你会写协议栈,但你要知道三次握手是怎么回事、SYN和ACK的作用是什么、RST包意味着什么。我见过太多人背了一堆参数,遇到端口状态是open|filtered就完全看不懂,其实就是协议底子不够。这一步可以用Wireshark配合Nmap做实验,一边扫一边抓包,直观感受每个包长什么样。
第二步,把基础参数过一遍,重点理解-sS、-sT、-sU、-sV、-O、-p、-Pn、-T4、-oA这些,不要试图一天记住所有参数,能熟练解决你的日常问题就够了。
第三步,在本地虚拟机里搭几个目标环境。开两台虚拟机,一台装Ubuntu跑SSH和Nginx,一台装Windows开远程桌面和HTTP服务,然后从宿主机去扫描它们。这种操作完全可控,也没有合规风险,适合反复练习。
第四步,再进阶学习NSE脚本,看你用不用得上。脚本引擎确实能提高效率,但它是建立在前面基础之上的,千万别刚学会nmap 127.0.0.1就去跑一堆exploit脚本,那既危险又没必要。
6.2 一点个人心态上的提醒
工具只是辅助,网络基础和判断力才是关键。Nmap再强大,也只是把你的网络情况映射出来,真正做判断的仍然是你自己。我看到有些新手喜欢用最激进的时间模板和全端口扫描,觉得这样才“专业”,其实在真实工作里,更重要的是知道该在什么时候用什么扫描方式。过度扫描既不礼貌,也容易触发目标网络的安全告警。
还有一件事我想特别强调:尊重授权边界。哪怕你是安全从业者,没有书面授权就去扫描别人的网络,照样可能惹麻烦。练手永远选自己的设备、自己的虚拟机或者公司明确划分给你的测试范围。这不是胆小,而是专业。
如果非要我总结一句话:Nmap值得每个人都先拿自己的路由器扫一遍,搞清楚自己家里到底开了哪些服务,这种对“暴露面”的感知,会陪你走过很长的技术路。