相信不少搞网络或者运维的朋友都遇到过类似的场景想在同一个局域网里排查一下有多少台设备在线、有没有陌生的机器混进来或者纯粹是想把家里/办公室的网段资产梳理一遍。手边没有单独的空闲物理机也不想在主力电脑上装一堆扫描工具这时候用 VMware 开一台虚拟机就成了最顺手、也最不容易把宿主机搞乱的方案。我这次做的事情概括起来就是通过 VMware 虚拟机对宿主机所在的同一网段做一次主机发现与资产探测。整个过程踩了几个坑也摸出了一些规律今天把完整思路、操作步骤和排查经验整理出来。这篇内容适合刚接触网络扫描的新手也适合想用虚拟机做实验但又不想污染宿主机的老手参考。整个方案不需要额外硬件一台普通 PC、一个 VMware Workstation再加一个轻量 Linux 镜像就够了。1. 整体设计与方案选型为什么用虚拟机来干这件事1.1 需求拆解扫描动作背后的真实意图“扫描发现在同一网段中的其他人”这个需求拆开看其实包含三层信息第一层是发现也就是把当前二层网络里存活的 IP 列出来搞清楚“这个网段里到底有多少主机在线”。第二层是识别光知道 IP 在线还不够最好能进一步知道它是什么系统、开放了哪些端口从而判断这是电脑、打印机、路由器、摄像头还是别的什么设备。第三层是隔离做这种扫描动作本身带有“探测”性质最好在虚拟机里操作这样不会直接污染宿主机系统也不会影响宿主机上正在跑的日常服务。所以整个项目不是“用虚拟机扫一下”这么简单而是要搭一个可重复使用的、相对隔离的、对宿主机无侵入的网络探测环境。1.2 三种网络模式的选择逻辑Windows 上的 VMware Workstation 默认给虚拟机提供三种网络模式NAT 模式、桥接模式、仅主机模式。这次任务的关键就在于选对模式。NAT 模式虚拟机通过宿主机共享 IP 上网对外表现为宿主机的一个“影子”。在这种模式下虚拟机访问外网没问题但它处于一个 VMware 虚拟出来的私有网段里无法直接访问宿主机所在的物理局域网。桥接模式虚拟机的虚拟网卡直接桥接到宿主机的物理网卡上相当于在局域网里新插入了一台独立主机它会直接拿到和宿主机同一网段的 IP也能直接和其他物理设备通信。仅主机模式虚拟机只能和宿主机通信完全隔离外网不适合本次场景。很多人第一反应会选 NAT 模式因为它开箱即用、能上网但执行扫描任务时NAT 模式会让虚拟机“看”不到宿主机所在网段里的其他设备。这次任务必须选桥接模式让虚拟机和宿主机处于真正的同一物理二层网络中。注意桥接模式下虚拟机直接以独立节点身份出现在局域网中意味着它会占用一个局域网 IP。如果所在网络 IP 分配紧张比如 DHCP 池很小建议先在 VMware 的虚拟网络编辑器里确认好可用的网段范围或者手动指定一个静态 IP。1.3 整体流程规划整个实践我拆成了四个阶段准备一个干净的 Linux 虚拟机环境把虚拟机的网络模式切到桥接并确保它能和宿主机互通在虚拟机里安装扫描工具对目标网段做主机发现和端口识别对扫描结果做解析同时记录排查过程中遇到的典型问题。按这个顺序做下来每一步都有前置条件依赖但整体其实不复杂重点是理解每个阶段为什么要这么做。2. 环境准备搭一个干净的探测虚拟机2.1 系统选型和虚拟机配置扫描工具在 Linux 下的生态最成熟所以我选了 Ubuntu Server 22.04 LTS 作为虚拟机系统。选 Server 版而不是桌面版原因很简单省资源、无图形界面干扰、纯命令行的操作方式也更适合批量执行扫描任务。虚拟机配置我给的比较保守内存2 GB扫描任务不耗内存2 GB 绰绰有余CPU2 核磁盘20 GB网络适配器桥接模式这个配置足够跑 nmap、arp-scan 这些工具同时也不会把宿主机的资源吃得太狠。如果你手头机器配置高可以适当调到 4 GB 内存但没必要再多。2.2 网络适配器的关键设置创建虚拟机时在“网络连接”一栏直接勾选“桥接模式”是最省事的。但如果你和我一样虚拟机创建时选的是 NAT后面再改有一个关键点容易忽略在 VMware Workstation 的虚拟机设置里把网络连接改成“桥接模式”后必须再检查一下“复制物理网络连接状态”是否勾选并且需要确认桥接到的是哪一块物理网卡。如果宿主机有多个网卡比如有线网卡 无线网卡 虚拟网卡VMware 默认的“自动”桥接有时会选错网卡导致虚拟机虽然显示桥接却拿不到正确的 IP。这种情况下需要在 VMware 的“虚拟网络编辑器”里手动指定桥接到哪块物理网卡。实操心得我的宿主机就有三个网络适配器VMware 自动桥接选到了 VirtualBox 的虚拟网卡上导致虚拟机一直拿不到局域网 IP。后来在虚拟网络编辑器里手动把 VMnet0 桥接到 Realtek 有线网卡上问题才解决。这一步如果不对后面所有操作都无从谈起。2.3 安装必要工具系统装好后进入虚拟机先把基础工具装上。Ubuntu Server 默认环境比较精简需要手动安装sudo apt update sudo apt install -y nmap arp-scan net-tools tcpdump这几个工具各司其职nmap主力扫描工具做主机发现、端口扫描、服务识别都靠它arp-scan专门做二层 ARP 扫描速度快、结果精准适合找同一网段里的存活主机net-tools提供ifconfig、arp等命令方便快速查看网卡和 ARP 表tcpdump抓包分析用排查“为什么扫描结果里少了几台机器”这类问题时会用到。工具安装完成后先确认一下虚拟机的 IP。使用ip addr命令查看ip addr show如果看到类似192.168.1.88/24这样的地址而且和宿主机在同一个网段说明桥接已经生效。这时候可以用ping命令测一下虚拟机和宿主机之间的连通性ping -c 3 192.168.1.100能通说明环境基本就绪。3. 核心实操从主机发现到端口识别3.1 确认当前 IP 与目标网段扫描之前必须搞清楚自己所在的网段这是最容易犯低级错误的地方。在虚拟机里执行ip addr show ip route showip route show会输出默认网关比如default via 192.168.1.1 dev ens33说明当前网段是192.168.1.0/24。如果你不确定子网掩码可以用ipcalc帮你算sudo apt install -y ipcalc ipcalc 192.168.1.88/24会输出网络地址、广播地址、可用主机范围等信息。常见疑问宿主机在192.168.1.x虚拟机桥接后也拿到192.168.1.x那它们俩通信流量是走物理交换机还是直接在宿主机内部就转发掉了实际上桥接模式下虚拟机和宿主机虽然共享物理链路但它们在二层还是“平等”的邻居关系通信走的是宿主机物理网卡的收发路径并非虚拟机内部的虚拟交换。这一点理解后就能明白为什么扫描时宿主机也会出现在结果列表里了。3.2 主机发现用 ping 扫描先探一遍主机发现host discovery的目标是快速筛出网段里存活的 IP。最常用的方式是用 nmap 的-sn参数做 ping 扫描nmap -sn 192.168.1.0/24这条命令会向目标网段的所有 IP 发送探测包。nmap 默认的探测方式包括 ICMP echo、TCP 443 端口、TCP 80 端口和 ICMP timestamp。凡是能回应其中任意一种探测的目标都会被标记为存活。执行完成后会得到一份存活主机列表Nmap scan report for 192.168.1.1 Host is up (0.0021s latency). MAC Address: 78:8A:20:XX:XX:XX (Tenda Technology) Nmap scan report for 192.168.1.88 Host is up (0.000094s latency). MAC Address: 00:0C:29:XX:XX:XX (VMware) ...这里有一个很有用的信息MAC 地址的前三段OUI可以帮助识别设备厂商。比如 Tenda 开头的一般是路由器VMware 开头的就是虚拟机Apple 开头的是 iPhone/MacHon Hai 开头的可能是某些物联网设备。这一步能让你快速对网段内“住着谁”有个初步判断。-sn扫描方式虽然简单但有个致命缺点某些主机会丢弃 ICMP 包比如 Windows 防火墙默认会阻止 ping导致漏判。所以-sn的结果只能作为初筛如果希望更彻底地发现所有主机需要用 ARP 扫描补充。3.3 二层精确发现用 ARP 扫描查漏补缺ARP 扫描的工作方式是在二层广播 ARP 请求“谁是 192.168.1.x请告诉我你的 MAC 地址”。只要目标主机在线它的网卡就会响应——防火墙可以拦掉 ICMP但一般不会拦 ARP因为 ARP 是网络通信的基础拦了就没法上网了。sudo arp-scan --interfaceens33 --localnet这里的--localnet会自动扫描当前网卡所在的所有网段。执行后arp-scan 会列出所有响应 ARP 请求的主机并附上 MAC 地址和厂商信息。对比一下就能发现很多在nmap -sn里不出现在线列表的主机在 arp-scan 里会现出原形。这就是为什么要做两层扫描先 IP 层探活再二层确认互相补盲。注意点arp-scan 需要 root 权限因为它要构造原始 ARP 包。普通用户执行会报Couldnt open socket之类的错误。另外ARP 扫描只能发现同一二层域内的主机如果你要跨三层扫描比如扫描另一个网段的设备就得用 nmap 的-sn加上网关路由或者直接对目标网段做 TCP 扫描。3.4 端口识别判断这台主机到底开了什么服务主机发现只能告诉你“有台机器活着”但要进一步判断“这台机器是什么”就得看它开放了哪些端口。执行nmap -sS -T4 -p 1-1024 192.168.1.0/24参数解释-sSSYN 半开扫描速度快不会在目标主机上留下完整的 TCP 连接记录-T4时间模板4 档是“积极”模式扫描速度较快但不会像 T5 那样容易丢包-p 1-1024扫 1 到 1024 的常用端口。第一次扫可以只扫常用端口速度会快很多。比如目标开放了 80 和 443大概率是个 Web 服务设备路由器管理页面或摄像头开放 22 的可能是 Linux 服务器开放 135/139/445 的基本就是 Windows 机器。一个典型的输出片段Nmap scan report for 192.168.1.20 Host is up (0.0030s latency). Not shown: 999 filtered ports PORT STATE SERVICE 80/tcp open http 443/tcp open https MAC Address: 8C:85:90:XX:XX:XX (Intel Corporate)结合 MAC 厂商和开放的端口就能基本确定这台设备的身份。3.5 提速技巧大网段扫描时怎么把时间压下来如果你要扫的不是/24网段而是更大的10.0.0.0/16这类网段全量扫描耗时很长有几招可以显著提速加-n参数跳过 DNS 反向解析。很多内网地址解析超时会白白等好几秒。用--min-rate控制发包速率例如--min-rate 5000表示每秒至少发 5000 个包让扫描跑得更快用--host-timeout限制单台主机的扫描时间有些主机发包后不响应会一直拖时间。综合用法示例nmap -sn -n --min-rate 5000 192.168.1.0/24实测下来在/24网段里这种配置几秒钟就能完成主机发现。4. 结果解读与设备识别实战4.1 读结果时先看 MAC 和厂商前缀扫描结果里最有价值的字段不是 IP而是 MAC 地址和它的厂商前缀。IP 会变DHCP 重新分配就换了MAC 相对固定。拿我这次扫描的结果举例IP 地址MAC 地址厂商标识开放端口推断设备192.168.1.178:8A:20:XX:XX:XXTenda80, 443路由器管理页192.168.1.208C:85:90:XX:XX:XXIntel80, 443企业级AP或网络设备192.168.1.3504:E9:E5:XX:XX:XXApple无特殊端口iPhone192.168.1.44F4:5C:89:XX:XX:XXEspressif无特殊端口智能家居设备192.168.1.8800:0C:29:XX:XX:XXVMware22本机虚拟机192.168.1.1002C:F0:5D:XX:XX:XXIntel22, 3389Windows 主机把这张表拉出来后网段里有哪些设备基本一目了然。如果列表里出现了一个厂商信息很陌生、端口又开得很奇怪的 IP就要提高警惕了。4.2 用脚本做批量标记如果网段里设备太多手动一条条看 MAC 厂商太累可以借助 nmap 的-O参数做操作系统识别sudo nmap -O 192.168.1.0/24-O通过 TCP/IP 指纹技术判断目标操作系统准确率在大多数场景下够用。结合端口信息基本能拼出每台设备的完整画像。不过-O需要 root 权限而且扫描时间明显拉长适合对重点目标用不适合开局就全量扫。实操心得我一般先arp-scan全量拉存活列表再用 nmap 对列表里“不认识”的 IP 做端口和系统识别而不是一股脑对全段做深度扫描。这样效率最高也不会制造太多无效流量。5. 常见问题与排查技巧实录5.1 虚拟机扫描不到宿主机网段里其他设备这是最常见的坑。我把问题和解决路径整理成一张表方便对照排查现象可能原因排查与解决虚拟机 IP 不是局域网网段网络模式仍是 NAT改成桥接模式并在虚拟网络编辑器里指定桥接物理网卡虚拟机 IP 与宿主机同网段但扫不到别人无线网络的环境隔离部分路由器开启“AP 隔离”后设备之间禁止二层互访需要到路由器后台关闭该功能能扫到部分主机但缺了关键设备目标主机防火墙拦截探测包用 arp-scan 做二层扫描补充扫描结果里宿主机显示离线宿主机防火墙拦截 ICMP看 ARP 表或改用 TCP 探测5.2 ARP 扫描和 ping 扫描结果不一致实操中经常遇到 arp-scan 能看到某台主机但 nmap-sn说它离线。原因通常是 nmap 的 ping 探测依赖 ICMP而目标机器的防火墙把 ICMP 全拦了。ARP 请求属于二层广播网卡收到后仍会响应所以 ARP 扫描在这种场景下更可靠。如果你发现某个 IP 在arp-scan结果里出现但 nmap 里没出现那大概率就是你误判了存活状态——以 arp-scan 的结果为准。5.3 扫描到一半网络卡顿网段内主机较多时大并发扫描可能会把宽带占满表现为宿主机上网卡顿、视频通话断断续续。这种情况通常是扫描速率太激进导致的。通过-T2或--min-rate 100限制发包速率或者干脆把扫描时间挪到闲时执行。注意扫描行为本身会占用局域网带宽资源尤其在办公室环境里建议提前和网管沟通避免影响其他人的正常工作。这也是一个“能不能扫”之外必须考虑的“怎么扫才算合规”的问题。5.4 虚拟机重启后 IP 变了桥接模式下虚拟机默认从所在网络的 DHCP 服务器获取 IP。DHCP 租约到期或虚拟机重启后IP 可能变化导致后续基于固定 IP 的自动化脚本失效。解决办法是给虚拟机设置一个静态 IPsudo nmcli con mod ens33 ipv4.addresses 192.168.1.88/24 sudo nmcli con mod ens33 ipv4.gateway 192.168.1.1 sudo nmcli con mod ens33 ipv4.dns 192.168.1.1 sudo nmcli con mod ens33 ipv4.method manual sudo nmcli con up ens33这里ens33是网卡名称不同系统可能叫eth0或别的名字以ip addr的输出为准。注意静态 IP 要选在 DHCP 地址池之外或者和路由器上的 DHCP 保留地址配合避免 IP 冲突。6. 合规边界与安全建议6.1 哪些场景允许做扫描网络扫描本质是探测行为允许与否取决于扫描目标和授权状况。合法且常见的场景包括对自己拥有的设备做资产盘点对自己管理的网络做安全检查在获得书面授权的前提下对特定目标做渗透测试或漏洞排查在实验室环境中对自己搭的靶场做练习。这次用 VMware 虚拟机做的所有操作都限定在宿主机所在的家庭/办公室局域网内且目标设备均为自己部署或有管理权限的设备。这是合规的前提也是动手之前必须明确的边界。6.2 扫描动作应当遵循的最小化原则即使有授权扫描也要讲分寸。建议遵循最小化原则优先做主机发现不急着全端口扫描对非管理目标的设备只做存活确认不做深度指纹探测不主动利用扫描过程中发现的漏洞扫描任务结束后及时关停探测工具避免后台持续发包。这样的原则既保护了网络环境的稳定也能把不必要的风险降到最低。安全提醒扫描工具是双刃剑。它们能帮你发现“网段里藏着什么陌生的东西”也可能被用来做攻击前的踩点。任何时候都应当将工具用于正当的运维、安全研究和教学场景。越过授权边界去扫描他人网络不仅是道德问题还可能涉及法律风险。在动手之前先问一句这个网络我有权限扫吗7. 后续扩展从发现设备到持续资产监控扫一次只能拿到某个时间点的设备快照如果想让网络资产管理得更到位可以在这个方案基础上做一些扩展。7.1 定时扫描与资产差异比对把扫描命令写成脚本配合 cron 定时任务就能周期性地生成设备列表。比如每天凌晨跑一次 arp-scan记录当天的在线 IP 清单然后对比前一天的结果就能发现新增设备和消失设备对排查私接路由、陌生终端接入很有效。一个简单的脚本思路#!/bin/bash DATE$(date %Y%m%d) sudo arp-scan --localnet --interfaceens33 /opt/scan_results/result_${DATE}.txt然后再用 diff 对比今天的文件和昨天的文件变化一目了然。7.2 结合 SNMP 做更精细的识别如果网络里的交换机、路由器支持 SNMP 协议可以直接通过snmpwalk这类工具连到设备上拉取 MAC 地址表和扫描结果做对照进一步确认某个端口下挂了哪台设备。这样一来从“发现 IP 和 MAC”升级到“知道这个 MAC 在哪台交换机、哪个端口上”信息完整度又会提升一个层次。7.3 用虚拟机快照做实验保险VMware 的一个好处是可以随时打快照。在扫描之前给虚拟机打一个快照后续想调整扫描策略、测试新的工具随时可以回滚到干净状态。这个能力对反复做实验的人来说非常实用。我在实际使用中比较大的体会就是这套虚拟机方案虽然操作不算复杂但它把“探测行为”和“日常系统”从物理上隔离开来让人可以放心地在里面反复试错。以后无论是想测新的扫描工具、跑自动化脚本还是研究网络协议都会优先考虑在虚拟机里先做一轮而不是直接在宿主机上动手。对于和我一样有周期性梳理网络资产需求的朋友这套方案值得直接参考复用。
