接上次的简单Ping扫描。今天来和大家分享用 Python 写一个脚本,调用 Nmap 对本地靶机进行一次全端口+版本扫描,并将结果自动解析为结构化的 JSON 报告。
01 :用 Python 召唤 Nmap
要实现这个目标,我选择使用 python-nmap 这个强大的第三方库。它本质上是 Nmap 的 Python 封装,能在后台帮你执行命令,并自动将 Nmap 输出的 XML 结果解析成 Python 字典。
安装非常简单,在PyCharm终端中一行命令搞定:pip install python-nmap

在 PyCharm 中,构建脚本的核心逻辑。这里给大家展示最关键的部分——调用 Nmap 并执行全端口扫描(该代码要输入需扫描的ip地址进一步运行。查找本地ip地址只需在终端输入ipconfig)

以下是核心代码
import nmap(调用nmap)
import time(调用计时器)
from datetime import datetime
def run_nmap_scan(target_ip, port_range="-"):
nm = nmap.PortScanner
arguments = f"-sV -O -p {port_range} -T4"
print(f"开始扫描目标: {target_ip} | 参数: {arguments}")
start_time = time.time()
# 核心:执行扫描并处理 XML 解析)
scan_result = nm.scan(hosts=target_ip, arguments=arguments)
elapsed_time = time.time() - start_time
print(f" 扫描完成,耗时: {elapsed_time:.2f} 秒")
return nm, scan_result
有了这个核心函数,接下来就是遍历nm.all_hosts(),把杂乱的数据提取出来,重新成干净的 JSON 格式,并保存到本地文件中。
02实战:168秒的全端口扫描
代码写好后,我锁定了本地 一台 Windows 靶机(IP: 192.168.130.101)。
深吸一口气,在 PyCharm 的 Terminal 里按下运行键。因为开启了 -p 1-65535(全端口扫描),进度条跑得飞快。168秒,脚本顺利执行完毕,并在终端显示了摘要报告:

操作系统:Windows 11 24H2 系统
端口 协议 服务 版本
135 tcp msrpc Microsoft Windows RPC
139 tcp netbios-ssn Microsoft Windows netbios-ssn
445 tcp microsoft-ds
5040 tcp
6730 tcp unknown
... (省略部分动态端口)
49685 tcp msrpc Microsoft Windows RPC
结果已保存到: scan_192-168-130-101_20260808_221509.json
168.91 秒,65535 个端口,17 个开放端口,精准识别出最新的 Windows 11 24H2 系统。 这就是自动生成的 JSON 报告文件
03解密:17个端口背后的秘密
拿到数据只是第一步,更重要的是“解读”数据。 看着这 17 个端口,我对这台 Win11 机器进行了分析:

🔴 1. 高危区:经典Windows端口 (135, 139, 445)

看到 445 (microsoft-ds) 和 139 (netbios-ssn),我的第一反应是 SMB 协议(SMB 是一种网络文件共享协议,让你能像打开本机文件夹一样,直接访问局域网内其他电脑上的文件、打印机等共享资源)。
445 端口往往和“永恒之蓝”、“WannaCry”等历史级勒索病毒绑定在一起。虽然这台机器是最新Win11 24H2,早就修复了那些老漏洞,但 SMB 签名绕过、NTLM 中继等高级内网渗透手法依然有效。而 135 (msrpc) 则是 Windows RPC 的端点映射器,也是大量 DCOM 远程执行漏洞的入口。
结论:这是内网横向移动的重点关注对象。
🟡 2. 悬念区:未知的端口(6730)

在扫描结果中,端口 6730 被标记为 unknown。
这是一个非标准端口,Nmap 的指纹库无法识别它。在真实的攻防演练中,这种“未知服务”往往是最让人兴奋的突破口——它可能是某个未打补丁的第三方软件、P2P 下载工具,甚至可能是潜伏的远控木马(C2)监听端口!
🟢 3.被拦截探测的窗口 (30849, 30850, 31853)

这三个连续的端口被 Nmap 标记为 tcpwrapped。
很多人会忽略这个状态。其实,tcpwrapped 意味着目标主机的端口是开放的,但当 Nmap 尝试进行深度指纹探测时,连接被立刻重置了。这说明这台机器并不是“裸奔”的,有类似 Windows Defender 或第三方主机防火墙的机制在拦截我们的探测行为。
04结语
这次全端口扫描给了我们一份漂亮的情报清单,但也留下了一个未解之谜:端口 6730 到底是什么?
在真实攻防中,“未知”往往更危险。它可能是某个被遗忘的测试服务,可能是 P2P 软件的随机监听,也可能是攻击者留下的隐蔽后门。作为一名安全研究者,我们不能容忍任何“unknown”存在于自己的资产清单里。下一次我决定用 netstat -ano | findstr "6730" 揪出占用这个端口的进程 PID,看看它到底是个什么。