# Formatos de salida

> Las columnas del archivo de datos CSV, los dos archivos opcionales de estadísticas y ejemplos reales de salida que puedes abrir antes de ejecutar cualquier cosa.

---

LLMS index: [llms.txt](/llms.txt)

---

`Convert-DNSDebugLogFile` genera hasta tres archivos por cada registro de entrada:

| Archivo | Contiene | Se crea cuando |
|---|---|---|
| `<name>.csv` | Una fila por cada entrada de registro analizada | `-OutputType CSV` o `Both` |
| `<name>_Statistic.csv` | Conteo diario de registros por contexto | `-OutputType Statistic` o `Both` |
| `<name>_PacketStatistic.csv` | Conteo diario de consultas por cliente, protocolo, dirección y tipo de registro | `-OutputType Statistic` o `Both` |

`Both` es el valor predeterminado. La salida se guarda junto al archivo de entrada a menos que configures `-OutputFile`.

Los archivos de ejemplo enlazados en esta página son resultados reales de conversiones, no simulaciones. Descarga uno y ábrelo en Excel antes de decidir el diseño de tu pipeline.

## El archivo de datos CSV

Ejemplo de salida:

| Localidad | Columna Detalles | Archivos |
|---|---|---|
| en-US | no poblada | [WithComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.WithComputerName.csv), [NoComputerName](../outputformat/en-us.-.dnsdebug-dc01.-.NoComputerName.csv) |
| de-DE | no poblada | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.NoDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.NoDetails.csv) |
| de-DE | poblada | [WithComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.WithComputerName.-.WithDetails.csv), [NoComputerName](../outputformat/de-de.-.dnsdebug-dc01.-.NoComputerName.-.WithDetails.csv) |

Dos filas de una conversión real — una consulta DNS y una nota interna del servidor:

```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
```

### Columnas

Siempre 18 columnas, siempre en este orden:

| # | Columna | Significado | Uso típico |
|---|---|---|---|
| 1 | `DateTime` | Marca temporal de la entrada | Filtrado por tiempo, unión con otros registros |
| 2 | `ThreadId` | Hilo de trabajo del servidor DNS | Rara vez necesario; útil para correlacionar problemas internos del servidor |
| 3 | `Context` | Tipo de entrada: `Packet`, `Event`, `Note`, `DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone` | Primer filtro que aplicarás — `Packet` es el tráfico DNS real |
| 4 | `PacketId` | Identificador interno del paquete | Emparejar una consulta con su respuesta |
| 5 | `Protocol` | `UDP` o `TCP` | Picos en TCP pueden indicar respuestas grandes o transferencias de zona |
| 6 | `Direction` | `Rcv` (consulta recibida) o `Snd` (servidor respondió) | Separar volumen de solicitudes del volumen de respuestas |
| 7 | `ClientIP` | Dirección del host que consulta | Análisis de los que más consultan, delimitación de incidentes |
| 8 | `Xid` | ID de transacción DNS (hexadecimal) | Emparejar solicitud y respuesta |
| 9 | `Type` | `Query` o `Response` | |
| 10 | `Opcode` | `Standard`, `Notify`, `Update`, `Unknown` | Separa actualizaciones dinámicas y notificaciones de zona de las consultas normales |
| 11 | `FlagsHex` | Banderas del encabezado en bruto (hexadecimal) | Para análisis profundo del protocolo |
| 12 | `FlagsChar` | Banderas decodificadas: `Authoritative`, `Truncated`, `RecursionDesired`, `RecursionAvailable` | Versión legible de lo anterior |
| 13 | `ResponseCode` | `NOERROR`, `NXDOMAIN`, `SERVFAIL`, … | Reporte de tasa de errores, búsqueda de fallos en resolución |
| 14 | `QuestionType` | Tipo de registro: `A`, `AAAA`, `MX`, `PTR`, `TXT`, … | El volumen de `TXT` es un indicador clásico de túneles |
| 15 | `QuestionName` | Nombre consultado como un FQDN normal | Coincidencia con inteligencia de amenazas, informes de dominios principales |
| 16 | `Information` | Texto libre para entradas `Event` / `Note`; para bloques de detalle `Packet` la línea de encabezado TCP/UDP | Lectura de mensajes del servidor |
| 17 | `Details` | Representación JSON de un bloque de detalle `Packet`; vacío en otro caso | Inspección completa del paquete sin volver al registro en bruto |
| 18 | `ComputerName` | Servidor origen, desde `-ComputerName` | Mantener conjuntos de datos multi-servidor atribuibles |

