Gestire le acquisizioni di pacchetti con Azure Network Watcher usando l'API REST di AzureManage packet captures with Azure Network Watcher using Azure REST API

Il servizio di acquisizione di pacchetti di Network Watcher consente di creare sessioni di acquisizione per registrare il traffico da e verso una macchina virtuale.Network Watcher packet capture allows you to create capture sessions to track traffic to and from a virtual machine. Sono disponibili filtri per la sessione di acquisizione per garantire che venga acquisito solo il traffico desiderato.Filters are provided for the capture session to ensure you capture only the traffic you want. Il servizio di acquisizione di pacchetti consente di individuare eventuali anomalie di rete in modo proattivo e reattivo.Packet capture helps to diagnose network anomalies both reactively and proactively. Altri utilizzi comprendono la raccolta di statistiche di rete, informazioni sulle intrusioni nella rete, debug delle comunicazioni client-server e molto altro ancora.Other uses include gathering network statistics, gaining information on network intrusions, to debug client-server communications and much more. La possibilità di attivare da remoto l'acquisizione di pacchetti evita di dover eseguire manualmente questa operazione sul computer desiderato, consentendo un notevole risparmio di tempo.By being able to remotely trigger packet captures, this capability eases the burden of running a packet capture manually and on the desired machine, which saves valuable time.

Questo articolo illustra le diverse attività di gestione attualmente disponibili per l'acquisizione di pacchetti.This article takes you through the different management tasks that are currently available for packet capture.

Prima di iniziareBefore you begin

In questo scenario si chiama l'API REST Network Watcher per eseguire la verifica del flusso IP.In this scenario, you call the Network Watcher Rest API to run IP Flow Verify. ARMclient viene usato per chiamare l'API REST con PowerShell.ARMclient is used to call the REST API using PowerShell. ARMClient è reperibile in Chocolatey in ARMClient on Chocolatey (ARMClient in Chocolatey)ARMClient is found on chocolatey at ARMClient on Chocolatey

Questo scenario presuppone il completamento dei passaggi descritti in Creare un servizio Network Watcher per creare un servizio Network Watcher.This scenario assumes you have already followed the steps in Create a Network Watcher to create a Network Watcher.

L'acquisizione di pacchetti richiede un'estensione macchina virtuale AzureNetworkWatcherExtension.Packet capture requires a virtual machine extension AzureNetworkWatcherExtension. Per installare l'estensione in una VM Windows, vedere Estensione macchina virtuale agente Azure Network Watcher per Windows e per una VM Linux VM vedere Estensione macchina virtuale Azure Network Watcher Agent per Linux.For installing the extension on a Windows VM visit Azure Network Watcher Agent virtual machine extension for Windows and for Linux VM visit Azure Network Watcher Agent virtual machine extension for Linux.

Accedere con ARMClientLog in with ARMClient

armclient login

Recuperare una macchina virtualeRetrieve a virtual machine

Eseguire lo script seguente per restituire la macchina virtuale.Run the following script to return a virtual machine. Queste informazioni sono necessarie per avviare un'acquisizione di pacchetti.This information is needed for starting a packet capture.

Per il codice seguente sono necessarie alcune variabili:The following code needs variables:

  • subscriptionId: l'ID sottoscrizione può essere recuperato anche con il cmdlet Get-AzureRMSubscription.subscriptionId - The subscription id can also be retrieved with the Get-AzureRMSubscription cmdlet.
  • resourceGroupName: il nome di un gruppo di risorse contenente le macchine virtuali.resourceGroupName - The name of a resource group that contains virtual machines.
$subscriptionId = "<subscription id>"
$resourceGroupName = "<resource group name>"

armclient get https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Compute/virtualMachines?api-version=2015-05-01-preview

L'ID della macchina virtuale dell'output seguente viene usato nell'esempio successivo.From the following output, the id of the virtual machine is used in the next example.

...
,
      "type": "Microsoft.Compute/virtualMachines",
      "location": "westcentralus",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute
