本文介绍如何使用 Azure Network Watcher 的包捕获功能,远程配置、启动、停止、下载和删除数据包捕获。
先决条件
具有活动订阅的Azure帐户。
创建试用版订阅。
具有以下出站 TCP 连接的虚拟机 (VM) 或虚拟机规模集:通过端口 169.254.169.254 连接 80,通过端口 168.63.129.16 连接 8037。 Network Watcher代理 VM 扩展使用这些 IP 地址与Azure平台通信。
Network Watcher 代理 VM 扩展安装在目标虚拟机上。 每当在 Azure 门户中使用 Network Watcher 数据包捕获时,如果以前未安装代理,则代理会自动安装在目标 VM 或虚拟机规模集上。 若要更新已安装的代理,请参阅 Update Azure Network Watcher 扩展到最新版本。
通过端口 443 连接到 VM 出站 TCP 的Azure存储帐户。 如果没有存储帐户,请参阅 使用 Azure 门户创建存储帐户。
使用Azure帐户登录到 Azure 门户。
启动数据包捕获
若要启动捕获会话,请使用以下步骤:
在门户顶部的搜索框中,输入 Network Watcher。 从搜索结果中选择 Network Watcher。
在“网络诊断工具”下选择“数据包捕获”,然后选择“+ 添加”以创建数据包捕获。
在“添加数据包捕获”中,输入或选择以下设置的值:
| 设置 |
价值 |
|
基本详细信息 |
|
| Subscription |
选择Azure虚拟机的订阅。 |
| 资源组 |
选择虚拟机的资源组。 |
| 目标类型 |
选择“虚拟机”或“虚拟机规模集”。 |
| 目标虚拟机 |
选择虚拟机。 如果选择 虚拟机 作为目标类型,则此选项可用。 |
| 目标虚拟机规模集 |
选择虚拟机规模集。 如果选择“虚拟机规模集”作为目标类型,则可以使用此选项。 |
| 目标实例 |
选择虚拟机规模集实例。 如果选择“虚拟机规模集”作为目标类型,则可以使用此选项。 |
| 数据包捕获名称 |
输入名称或保留默认名称。 |
|
数据包捕获存储 |
|
| 捕获位置 |
在存储帐户(默认选项)、本地文件存储或两者中选择。 |
| 存储帐户 |
选择“标准”存储帐户1。 如果选择存储帐户或两者作为捕获位置,则可以使用此选项。 存储帐户必须与缓存位于同一区域中。 |
| 本地文件路径 |
输入要在目标虚拟机中保存捕获的有效本地文件路径。 如果使用的是 Linux 计算机,路径可以以 /var/captures 开头。 如果使用Windows计算机,路径可以从 C:\Captures 开始。 如果选择 本地文件存储 或 两者作为 捕获位置,则可以使用此选项。 |
|
数据包捕获配置 |
|
| 启用连续捕获3 |
如果要启用连续数据包捕获,请选中此复选框。 有关详细信息,请参阅 连续数据包捕获。 |
| 每个数据包的最大字节数 |
输入每个数据包要捕获的最大字节数。 如果留空或输入 0,则会捕获所有字节。 |
| 新建文件3 |
输入创建的最大文件数。 默认值为 100 MB,最大值为 4 GB。 如果启用 连续捕获,则可以使用此选项。 |
| 每个文件3 的字节数 |
输入每个文件的字节数。 达到该值后,将创建一个新文件。 |
| 时间限制(秒) |
输入数据包捕获会话的时间限制(以秒为单位)。 一旦达到此值,就会停止数据包捕获。 如果留空: - 在无需启用连续捕获的情况下,可以捕获最多 5 小时(18,000 秒)。 - 如果启用连续捕获,则最多捕获 1 天(86,400 秒)。 最大值为 604,800 秒(7 天)。 |
|
数据包筛选(可选) |
|
| 数据包筛选 |
选择“ 启用数据包筛选 ”以启用数据包筛选。 |
| 添加筛选器 |
选择“添加筛选条件”以添加新筛选器。 可以定义任意数量的筛选器。 |
| 协议 |
根据所选协议筛选数据包捕获。 可用值为 TCP、UDP 或 Any。 |
| 本地 IP 地址2 |
在数据包捕获中筛选其中的本地 IP 地址与此值匹配的数据包。 |
| 本地端口2 |
将数据包捕获筛选为本地端口与此值匹配的数据包。 |
| 远程 IP 地址2 |
在数据包捕获中筛选其中的远程 IP 地址与此值匹配的数据包。 |
| 远程端口2 |
在数据包捕获中筛选其中的远程端口与此值匹配的数据包。 |
1 目前不支持使用高级存储帐户存储数据包捕获。
2 端口和 IP 地址值可以是单个值、某个范围(例如 80-1024),或多个值(例如 80、443)。
3 连续捕获目前为预览版。 有关详细信息,请参阅 连续数据包捕获。
选择“启动数据包捕获”。
达到时间限制后,数据包捕获将停止。
要启动捕获会话,请使用 New-AzNetworkWatcherPacketCapture cmdlet:
# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'
# Place the storage account configuration into a variable.
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'myResourceGroup' -Name 'mystorageaccount'
# Start the Network Watcher capture session.
New-AzNetworkWatcherPacketCapture -Location 'chinaeast' -PacketCaptureName 'myVM_1' -TargetVirtualMachineId $vm.Id -StorageAccountId $storageAccount.Id
启动捕获会话后,会看到以下输出:
ProvisioningState Name BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ---- ----------------------- -------------------- ------------------
Succeeded myVM_1 0 1073741824 18000
下表介绍了可用于 New-AzNetworkWatcherPacketCapture cmdlet 的可选参数:
| 参数 |
说明 |
-Filter |
添加筛选器以仅捕获所需的流量。 例如,可以只捕获从特定 IP 地址到特定端口的 TCP 流量。 |
-TimeLimitInSeconds |
设置捕获会话的最长持续时间。 默认值为 18000 秒(5 小时)。 |
-BytesToCapturePerPacket |
设置每个数据包要捕获的最大字节数。 如果未使用或输入了 0,则会捕获所有字节。 |
-TotalBytesPerSession |
设置捕获的字节总数。 一旦达到此值,就会停止数据包捕获。 如果未使用,则最多捕获 1 GB(1073741824 字节)。 |
-LocalFilePath |
如果希望将捕获保存在目标虚拟机中(例如 C:\Capture\myVM_1.cap),请输入有效的本地文件路径。 如果你使用的是 Linux 计算机,则路径必须以 /var/captures 开头。 |
达到时间限制或达到每个会话的最大字节数后,数据包捕获将停止。
若要启动捕获会话,请使用 az network watcher packet-capture create 命令:
# Start the Network Watcher capture session.
az network watcher packet-capture create --name 'myVM_1' --resource-group 'myResourceGroup' --vm 'myVM' --storage-account 'mystorageaccount'
# Start the Network Watcher capture session (storage account is in different resource group from the VM).
az network watcher packet-capture create --name 'myVM_1' --resource-group 'myResourceGroup' --vm 'myVM' --storage-account '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup2/providers/Microsoft.Storage/storageAccounts/mystorageaccount'
启动捕获会话后,会看到以下输出:
{
"bytesToCapturePerPacket": 0,
"etag": "W/\"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb\"",
"filters": [],
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_chinaeast/packetCaptures/myVM_1",
"name": "myVM_1",
"provisioningState": "Succeeded",
"resourceGroup": "NetworkWatcherRG",
"scope": {
"exclude": [],
"include": []
},
"storageLocation": {
"storageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
"storagePath": "https://mystorageaccount.blob.core.chinacloudapi.cn/network-watcher-logs/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2025/01/31/packetcapture_16_39_41_077.cap"
},
"target": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"targetType": "AzureVM",
"timeLimitInSeconds": 18000,
"totalBytesPerSession": 1073741824
}
下表介绍了可用于 az network watcher packet-capture create 命令的可选参数:
| 参数 |
说明 |
--filters |
添加筛选器以仅捕获所需的流量。 例如,可以只捕获从特定 IP 地址到特定端口的 TCP 流量。 |
--time-limit |
设置捕获会话的最长持续时间。 默认值为 18000 秒(5 小时)。 |
--capture-size |
设置每个数据包要捕获的最大字节数。 如果未使用或输入了 0,则会捕获所有字节。 |
--capture-limit |
设置捕获的字节总数。 一旦达到此值,就会停止数据包捕获。 如果未使用,则最多捕获 1 GB(1073741824 字节)。 |
--file-path |
如果希望将捕获保存在目标虚拟机中(例如 C:\Capture\myVM_1.cap),请输入有效的本地文件路径。 如果你使用的是 Linux 计算机,则路径必须以 /var/captures 开头。 |
达到时间限制或达到每个会话的最大字节数后,数据包捕获将停止。
停止数据包捕获
若要在数据包捕获会话达到其时间限制或文件大小限制之前手动停止该会话,请选择数据包捕获右侧的省略号“...”,或右键单击,然后选择“停止”。
显示如何在 Azure 门户中停止数据包捕获的截图。
若要在数据包捕获会话达到其时间限制或文件大小限制之前手动停止该会话,请使用 Stop-AzNetworkWatcherPacketCapture cmdlet。
# Manually stop a packet capture session.
Stop-AzNetworkWatcherPacketCapture -Location 'chinaeast' -PacketCaptureName 'myVM_1'
注释
无论在当前正在运行的捕获会话还是已停止的会话上运行,该 cmdlet 都不会返回响应。
若要在数据包捕获会话达到其时间限制或文件大小限制之前手动停止该会话,请使用 az network watcher packet-capture stop 命令。
# Manually stop a packet capture session.
az network watcher packet-capture stop --location 'chinaeast' --name 'myVM_1'
注释
无论在当前正在运行的捕获会话还是已停止的会话上运行,该命令都不会返回响应。
查看数据包捕获状态
转到 Network Watcher 的 数据包捕获页面,列出所有现有的数据包捕获,无论其状态如何。
使用 Get-AzNetworkWatcherPacketCapture cmdlet 检索数据包捕获的状态(正在运行或已完成)。
# Get information, properties, and status of a packet capture.
Get-AzNetworkWatcherPacketCapture -Location 'chinaeast' -PacketCaptureName 'myVM_1'
以下输出是 Get-AzNetworkWatcherPacketCapture cmdlet 的输出示例。 以下示例是捕获完成后的输出结果。 PacketCaptureStatus 值为“已停止”,StopReason 为 TimeExceeded。 此值显示数据包捕获已成功完成,并已运行了限定的时间。
ProvisioningState Name Target BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ---- ------ ----------------------- -------------------- ------------------
Succeeded myVM_1 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0 1073741824 18000
注释
若要获取输出中的更多详细信息,请在命令末尾添加 | Format-List。
使用 az network watcher packet-capture show-status 命令检索数据包捕获的状态(正在运行或已完成)。
# Get information, properties, and status of a packet capture.
az network watcher packet-capture show-status --location 'chinaeast' --name 'myVM_1'
下面的示例是 az network watcher packet-capture show-status 命令的输出。 可以看到 packetCaptureStatus 值已停止,其 StopReason 值为 TimeExceeded:
{
"additionalProperties": {
"status": "Succeeded"
},
"captureStartTime": "2016-12-06T17:20:01.5671279Z",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_chinaeast/packetCaptures/myVM_1",
"name": "packetCaptureName",
"packetCaptureError": [],
"packetCaptureStatus": "Stopped",
"stopReason": "TimeExceeded"
}
下载数据包捕获
数据包捕获会话完成后,生成的捕获文件将保存到Azure Storage、目标虚拟机上的本地文件或两者中。 数据包捕获的存储目的地在其创建期间指定。 有关详细信息,请参阅“启动数据包捕获”部分。
若要下载保存到Azure存储的数据包捕获文件,请执行以下步骤:
在“数据包捕获”页中,选择要下载其文件的数据包捕获。
在“详细信息”部分,选择数据包捕获文件链接。
屏幕截图显示如何在 Azure 门户中选择数据包捕获文件。
在 blob 页中,选择“下载”。
还可以通过直接转到以下路径的存储帐户容器来下载捕获文件:
https://{storageAccountName}.blob.core.chinacloudapi.cn/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap
如果指定了存储帐户,则捕获文件将保存到以下路径的存储帐户:
https://{storageAccountName}.blob.core.chinacloudapi.cn/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap
若要将数据包捕获从Azure存储下载到本地磁盘,请使用 Get-AzStorageBlobContent cmdlet:
# Download the packet capture file from Azure storage container.
Get-AzStorageBlobContent -Container 'network-watcher-logs' -Blob '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' -Destination 'C:\Capture\myVM_1.cap'
如果指定了存储帐户,则捕获文件将保存到以下路径的存储帐户:
https://{storageAccountName}.blob.core.chinacloudapi.cn/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap
若要将数据包捕获从 Azure 存储中下载到本地磁盘,请使用 az 存储 blob 下载 命令:
# Download the packet capture file from Azure storage container.
az storage blob download --container-name 'network-watcher-logs' --blob-url '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' --file 'C:\Capture\myVM_1.cap'
重要
在数据包捕获会话期间,捕获文件可能不会立即出现在存储帐户容器中,因为它最初保存在临时位置。 文件在捕获会话完成后传输到其最终位置。
要下载保存到虚拟机 (VM) 的数据包捕获文件,请连接到 VM 并从数据包捕获创建期间指定的本地路径下载文件。
删除数据包捕获
在“数据包捕获”页中,选择要删除的数据包捕获右侧的“...”,或右键单击,然后选择“删除”。
选择 “是”。
重要
删除Network Watcher中的数据包捕获资源不会从存储帐户或虚拟机中删除捕获文件。 如果不再需要捕获文件,则必须从存储帐户或虚拟机中手动将其删除。
相关内容