Dos cosas para planificar:

- **No todas las columnas se llenan en cada fila.** Solo las entradas `Packet` tienen IP del cliente, nombre de consulta y código de respuesta. Las filas `Note` y `Event` llevan su texto en `Information` y dejan vacías las columnas de protocolo. Diseña tu esquema de base de datos y filtros de panel en consecuencia.
- **`ComputerName` siempre es la última columna, incluso si no usas `-ComputerName`.** Entonces simplemente está vacía. Esto mantiene el diseño idéntico en todos los servidores para que puedas concatenar archivos de muchos servidores DNS sin un paso de mapeo de columnas.

### La columna Detalles

Los bloques de detalle solo aparecen si el servidor DNS está configurado para registrar detalles completos del paquete. Cuando existen, el analizador los convierte en un único valor JSON para que la fila siga siendo 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": []
  }
}
```

Analizar estos bloques consume tiempo y hace que el CSV sea considerablemente más grande. Si no los necesitas, usa `-NoDetailsParsing`: la columna permanece presente pero vacía, y la conversión es más rápida. Consulta [Rendimiento](../04-performance/).

## Los archivos de estadísticas

Las estadísticas son agregados diarios. Úsalas cuando quieras una tendencia o un resumen y no quieras mover el conjunto completo de registros — son órdenes de magnitud más pequeñas que el archivo de datos.

### Estadísticas por contexto (`*_Statistic.csv`)

Responde: *¿cuánto de qué tipo de actividad ocurrió por día?*

```text
Date;Context;Count;ComputerName
2026-01-20;Event;2;dc01
2026-01-20;Note;2;dc01
2026-01-20;Packet;12;dc01
```

| Columna | Significado |
|---|---|
| `Date` | Día, siempre en formato `yyyy-MM-dd` |
| `Context` | Nombre del contexto (`Packet`, `Event`, `Note`, …) |
| `Count` | Número de registros de ese contexto en ese día |
| `ComputerName` | Servidor origen |

Archivos de ejemplo: [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)

### Estadísticas de paquetes (`*_PacketStatistic.csv`)

Responde: *¿quién consultó qué, con qué frecuencia, por día?*

```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
```

| Columna | Significado |
|---|---|
| `Date` | Día, siempre en formato `yyyy-MM-dd` |
| `ClientIP` | Host que consulta |
| `Protocol` | `UDP` o `TCP` |
| `Direction` | `Rcv` o `Snd` |
| `QuestionType` | Tipo de registro DNS |
| `Count` | Número de paquetes coincidentes ese día |
| `ComputerName` | Servidor origen |

Archivos de ejemplo: [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">Los conteos son totales, no valores distintos</div>


`Count` es el número de registros en ese grupo diario. Un cliente que preguntó por el mismo nombre 500 veces contribuye con 500, no con 1. Si un número parece demasiado alto, esta suele ser la razón.
</div>


## Delimitador y formato de fecha

Ambos tipos de salida respetan `-Delimiter` (por defecto `;`) y `-OutputCulture`. Para cualquier cosa que será importada por una máquina, escribe marcas temporales tipo ISO:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'
```

Esto produce `2026-01-20 23:00:16`, que SQL Server, Power BI y pandas leen sin necesidad de indicar formato. Más detalles en [Parámetros y opciones](../03-parameters-and-options/).