/virtualMachines/ContosoVM",
      "name": "ContosoVM"
    }
  ]
}

Ottenere un'acquisizione di pacchettiGet a packet capture

L'esempio seguente ottiene lo stato di una singola acquisizione di pacchettiThe following example gets the status of a single packet capture

$subscriptionId = "<subscription id>"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}/querystatus?api-version=2016-12-01"

Le risposte seguenti sono esempi di una tipica risposta restituita quando si effettua una query sullo stato di un'acquisizione di pacchetti.The following responses are examples of a typical response returned when querying the status of a packet capture.

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

Elencare tutte le acquisizioni di pacchettiList all packet captures

L'esempio seguente ottiene tutte le sessioni di acquisizione di pacchetti in un'area.The following example gets all packet capture sessions in a region.

$subscriptionId = "<subscription id>"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
armclient get "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures?api-version=2016-12-01"

La risposta seguente è un esempio di una tipica risposta restituita quando si ottengono tutte le acquisizioni di pacchettiThe following response is an example of a typical response returned when getting all packet captures

{
  "value": [
    {
      "name": "TestPacketCapture6",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/TestPacketCapture6",
      "etag": "W/\"091762e1-c23f-448b-89d5-37cf56e4c045\"",
      "properties": {
        "provisioningState": "Succeeded",
        "target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute/virtualMachines/ContosoVM",
        "bytesToCapturePerPacket": 0,
        "totalBytesPerSession": 1073741824,
        "timeLimitInSeconds": 60,
        "storageLocation": {
          "storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Storage/storageAccounts/contosoexamplergdiag374",
          "storagePath": "https://contosoexamplergdiag374.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/contosoexamplerg/providers/microsoft.compute/virtualmachines/contosovm/2016/12/06/packetcap
ture_17_19_53_056.cap",
          "filePath": "c:\\temp\\packetcapture.cap"
        },
        "filters": [
          {
            "protocol": "Any",
            "localIPAddress": "",
            "localPort": "",
            "remoteIPAddress": "",
            "remotePort": ""
          }
        ]
      }
    },
    {
      "name": "TestPacketCapture7",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/TestPacketCapture7",
      "etag": "W/\"091762e1-c23f-448b-89d5-37cf56e4c045\"",
      "properties": {
        "provisioningState": "Failed",
        "target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Compute/virtualMachines/ContosoVM",
        "bytesToCapturePerPacket": 0,
        "totalBytesPerSession": 1073741824,
        "timeLimitInSeconds": 60,
        "storageLocation": {
          "storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ContosoExampleRG/providers/Microsoft.Storage/storageAccounts/contosoexamplergdiag374",
          "storagePath": "https://contosoexamplergdiag374.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/contosoexamplerg/providers/microsoft.compute/virtualmachines/contosovm/2016/12/06/packetcap
ture_17_23_15_364.cap",
          "filePath": "c:\\temp\\packetcapture.cap"
        },
        "filters": [
          {
            "protocol": "Any",
            "localIPAddress": "",
            "localPort": "",
            "remoteIPAddress": "",
            "remotePort": ""
          }
        ]
      }
    }
  ]
}

Effettuare una query dello stato di acquisizione di pacchettiQuery packet capture status

L'esempio seguente ottiene tutte le sessioni di acquisizione di pacchetti in un'area.The following example gets all packet capture sessions in a region.

$subscriptionId = "<subscription id>"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"
armclient get "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}/querystatus?api-version=2016-12-01"

La risposta seguente è un esempio di una tipica risposta restituita quando si effettua una query sullo stato di un'acquisizione di pacchetti.The following response is an example of a typical response returned when querying the status of a packet capture.

{
    "name": "vm1PacketCapture",     "id": "/subscriptions/{guid}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatche rName}/packetCaptures/{packetCaptureName}",
   "captureStartTime" : "9/7/2016 12:35:24PM",
   "packetCaptureStatus" : "Stopped",
   "stopReason" : "TimeExceeded"
   "packetCaptureError" : [ ]
}

