
碰到内网里某些设备“看不到但有联通”、共享文件总是打不开、新接手的网络完全摸不清有什么设备这些问题绕到最后都会回到同一个动作先弄清楚网络里到底有什么。内网探测或者叫内网信息收集干的就是这件事。做安全的同学对这个词不陌生做运维的同学可能每天都在干只是没意识到。我这些年既做过甲方内部的安全评估也帮朋友公司梳理过资产借这篇博文把内网探测的常用技术方法、协议原理、工具参数和踩坑的点做个系统整理希望对正要接触这个方向的人有点帮助。这不是一篇教你“怎么黑别人”的文章。所有的探测方法都应该是建立在授权和合规前提下的无论是做安全评估、资产盘点还是排查网络故障只要涉及主动扫描都先确认你到底有没有权利对这个网络执行探测。用工具五分钟学会搞清边界一辈子受益。1. 内网探测的本质先画地图再谈深度1.1 为什么“探测”是第一步内网和公网最大的区别在于公网有搜索引擎、有各种测绘平台你输入一个域名就能拿到一堆信息。内网不一样它是个封闭环境没有公开索引你需要靠网络协议本身去“问”网络谁在线、开了什么、怎么连接的。这就像一个刚搬进新小区的人手上没有户型图也没有住户名单只能挨家挨户敲门问。不管是安全评估还是日常运维内网探测做的都是同一件事把不确定的网络转变成一份确定性的清单。我见过不少刚接触安全测试的同学拿到一台跳板机或者一个网络权限之后就急着往后走结果连目标网段有多大、网关在哪都不清楚后面做的事情全是瞎撞。反过来运维同学新接手一套网络第一件事也是摸清楚交换机下面挂了多少终端、哪些IP是服务器、哪些网段是摄像头——这不是“搞安全的毛病”这是任何一个网络工作者面对陌生网络时都必须走的一步。我把内网探测的价值归纳成三点第一建立基线知道正常状态长什么样后面出现异常才有对比第二缩小范围几百台设备里到底哪几台是关键节点扫完才有结论第三形成记录无论审计还是故障回溯都得有一张能翻出来的资产表。1.2 探测流程的依赖关系内网探测不是几条命令随手一敲就完事它有非常强的顺序依赖。我习惯把它拆成四层一层做完再进下一层第一步是自身定位。先搞清楚自己这台机器在内网的坐标IP地址是什么、属于哪个网段、默认网关是哪个、DNS指向哪里。这一步看着基础但很多人跳过了直接对着一个猜测的网段就开扫扫了半天发现目标根本不在同一个路由区域。自身定位的信息从本机的网络配置就能拿不需要任何扫描动作是所有后续操作的前提。第二步是存活主机发现。拿到网段范围之后先确认哪些IP是活的哪些是空地址或者不存在的地址。这个阶段不需要精细目标是把一个 254 个地址的网段收敛到几十个活跃IP能大大节省后续端口扫描的时间。第三步是端口与服务识别。对存活的主机做端口扫描确定每个IP上开放了哪些TCP/UDP端口然后进一步识别端口背后跑着什么服务、什么版本。端口是服务的人口服务是系统状态的窗口这一步是整个内网探测信息密度最高的一环。第四步是汇总成图。把IP、MAC、主机名、端口、服务、操作系统这些信息拼到一起形成一个完整的资产画像和网络拓扑。很多人做到第三步就停了觉得扫描结束就是结束实际上少了最后这步整理前面扫出来的东西只能叫数据不能叫情报。1.3 工具选型的真实考量说到工具很多新手的第一反应是“哪个工具最强”我一般都会反问一句你的场景是什么工具之间不是强弱的区别是匹配度的区别选型要看四个维度网络规模、时间窗口、权限级别和免干扰能力。比如一个一千多台设备的办公网你想快速摸个大概可能用fping这类轻量工具做ICMP批量探测就够了速度快开销小结果也够用。但如果是要做一次严谨的安全评估几百个IP逐个做全端口扫描加服务识别就得上nmap这种功能全面的工具接受它消耗的时间和产生的告警。再比如有些场景要求尽量少留下痕迹比如在带严格安全监控的网络里做授权测试那就得调整扫描速率参数、控制并发、分段执行而不是一把梭全端口。还有一个选型上的现实问题很多人喜欢自己写脚本去做扫描。我不反对但建议先把现成工具吃透。nmap这类工具历经十几年迭代里面关于超时计算、重传策略、指纹匹配的细节远比你临时写个socket脚本要周全。自研脚本更适合定制化的小需求比如批量核对某个特定端口的开放情况而不是代替现成工具去解决通用问题。2. 常用探测技术原理拆解为什么这些方法有效2.1 二层探测的底盘ARP协议先讲一个概念同一个网段内主机之间通信靠的是MAC地址不是IP地址。IP地址要在路由层面才有意义而在同一个广播域里IP要找到对应的MAC地址靠的就是ARP协议地址解析协议。ARP扫描的原理很直接向目标网段发送一个ARP请求问“谁是 192.168.x.x请把你的MAC地址告诉我”。这个请求是广播帧会发给同一个二层网络里的所有主机只有IP地址匹配的那台机器会回应。你不需要主动连接对方任何端口就能知道这个IP是活的还直接拿到了它的MAC地址。我抓包看过ARP请求的结构目标MAC字段是清一色的 FF:FF:FF:FF:FF:FF这就是广播整个广播域的人都能听到但在线的主机不会都回答只有被问到的那个会单播回复没人回应就说明这个IP目前没有可通信的机器。ARP扫描的最大优点是快且准。它不需要处理防火墙策略——防火墙管的是IP层和传输层的流量规则ARP发生在更底层很多防火墙根本不检测ARP包。所以同一网段的资产存活探测ARP扫描是我最常用的手段工具也简单一条命令就能把整个局域网扫一遍。但它有严格的边界只能扫通同一个广播域也就是同一个VLAN或者同一台二层交换机下面的设备。跨了路由器、跨了VLANARP就过不去了。很多新手拿着ARP扫描去扫一个跨三层的网段结果一片空白就以为网段里没有设备这是把二层工具用在三层场景的典型错误。2.2 三层探测的经典ICMP与TTL说到网络探测很多人第一个想到的就是 ping。ping 命令利用的是ICMP协议里的回显请求和回显应答机制你发一个Echo Request过去目标如果没有禁ICMP就会回一个Echo Reply。这是最经典的“探测主机是否在线”的方法简单到不需要解释。但ICMP探测有两个明显的局限。第一个是防御方经常把ICMP禁掉。出于防扫描、防Ping风暴等考虑不少安全策略会直接丢弃外来的ICMP报文一台主机即使所有服务都正常对外提供你ping它也是“请求超时”。第二个是ICMP探测给不了你端口层面的信息它只能告诉你“这台机器有网络响应能力”但没法告诉你它开放了什么服务。如果要利用ICMP做更多的事情可以关注TTL字段。TTL是IP报文头里的一个生存时间值每经过一个路由跳数就减1。不同的操作系统给初始TTL设置了不同的默认值Windows通常是128Linux通常是64网络设备常见255。当你收到一个ping回包看它携带的TTL值就能大致猜测目标系统是什么类型。比如收到的TTL是127或者128附近目标很可能是个Windows如果接近64或者62大概率是Linux。这个方法只能作为初步参考因为经过多跳路由后TTL会递减而且有些系统允许管理员修改默认值但作为第一眼判断还是很有用。2.3 传输层探测端口扫描的三种套路主机发现了之后下一步想知道的就是这台机器开了哪些端口因为端口的背后是服务服务的背后是潜在的风险和功能。端口扫描的原理是基于TCP和UDP协议的工作机制细分下来有三种常见套路每种都有不同的取舍。第一种是TCP全连接扫描就是完整地走完TCP三次握手。你发SYN包目标回SYN/ACK你再回ACK连接建立然后探测完断开。因为走完了完整的连接流程这种扫描最准同时最容易被日志记录——它跟真实用户访问建立连接的行为几乎一样看起来就像在正常访问目标服务。好处是通用性好不需要特殊的系统权限坏处是慢而且每建立一次连接都会在目标系统或者中间安全设备上留下记录。第二种是SYN半开扫描。它只发第一个SYN包收到目标回SYN/ACK就认为端口开放然后直接回一个RST包断开不完成第三次握手。它的核心优势是速度快不需要等待完整会话结束而且因为没建立完整连接应用层日志记录得更少。但很多工具做半开扫描需要管理员权限要自己构造原始IP包而且现代的安全设备已经能识别这种行为模式了不完整的TCP握手序列本身就是个明显的特征。第三种是UDP扫描。UDP是无连接的协议没有握手过程它把一个空UDP包发到目标端口如果收到ICMP端口不可达的消息说明端口是关闭的如果完全没有响应可能说明端口开放也可能只是被防火墙静默丢弃了。这就导致UDP扫描的结果不确定性很高而且必须要等待超时速度非常慢。一般只有在目标明确是DNS、SNMP、NTP这些常见UDP服务时才值得做针对性扫描。三种方式没有绝对的优劣我列个表方便对照扫描类型协议层适用场景优点缺点ARP扫描二层同一广播域内的存活主机发现速度快、结果准、不受防火墙策略影响只能扫同网段ICMP扫描三层快速判断网段内主机存活简单、开销小、批量方便ICMP被禁就失效TCP Connect扫描四层精确的端口开放判断准确、无需特殊权限慢、连接日志多TCP SYN扫描四层快速的端口扫描快、相对少留连接记录需要管理员权限UDP扫描四层针对UDP服务探测能覆盖TCP之外的缺口慢、结果不确定2.4 服务识别端口不等于服务很多初学者有个误区看到 80 就觉得是HTTP看到 3306 就觉得是MySQL看到 3389 就觉得是远程桌面。但端口号本质上只属于“约定俗成”不是强制规则。任何服务都可以被配置在任意端口上。我遇到过把SSH跑在8080的奇葩环境也见过HTTP服务跑在8443的默认配置——如果你是过一遍端口号就下结论后面的判断全都会歪。服务识别的逻辑是看端口背后“对完话”之后对方的反应。主动方式你可以发一个符合某种协议特征的请求过去比如往一个端口发一个HTTP的GET请求看对方回不回“HTTP/1.1 200 OK”也可以直接读取对方在你连接时主动返回的欢迎信息这个在行业里叫banner。比如连上某个端口键盘直接返回“SSH-2.0-OpenSSH”这个服务的身份就确定了。主流的扫描工具都内置了庞大的指纹库。nmap 的-sV参数会在发现开放端口后主动发送一系列探测探针把响应跟指纹库比对给出最可能的服务类型和版本号。但指纹库不是全能的新的服务、改过banner的服务、或者响应特征不清晰的服务都会让识别结果产生偏差。所以服务识别结果是“参考结论”不是“事实结论”尤其在高价值目标的评估中必要时应该用客户端工具手动连接验证一下。2.5 从网络分层看探测的闭环从第2.1到第2.4其实可以串成一条线二层ARP发现主机三层ICMP验证连通性四层端口扫描确认开放面应用层服务识别还原真实身份。四个层次从上往下和从下往上都能走通这就是一个完整的探测闭环。我分享一个小窍门遇到一个完全陌生的网络优先用二层手段做存活发现用四层手段做端口确认用应用层手段做服务判断三层作为补充和交叉验证。这个顺序是从低到高、从快到慢的节奏保证了信息密度和准确性的双重需要。如果反过来先全端口扫描再谈其他很容易把时间浪费在根本不存在的设备上。3. 完整实操过程从一条命令到一张内网清单3.1 工具准备nmap 的三种常用模式聊实操之前先把手头最长用的几个工具理一遍。第一个不用说nmap业内事实标准几乎所有的探测工作都可以交给它完成。第二个是arp-scan专门做二层ARP扫描的小工具在同网段主机发现这个场景比我用nmap更高效。第三个是fping批量ICMP探测的老牌工具适合快速看一个网段的存活率。nmap虽然功能多但大多数人只需要会用下面三种模式就已经能覆盖日常绝大部分需求了第一种是主机发现模式对应参数是-sn。它只做存活探测不做端口扫描。这是扫大网段的第一步先把范围收敛。命令形式大概是这样nmap -sn -T4 192.168.10.0/24-T4是时间模板参数控制扫描速度数字越大速度越快但对网络的冲击也越大。第二种是端口扫描加服务识别模式也是最常用的组合拳。参数是-sT或-sS配合-sVnmap -sT -sV -T4 -p 21,22,23,80,443,3389,8080 192.168.10.20-sT做TCP全连接扫描-sV做服务版本识别-p指定要扫描的端口列表。在实际操作里我会先扫一批最关键的常用端口确定目标大概身份后再决定要不要扩大端口范围。第三种是系统识别模式参数是-Onmap -O --osscan-guess 192.168.10.20这个模式是通过TCP/IP协议栈的特征来猜测目标操作系统类型结果只能作为参考误差率不低。特别是现在很多服务器都做了协议栈层面的加固识别结果更是仅供参考不要当成确定结论。3.2 一次典型的内网资产梳理流程以一个常见的 192.168.10.0/24 办公网为例我讲讲一次完整的、受委托的资产梳理该怎么做。第一步永远是看自己的位置不要直接开扫。在Linux上执行ip addr看本机IP执行ip route看默认网关在Windows上是ipconfig和route print。这一眼能看到的东西就是后面所有操作的基准如果本机IP是 192.168.10.55网关是 192.168.10.1那这个网段基本就是你所在的广播域了ARP扫描可以直接做。第二步做二层存活扫描。用 arp-scan 扫整个网段一条命令搞定arp-scan 192.168.10.0/24输出会列出每个存活IP对应的MAC地址以及网卡厂商的OUI信息。看到MAC的厂商字段是很有用的比如发现一批“Raspberry Pi”或者“Apple”的MAC配合IP分布就能推测这些设备是什么类型。这一步跑完你就知道了这个网段大概有多少台活跃主机。第三步是对重点存活主机做端口扫描。为什么要“重点”因为不是每台都值得做全端口扫描。办公网的打印机、摄像头、IoT终端扫描它们的意义不大。我的习惯是先用-sn的结果配合MAC厂商信息把像服务器的设备IP段规律、网卡厂商是服务器品牌先挑出来再用端口扫描确认它们的开放端口。第四步是服务识别和版本确认。对每台被发现开放端口的机器跑一次-sV参数得到服务侧写。这一步往往能发现意想不到的东西比如有人私自搭了FTP服务器、某些设备暴露了调试接口这些在资产表里都得记上。最后一步就是汇总记录了。我把结果整理成一份清单再结合交换机上的ARP表、DHCP分配记录做交叉验证确保这份资产表不是只有扫描到的还把那些关机但是有静态分配的地址也标注出来。3.3 结果整理与内网拓扑绘制整理这个环节我第一次做的时候也嫌麻烦后来发现这是探测工作中性价比最高的一步。信息收集出来之后不整理过两周再回头看就是一团乱码。我习惯用表格记录字段固定几个IP地址、MAC地址、网卡厂商、主机名如果能获取到、开放端口、服务版本、备注。备注栏里写的是根据端口和服务推断这台机器像什么角色——是文件服务器还是数据库服务器是开发测试机还是生产设备。这样一份表格就是资产清单的原型。拓扑绘制方面不需要画得多精细。我一般用draw.io这类简单的绘图工具画出三层结构和关键节点就够了路由器、核心交换机、接入交换机、各网段的服务器、安全设备的位置。目的明确让人看着这张图能说清楚“哪块区域里有什么样的资产之间大概怎么连”而不是要画出一张符合工程规范的网络拓扑图。3.4 我踩过的一个真实场景有一次我给一个客户的测试网段做资产盘点客户的网络拓扑给得比较模糊核心交换机和接入交换机之间有VLAN隔离我在自己所在的VLAN里跑ARP扫描一切正常但跨网段扫描一台业务服务器的时候nmap报了一堆奇怪的“host seems down”错误。我一开始以为是目标服务器防火墙策略太严增加了重试次数、调整了超时时间依然不行。后来查了核心交换机的配置才发现那个VLAN之间根本没有走三层路由而是靠高级别的ACL做了放通策略但ACL只放通了特定端口ICMP和nmap的一些探测包全被拦了。最后我用目标服务器允许的端口做了一次TCP连接验证确认了服务存活。这个案例让我深刻地意识到探测之前一定要先搞清楚网络的基础设施配置三层通不通、策略放行哪些端口这些信息比扫描工具本身更影响结果。后来我在每次评估之前都会先找网络管理员要一份ACL策略清单省去了大量瞎猜的时间。4. 常见问题与排查心得踩过的坑比教程值钱4.1 高频踩坑速查表做内网探测时间久了遇到的问题高度重复。我整理了一张表格把最常见的几个故障和对应的排查思路放在一起方便后来人直接对照。现象常见原因排查建议主机明明在跑业务ping却全部超时防火墙禁止ICMP报文不要只依赖ping改用TCP端口探测确认主机是否存活ARP扫描只能看到部分设备目标和你不在同一个二层广播域确认VLAN和三层路由关系跨网段改用TCP端口扫描端口扫描超时严重进度极慢扫描速率设置过低、重传次数过多调整-T时间模板或并发数但要权衡存活设备的带宽损耗扫出来的端口和服务匹配不上服务可能跑在非默认端口或者banner被修改手动连接验证不要完全迷信工具指纹库一台机器上几百个端口都显示“开放”目标主机在被防火墙策略保护所有探测包都被“黑洞”处理这是典型的过滤状态不是真的开放要结合业务类型判断扫到一半自己的访问被中断安全设备检测到高强度扫描行为并联动封禁降低扫描频率分段分时段进行先跟防守方报备4.2 探测质量的两个现实约束我做了这些年发现内网探测永远绕不开两个现实约束速度和完整度的矛盾、隐蔽和痕迹的矛盾。速度与完整度的矛盾很好理解。全端口扫描一台机器65535个端口挨个探测快也要几分钟慢的能跑半小时。如果你的网络里有几十上百台设备全端口扫描是场灾难。我的实践策略是分级扫描第一轮只扫常用端口列表21、22、23、25、53、80、110、135、139、143、443、445、993、995、1433、1521、3306、3389、5432、5900、6379、8080、8443、9090这种聚焦已知高危和常见服务快速锁定目标第二轮才对真正的高价值资产做全端口扫描。这样做的好处是保证评估覆盖面同时控制总耗时。隐蔽和痕迹的矛盾在于扫描动作本身就会产生流量特征任何行为都能被记录。越是高强度的扫描越容易被IDS/IPS甚至终端上的EDR感知到。授权测试里通常会有提前的沟通窗口但即使如此我也倾向用更平滑的速率、更长的时间跨度来避免对业务网络的冲击同时减少误触告警带来的沟通成本。扫描这件事能扫到信息不叫成功扫完不影响业务、不打断自己后续工作才算成功。4.3 从防守方视角看内网探测的告警特征我平时除了做评估也兼职帮客户做安全运营的告警规则调优所以对内网探测的“痕迹”也很敏感。如果我们是防守方在内网看到什么样的行为值得警惕这里分享一些我在规则里常用的特征希望做红队或者安全评估的同学理解探测不是隐身术行为是有规律可循的。第一是大量SYN包。正常情况下一个终端不会在短时间内向大量不同主机的同一个端口发起SYN连接这是明显的横向端口扫描特征。第二是端口序列的突变一台内网主机突然在一两分钟内连接了很多目标机器的不同端口比如一下子从80跳到3389很可能是有人在批量扫端口。第三是一个来源IP在短时间内访问了大量主机的相同服务端口比如内网某台主机主动尝试连接网段内所有机器的445端口这种模式非常可疑。这些都是防守侧可以做到的事把内网横向扫描的特征写进检测规则设置合理的阈值就能在大范围的探测行为里捕捉到异常。而对做探测的人来说了解这些特征也能帮助你在授权测试里更好地控制自己的操作节奏避免被误判为威胁行为。提示如果你在网络运维或安全运营岗位上别把探测工具妖魔化。你在自己的网络里定期做一次资产盘点效果比很多昂贵的“资产管理系统”都好。关键是控制频率、留有记录、赋予正当目的。4.4 被“错误结果”骗到的三次经历最后再分享几个曾经让我白白浪费时间的结果解读问题。第一次是看TTL判断系统类型扫到一个设备TTL显示64我直接就按Linux去分析了结果后面发现是一台Windows服务器只不过它前面的网络设备把初始TTL改成了64这种“系统管理员主动调整参数”的情况超出工具默认认知。第二次是某个端口扫描显示开放但是用客户端连接时直接失败后来发现是目标设备的负载均衡策略只在某些节点监听端口扫描命中了一个转发节点而不是真正提供服务的节点。第三次是服务版本识别显示Apache 2.4.49当时正好是一个存在公开漏洞的版本结果做了半天的漏洞分析最后发现是管理员改了Server头伪装版本号实际版本早就是安全版本了。这些经历反复让我确认同一件事任何一次探测得到的结果都只是网络在特定时间、特定路径下对你的回应它不是绝对真理。同一个IP从不同网段扫过去看到的端口可能是不同的同一台主机在不同时间扫服务可能发生变化。所以做内网探测一定要养成交叉验证的思维多工具对比、多角度确认形成的结论才经得起推敲。最后聊一点这些年最真切的感觉。工具和命令任何人花几个小时就能学会真正值钱的不是那个命令而是面对一个不确定的网络时你脑子里有没有一张清晰的决策路径先看什么、再看什么、哪些结果需要怀疑、哪些信息需要交叉验证。内网探测的技术清单是可以被一篇文章说清楚的但判断力得靠一次次踩坑、一次次对着结果反问“为什么”才能攒出来。愿这篇整理能帮你少走几段我走过的弯路。