k-guo/nsx-pktcap-multimode
GitHub: k-guo/nsx-pktcap-multimode
该脚本封装了 ESXi/NSX 的 pktcap-uw 命令,支持通过 API 或 SSH 在 vNIC、物理 uplink 及 VMkernel 接口进行远程多模式并行抓包并自动回收数据。
Stars: 0 | Forks: 0
# nsx-pktcap-multimode — NSX / ESXi 多模式抓包工具
直接从你的笔记本电脑在 ESXi 主机上运行多点 `pktcap-uw` 抓包 —— 无需手动 SSH 登录或记忆抓包点语法。该脚本抽象了底层复杂性:同时跨多个抓包点启动并行抓包,等待抓包时间窗口结束,将 `.pcapng` 文件下载到本地机器,并在完成后自动清理。
支持四种模式:**NSX Policy API**(无需 SSH,虚拟机必须位于 VPC 或 NSX segment 上)、通过 SSH **直连**到 ESXi 主机并在虚拟机交换机端口上抓包、**物理 uplink**,以及 **VMkernel interface**。内置了生产环境安全防护机制 —— 会检查 SSH 连接性、interface 是否存在、VMFS 可用空间,并会在高流量 uplink 上启动未过滤的抓包前发出警告。
## 抓包模式
| 模式 | 抓包位置 | 要求 | 最适用于 |
|---|---|---|---|
| `api` | NSX SEGMENTPORT(DVS 逻辑端口边界) | 虚拟机在 NSX segment 上 | 标准 IP/TCP/UDP;无需 SSH |
| `direct` | 虚拟机交换机端口 —— `VnicRx`、`VnicTx`、`ENSInput`、`Drop` **并行** | 虚拟机在任何 ESXi 主机上 | PROFINET、PTP、L2 multicast、丢包;在没有 NSX segment 的情况下也可工作 |
| `uplink` | 物理 vmnic —— `UplinkRcvKernel` + `UplinkSndKernel` **同时进行** | `--host` + `--uplink` | 物理线缆层面:确认流量到达/离开主机,发往特定虚拟机 MAC 的单播 |
| `vmk` | VMkernel NIC (`--vmk vmk0`) | `--host` + `--vmk` | 管理、vMotion、vSAN、NFS 流量 |
### 抓包点协议栈
```
Physical wire
↕ NIC driver
[ --uplink vmnicX --dir 2 ] raw NIC level (hardware wiretap)
↕ VMkernel boundary
[ UplinkRcvKernel / UplinkSndKernel ] VMkernel ↔ NIC driver
↕ DVS portset
[ UplinkRcv / UplinkSnd ] DVS portset ← default for uplink mode
↕ DVS logical port
[ PortInput / PortOutput ] = SEGMENTPORT in NSX API
↕ vNIC driver
[ VnicRx / VnicTx ] VM vNIC driver ← default for direct mode
[ ENSInput ] ENS fast-path (sender view)
[ Drop ] dropped at vSwitch
↕
VM guest OS
```
## 要求
- `bash` (macOS 或 Linux)
- `curl`, `python3`
- `sshpass` (direct/uplink/vmk 模式 —— 或配置 SSH 密钥认证)
## 设置
```
chmod +x nsx-pktcap-multimode.sh
```
在脚本顶部编辑凭据:
```
NSX_MGR="https://"
NSX_USER="admin"
NSX_PASS=""
ESXI_USER="root"
ESXI_PASS="" # direct / uplink / vmk modes
```
## 用法
```
# api / direct: 始终需要 VM_NAME 和 MAC_ADDRESS
./nsx-pktcap-multimode.sh [OPTIONS]
./nsx-pktcap-multimode.sh --mode direct [--host ] [OPTIONS]
# uplink: 始终需要 --host 和 --uplink (非特定于 VM)
./nsx-pktcap-multimode.sh --mode uplink --host --uplink [OPTIONS]
# vmk: 始终需要 --host 和 --vmk
./nsx-pktcap-multimode.sh --mode vmk --host --vmk [OPTIONS]
```
### 所有选项
| 标志 | 默认值 | 描述 |
|---|---|---|
| `--mode api\|direct\|uplink\|vmk` | `api` | 抓包模式 |
| `--host ` | — | ESXi 主机 IP。uplink/vmk 模式**必需**。direct 模式**可选**(跳过 NSX 虚拟机查找 —— 当虚拟机所在的主机不是 NSX 传输节点时使用) |
| `--uplink ` | — | 物理 NIC(uplink 模式必需)。可通过以下命令查找:`esxcli network vswitch dvs vmware list` |
| `--vmk ` | — | VMkernel NIC(vmk 模式必需)。可通过以下命令查找:`esxcli network ip interface list` |
| `--ethtype ` | — | EtherType 过滤器 (direct/uplink/vmk) |
| `--proto ` | — | IP 协议过滤器:`0x1`=ICMP, `0x6`=TCP, `0x11`=UDP (direct/uplink/vmk) |
| `--ip ` | — | IP 地址过滤器 —— 匹配源地址**或**目的地址 (direct/uplink/vmk) |
| `--rcf ` | — | 原始抓包过滤器,例如 `'geneve and host 10.0.0.1'` (direct/uplink/vmk)。请为表达式加上引号。用于 NSX/Geneve overlay 流量。 |
| `--src ` | — | 源 IP 过滤器(仅限 api) |
| `--dst ` | — | 目的 IP 过滤器(仅限 api) |
| `--srcmac ` | — | 源 MAC 过滤器 (direct/uplink/vmk) |
| `--dstmac ` | — | 目的 MAC 过滤器 (direct/uplink/vmk) |
| `--vlan ` | — | VLAN ID 过滤器 (uplink/vmk) |
| `--duration ` | `60` | 抓包时间窗口(秒) |
| `--amount ` | `1000` | 每个抓包点的最大数据包数 |
| `--points
- ` | 见下文 | 逗号分隔的 `pktcap-uw` 抓包点 |
| `--out
标签:ESXi, NSX, VMware, 应用安全, 系统分析, 网络分析, 运维工具, 逆向工具, 防御绕过