Avviare un'acquisizione di pacchettiStart packet capture

L'esempio seguente crea un'acquisizione di pacchetti in una macchina virtuale.The following example creates a packet capture on a virtual machine. Nell'esempio vengono impostati parametri per consentire flessibilità nella creazione di un esempio.The example is parameterized to allow for flexibility in creating an example.

$subscriptionId = '<subscription id>'
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"
$storageaccountname = "contosoexamplergdiag374"
$vmName = "ContosoVM"
$bytestoCaptureperPacket = "0"
$bytesPerSession = "1073741824"
$captureTimeinSeconds = "60"
$localIP = ""
$localPort = "" # Examples are: 80, or 80-120
$remoteIP = ""
$remotePort = "" # Examples are: 80, or 80-120
$protocol = "" # Valid values are TCP, UDP and Any.
$targetUri = "" # Example: /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.compute/virtualMachine/$vmName
$storageId = "" # Example: "https://mytestaccountname.blob.core.windows.net/capture/vm1Capture.cap"
$storagePath = ""
$localFilePath = "c:\\temp\\packetcapture.cap" # Example: "d:\capture\vm1Capture.cap"

$requestBody = @"
{
    'properties':  {
                       'target':  '/${targetUri}',
                       'bytesToCapturePerPacket':  '${bytestoCaptureperPacket}',
                       'totalBytesPerSession':  '${bytesPerSession}',
                       'timeLimitinSeconds':  '${captureTimeinSeconds}',
                       'storageLocation':  {
                                               'storageId':  '${storageId}',
                                               'storagePath':  '${storagePath}',
                                               'filePath':  '${localFilePath}'
                                           },
                       'filters':  [
                                       {
                                           'protocol':  '${protocol}',
                                           'localIPAddress':  '${localIP}',
                                           'localPort':  '${localPort}',
                                           'remoteIPAddress':  '${remoteIP}',
                                           'remotePort':  '${remotePort}'
                                       }
                                   ]
                   }
}
"@

armclient PUT "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}?api-version=2016-07-01" $requestbody

Arrestare un'acquisizione di pacchettiStop packet capture

L'esempio seguente arresta un'acquisizione di pacchetti in una macchina virtuale.The following example stops a packet capture on a virtual machine. Nell'esempio vengono impostati parametri per consentire flessibilità nella creazione di un esempio.The example is parameterized to allow for flexibility in creating an example.

$subscriptionId = '<subscription id>'
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"
armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}/stop?api-version=2016-12-01"

Eliminare un'acquisizione di pacchettiDelete packet capture

L'esempio seguente elimina un'acquisizione di pacchetti in una macchina virtuale.The following example deletes a packet capture on a virtual machine. Nell'esempio vengono impostati parametri per consentire flessibilità nella creazione di un esempio.The example is parameterized to allow for flexibility in creating an example.

$subscriptionId = '<subscription id>'
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$packetCaptureName = "TestPacketCapture5"

armclient delete "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/packetCaptures/${packetCaptureName}?api-version=2016-12-01"

Nota

L'eliminazione di un'acquisizione di pacchetti non elimina il file nell'account di archiviazioneDeleting a packet capture does not delete the file in the storage account

Passaggi successiviNext steps

Per istruzioni sul download di file dall'account di archiviazione di Azure, vedere Introduzione all'archivio BLOB di Azure con .NET.For instructions on downloading files from azure storage accounts, refer to Get started with Azure Blob storage using .NET. Un altro strumento che può essere usato è Storage Explorer.Another tool that can be used is Storage Explorer. Altre informazioni su Storage Explorer sono reperibili facendo clic sul collegamento seguente: Storage Explorer.More information about Storage Explorer can be found here at the following link: Storage Explorer

Per altre informazioni su come automatizzare le acquisizioni di pacchetti tramite gli avvisi della macchina virtuale, leggere l'articolo su come creare un'acquisizione di pacchetti attivata da un avviso.Learn how to automate packet captures with Virtual machine alerts by viewing Create an alert triggered packet capture