# Formati di Output

> Le colonne del file dati CSV, i due file opzionali di statistiche e esempi reali di output che puoi aprire prima di eseguire qualsiasi operazione.

---

LLMS index: [llms.txt](/llms.txt)

---

`Convert-DNSDebugLogFile` produce fino a tre file per ogni log di input:

| File | Contenuto | Creato quando |
|---|---|---|
| `<name>.csv` | Una riga per ogni voce di log analizzata | `-OutputType CSV` o `Both` |
| `<name>_Statistic.csv` | Conteggio giornaliero dei record per contesto | `-OutputType Statistic` o `Both` |
| `<name>_PacketStatistic.csv` | Conteggio giornaliero delle query per client, protocollo, direzione e tipo di record | `-OutputType Statistic` o `Both` |

`Both` è il valore predefinito. L'output viene salvato accanto al file di input a meno che non imposti `-OutputFile`.

I file di esempio collegati in questa pagina sono risultati di conversioni reali, non simulazioni. Scaricane uno e aprilo in Excel prima di decidere come progettare la pipeline.

## Il file dati CSV

Esempio di output:

| Locale | Colonna Dettagli | File |
|---|---|---|
| en-US | non popolata | [WithComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.WithComputerName.csv), [NoComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.NoComputerName.csv) |
| de-DE | non popolata | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.NoDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.NoDetails.csv) |
| de-DE | popolata | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.WithDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.WithDetails.csv) |

Due righe da una conversione reale — una query DNS e una nota interna al server:

```text
DateTime;ThreadId;Context;PacketId;Protocol;Direction;ClientIP;Xid;Type;Opcode;FlagsHex;FlagsChar;ResponseCode;QuestionType;QuestionName;Information;Details;ComputerName
2026-01-20 23:00:16;0FE0;Packet;000002C53117D990;UDP;Rcv;10.0.0.2;c049;Query;Standard;0001;RecursionDesired;NOERROR;A;"odc.officeapps.live.com";"";"";dc01
2026-01-20 23:00:16;DF0;Note;;;;;;;;;;;;"";"got GQCS failure on a dead socket context status=995, socket=904";"";dc01
```

### Colonne

Sempre 18 colonne, sempre in questo ordine:

| # | Colonna | Significato | Uso tipico |
|---|---|---|---|
| 1 | `DateTime` | Timestamp della voce | Filtraggio temporale, unione con altri log |
| 2 | `ThreadId` | Thread di lavoro del server DNS | Raramente necessario; utile per correlare problemi interni al server |
| 3 | `Context` | Tipo di voce: `Packet`, `Event`, `Note`, `DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone` | Primo filtro da applicare — `Packet` è il traffico DNS vero e proprio |
| 4 | `PacketId` | Identificatore interno del pacchetto | Abbinare una query alla sua risposta |
| 5 | `Protocol` | `UDP` o `TCP` | Picchi TCP possono indicare risposte grandi o trasferimenti di zona |
| 6 | `Direction` | `Rcv` (query ricevuta) o `Snd` (server ha risposto) | Separare volume richieste da volume risposte |
| 7 | `ClientIP` | Indirizzo dell’host che ha fatto la query | Analisi dei top talker, definizione dell’incidente |
| 8 | `Xid` | ID transazione DNS (esadecimale) | Abbinare richiesta e risposta |
| 9 | `Type` | `Query` o `Response` | |
| 10 | `Opcode` | `Standard`, `Notify`, `Update`, `Unknown` | Separare aggiornamenti dinamici e notifiche di zona dalle normali ricerche |
| 11 | `FlagsHex` | Flag header grezzi (esadecimale) | Per analisi approfondite del protocollo |
| 12 | `FlagsChar` | Flag decodificati: `Authoritative`, `Truncated`, `RecursionDesired`, `RecursionAvailable` | Versione leggibile dei flag sopra |
| 13 | `ResponseCode` | `NOERROR`, `NXDOMAIN`, `SERVFAIL`, … | Report errori, ricerca di fallimenti di risoluzione |
| 14 | `QuestionType` | Tipo di record: `A`, `AAAA`, `MX`, `PTR`, `TXT`, … | Il volume di `TXT` è un classico indicatore di tunneling |
| 15 | `QuestionName` | Nome interrogato come FQDN normale | Matching threat-intel, report top-domain |
| 16 | `Information` | Testo libero per voci `Event` / `Note`; per `Packet` la riga header dettagli TCP/UDP | Lettura messaggi server |
| 17 | `Details` | Rappresentazione JSON di un blocco dettaglio `Packet`; vuoto altrimenti | Ispezione completa del pacchetto senza tornare al log grezzo |
| 18 | `ComputerName` | Server sorgente, da `-ComputerName` | Permette di attribuire dataset multi-server |

Due cose da tenere a mente:

- **Non tutte le colonne sono compilate per ogni riga.** Solo le voci `Packet` hanno IP client, nome della query e codice di risposta. Le righe `Note` e `Event` contengono il testo in `Information` e lasciano vuote le colonne del protocollo. Progetta di conseguenza lo schema del database e i filtri della dashboard.
- **`ComputerName` è sempre l’ultima colonna, anche se non usi `-ComputerName`.** In quel caso è semplicemente vuota. Questo mantiene l’impaginazione identica su tutti i server così puoi concatenare file da molti server DNS senza dover rimappare colonne.

### La colonna Dettagli

I blocchi dettaglio appaiono solo se il server DNS è configurato per registrare i dettagli completi dei pacchetti. Quando esistono, il parser li converte in un singolo valore JSON così la riga resta una sola:

```json
{
  "Socket": "848",
  "Remote": "addr 10.10.0.11, port 60580",
  "Buflength": "0x10000 (65536)",
  "Message": {
    "XID": "0x0001",
    "OPCODE": "0 (QUERY)",
    "RCODE": "0 (NOERROR)",
    "QUESTION": [ { "Name": "berlin.de", "QTYPE": "A (1)", "QCLASS": "1" } ],
    "ANSWER": []
  }
}
```

Analizzare questi blocchi richiede tempo e rende il CSV molto più grande. Se non ti servono, usa `-NoDetailsParsing` — la colonna resta presente ma vuota, e la conversione è più veloce. Vedi [Performance](../04-performance/).

## I file di statistiche

Le statistiche sono aggregati giornalieri. Usale quando vuoi una tendenza o un riepilogo e non vuoi spostare l’intero set di record — sono di gran lunga più piccoli del file dati.

### Statistiche per contesto (`*_Statistic.csv`)

Risponde a: *quanta attività di che tipo è avvenuta ogni giorno?*

```text
Date;Context;Count;ComputerName
2026-01-20;Event;2;dc01
2026-01-20;Note;2;dc01
2026-01-20;Packet;12;dc01
```

| Colonna | Significato |
|---|---|
| `Date` | Giorno, sempre `yyyy-MM-dd` |
| `Context` | Nome del contesto (`Packet`, `Event`, `Note`, …) |
| `Count` | Numero di record di quel contesto in quel giorno |
| `ComputerName` | Server sorgente |

File di esempio: [en-US WithComputerName](../outputformat/en-us.-.dnsdebug-dc01_Statistic.-.WithComputerName.csv), [en-US NoComputerName](../outputformat/en-us.-.dnsdebug-dc01_Statistic.-.NoComputerName.csv), [de-DE WithComputerName](../outputformat/de-de.-.dnsdebug-dc01_Statistic.-.WithComputerName.csv), [de-DE NoComputerName](../outputformat/de-de.-.dnsdebug-dc01_Statistic.-.NoComputerName.csv)

### Statistiche pacchetti (`*_PacketStatistic.csv`)

Risponde a: *chi ha interrogato cosa, quanto spesso, ogni giorno?*

```text
Date;ClientIP;Protocol;Direction;QuestionType;Count;ComputerName
2026-01-20;10.0.0.1;UDP;Rcv;A;3;dc01
2026-01-20;10.0.0.1;UDP;Snd;A;3;dc01
2026-01-20;10.0.0.2;UDP;Rcv;A;3;dc01
```

| Colonna | Significato |
|---|---|
| `Date` | Giorno, sempre `yyyy-MM-dd` |
| `ClientIP` | Host che ha fatto la query |
| `Protocol` | `UDP` o `TCP` |
| `Direction` | `Rcv` o `Snd` |
| `QuestionType` | Tipo di record DNS |
| `Count` | Numero di pacchetti corrispondenti in quel giorno |
| `ComputerName` | Server sorgente |

File di esempio: [en-US WithComputerName](../outputformat/en-us.-.dnsdebug-dc01_PacketStatistic.-.WithComputerName.csv), [en-US NoComputerName](../outputformat/en-us.-.dnsdebug-dc01_PacketStatistic.-.NoComputerName.csv), [de-DE WithComputerName](../outputformat/de-de.-.dnsdebug-dc01_PacketStatistic.-.WithComputerName.csv), [de-DE NoComputerName](../outputformat/de-de.-.dnsdebug-dc01_PacketStatistic.-.NoComputerName.csv)

<div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">I conteggi sono totali, non valori distinti</div>


`Count` è il numero di record in quel gruppo giornaliero. Un client che ha chiesto lo stesso nome 500 volte contribuisce con 500, non 1. Se un numero sembra troppo alto, di solito è per questo motivo.
</div>


## Delimitatore e formato data

Entrambi i tipi di output rispettano `-Delimiter` (default `;`) e `-OutputCulture`. Per tutto ciò che sarà importato da una macchina, scrivi timestamp in formato ISO-like:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'
```

Questo produce `2026-01-20 23:00:16`, che SQL Server, Power BI e pandas leggono senza bisogno di indicazioni sul formato. Dettagli in [Parametri e Opzioni](../03-parameters-and-options/).
