共用方式為


使用 Azure CLI 使用 Azure 網路監看員 管理虛擬機的封包擷取

網路監看員 封包擷取工具可讓您建立擷取會話,以記錄 Azure 虛擬機(VM) 的網路流量。 系統會為擷取工作階段提供篩選器,以確保您只會擷取到您想要的流量。 封包擷取有助於主動和主動診斷網路異常。 其應用程式超越異常偵測範圍,包括收集網路統計數據、取得網路入侵的見解、偵錯客戶端-伺服器通訊,以及解決各種其他網路挑戰。 網路監看員 封包擷取可讓您從遠端起始封包擷取,以減輕在特定虛擬機上手動執行的需求。

在本文中,您將瞭解如何使用 Azure PowerShell 從遠端設定、啟動、停止、下載及刪除虛擬機封包擷取。 若要瞭解如何使用 Azure 入口網站 或 Azure CLI 管理封包擷取,請參閱使用 Azure 入口網站 管理虛擬機的封包擷取或使用 PowerShell 管理虛擬機的封包擷取。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶

  • Azure Cloud Shell 或 Azure CLI。

    本文中的步驟會在 Azure Cloud Shell以互動方式執行 Azure CLI 命令。 若要在 Cloud Shell 中執行命令,請選取程式代碼區塊右上角的 [ 開啟 Cloud Shell ]。 選取 [複製] 以複製程式碼,並將它貼到 Cloud Shell 中以執行。 您也可以從 Azure 入口網站內執行 Cloud Shell。

    您也可以 在本機 安裝 Azure CLI 來執行命令。 如果您在本機執行 Azure CLI,請使用 az login 命令登入 Azure。

  • 具有下列輸出 TCP 連線的虛擬機:

    • 透過埠 443 對記憶體帳戶
    • 至 169.254.169.254,透過埠 80
    • 至 168.63.129.16 透過埠 8037

注意

  • 如果未為該區域啟用 網路監看員,Azure 會在虛擬機區域中建立 網路監看員 實例。 如需詳細資訊,請參閱啟用或停用 Azure 網路監看員
  • 網路監看員 封包擷取需要 網路監看員 代理程式 VM 擴充功能才能安裝在目標虛擬機上。 如需詳細資訊,請參閱安裝 網路監看員 代理程式
  • 必要條件中列出的最後兩個IP位址和埠,在所有使用 網路監看員 代理程式且偶爾可能會變更的 網路監看員 工具中都是常見的。

如果網路安全組與網路介面或網路介面所屬的子網相關聯,請確定規則存在,以允許透過先前的埠進行輸出連線。 同樣地,在將使用者定義的路由新增至您的網路時,請確定透過先前埠的輸出連線能力。

安裝 網路監看員 代理程式

步驟 1

az vm extension set執行 命令,在客體虛擬機上安裝封包擷取代理程式。

針對 Windows 虛擬機:

az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentWindows --version 1.4

針對 Linux 虛擬機:

az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentLinux --version 1.4

步驟 2

若要確定已安裝代理程式,請執行 vm extension show 命令,並傳遞資源群組和虛擬機名稱。 請檢查產生的清單,以確保已安裝代理程式。

針對 Windows 虛擬機:

az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name NetworkWatcherAgentWindows

針對 Linux 虛擬機:

az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name AzureNetworkWatcherExtension

下列範例是執行中回應的範例 az vm extension show

{
  "autoUpgradeMinorVersion": true,
  "forceUpdateTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/NetworkWatcherAgentWindows",
  "instanceView": null,
  "location": "westcentralus",
  "name": "NetworkWatcherAgentWindows",
  "protectedSettings": null,
  "provisioningState": "Succeeded",
  "publisher": "Microsoft.Azure.NetworkWatcher",
  "resourceGroup": "{resourceGroupName}",
  "settings": null,
  "tags": null,
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "typeHandlerVersion": "1.4",
  "virtualMachineExtensionType": "NetworkWatcherAgentWindows"
}

啟動封包擷取

完成上述步驟之後,封包擷取代理程式就會安裝在虛擬機上。

步驟 1

擷取記憶體帳戶。 此記憶體帳戶可用來儲存封包擷取檔案。

az storage account list

步驟 2

此時,您已準備好建立封包擷取。 首先,讓我們檢查您可能想要設定的參數。 篩選條件是一個這類參數,可用來限制封包擷取所儲存的數據。 下列範例會設定具有數個篩選的封包擷取。 前三個篩選器只會從本機 IP 10.0.0.3 到目的地埠 20、80 和 443 收集傳出 TCP 流量。 最後一個篩選只會收集UDP流量。

az network watcher packet-capture create --resource-group {resourceGroupName} --vm {vmName} --name packetCaptureName --storage-account {storageAccountName} --filters "[{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"20\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"80\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"443\"},{\"protocol\":\"UDP\"}]"

下列範例是執行 az network watcher packet-capture create 命令的預期輸出。

{
  "bytesToCapturePerPacket": 0,
  "etag": "W/\"b8cf3528-2e14-45cb-a7f3-5712ffb687ac\"",
  "filters": [
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "20"
    },
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "80"
    },
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "443"
    },
    {
      "localIpAddress": "",
      "localPort": "",
      "protocol": "UDP",
      "remoteIpAddress": "",
      "remotePort": ""
    }
  ],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/pa
cketCaptures/packetCaptureName",
  "name": "packetCaptureName",
  "provisioningState": "Succeeded",
  "resourceGroup": "NetworkWatcherRG",
  "storageLocation": {
    "filePath": null,
    "storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/gwteststorage123abc",
    "storagePath": "https://gwteststorage123abc.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/{resourceGroupName}/p
roviders/microsoft.compute/virtualmachines/{vmName}/2017/05/25/packetcapture_16_22_34_630.cap"
  },
  "target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}",
  "timeLimitInSeconds": 18000,
  "totalBytesPerSession": 1073741824
}

取得封包擷取

az network watcher packet-capture show-status執行命令、擷取目前執行中或已完成封包擷取的狀態。

az network watcher packet-capture show-status --name packetCaptureName --location {networkWatcherLocation}

下列範例是 命令的 az network watcher packet-capture show-status 輸出。 下列範例是擷取為 StopExceeded 的 StopReason 時。

{
  "additionalProperties": {
    "status": "Succeeded"
  },
  "captureStartTime": "2016-12-06T17:20:01.5671279Z",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/packetCaptureName",
  "name": "packetCaptureName",
  "packetCaptureError": [],
  "packetCaptureStatus": "Stopped",
  "stopReason": "TimeExceeded"
}

停止封包擷取

藉由執行 az network watcher packet-capture stop 命令,如果擷取會話正在進行中,它就會停止。

az network watcher packet-capture stop --name packetCaptureName --location westcentralus

注意

在目前執行的擷取工作階段或已停止的現有工作階段上執行時,命令不會傳回任何回應。

刪除封包擷取

az network watcher packet-capture delete --name packetCaptureName --location westcentralus

注意

刪除封包擷取並不會刪除記憶體帳戶中的檔案。

下載封包擷取

封包擷取會話完成後,擷取檔案可以上傳至 Blob 記憶體或 VM 上的本機檔案。 封包擷取的儲存位置是在建立會話時定義。 存取儲存至記憶體帳戶之擷取檔案的便利工具 Microsoft Azure 儲存體總管,您可以在這裡下載:https://storageexplorer.com/

如果指定記憶體帳戶,封包擷取檔案會儲存到位於下列位置的記憶體帳戶:

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{VMName}/{year}/{month}/{day}/packetCapture_{creationTime}.cap