O que há nos campos da mensagem de registro de depuração do DNS

1

Eu ative as opções de registro de depuração no servidor DNS , e estou tentando analisar a saída em dns.log. Aqui está um guia da technet sobre como usar as opções de log de depuração do servidor , mas não consigo encontrar nada de autoritário quanto ao formato padrão de cada campo, muito menos quando os detalhes são incluídos.

Aqui está uma linha de registro de amostra da pergunta O que significam os números entre parênteses no meu registro de depuração DNS do Windows? :

6/5/2013 10:00:32 AM 0E70 PACKET  00000000033397A0 UDP Rcv 10.161.60.71    5b47   Q [0001   D   NOERROR] A      (12)somecomputer(6)domain(3)com(0)

Infelizmente, essa resposta não entrou no que qualquer um dos outros campos significa.

Como funciona o DNS da Technet dá uma boa revisão de alguns dos campos, mas nada específico para a formatação do log de depuração.

Quais são todos os campos?

Pontos de bônus para um script do powershell que analisa as informações.

    
por KyleMit 22.04.2015 / 21:12

1 resposta

1

Note: This answer is potentially incomplete as is. I've tried to add as much information as I could find to help carry the torch as far as possible, but I've added it as a community Wiki in hopes that other users will update incomplete or incorrect information.

De acordo com a pergunta Formato de log de depuração DNS dns.log Revise , os campos mapeiam da seguinte forma

Date and Time             Type                     Prot Dir Request IP           R/Q             Flag     Record Domain
6/5/2013 10:00:32 AM 0E70 PACKET  00000000033397A0 UDP  Rcv 10.161.60.71    5b47   Q [0001   D   NOERROR] A      (12)somecomputer(6)domain(3)com(0)

Veja uma lista das informações no nível do campo:

  • Data e hora - Data e hora do tráfego de DNS
  • Tipo - o tipo de tráfego DNS
  • Prot - O protocolo que está sendo usado [TCP | UDP]
  • Dir - A direção - [ Rec eiving | Sen ding]
  • Solicitar IP - O endereço IP do cliente solicitante
  • R / Q - R esponse / Re q uest
  • Sinalizador - Sinalizadores de mensagens de atualização de DNS
  • Tipo de registro - O tipo de registro de DNS
  • Domínio - O domínio originalmente solicitado

Pesquisas

Veja uma lista de possíveis valores de pesquisa para cada uma das categorias:

Pesquisa de sinalização :

  • NOERROR - 0 - sem erro; atualização bem sucedida.
  • FORMERR - 1 - Erro de formatação; O servidor DNS não entendeu a solicitação de atualização.
  • SERVFAIL - 0x2 - O servidor DNS encontrou um erro interno, como um tempo limite de encaminhamento
  • NXDOMAIN - 0x3 - Um nome que deveria existir não existe.
  • NOTIMP - 0x4 - O servidor DNS não suporta o código de operação especificado.
  • RECUSADO - 0x5 - O servidor DNS se recusa a executar a atualização porque
  • YXDOMAIN - 0x6 - existe um nome que não deveria existir.
  • YXRRSET - 0x7 - Existe um conjunto de registros de recursos que não deveria existir.
  • NXRRSET - 0x8 - Um conjunto de registros de recursos que deveria existir não existe.
  • NOTAUTH - 0x9 - O servidor DNS não é autoritativo para a zona nomeada na seção Zona.
  • NOTZONE - 0xA - Um nome usado nas seções Pré-requisito ou Atualizar não está dentro da zona especificada pela seção Zona.

Pesquisa de tipo de registro :

  • A - 0x01 - Registo do anfitrião
  • NS - 0x02 - registro do servidor de nomes
  • CNAME - 0x05 - registro de alias
  • PTR - 0x0C - Registro de pesquisa inversa
  • MX - 0x0F - Registo de troca de correspondência
  • SRV - 0x21 - Registro de serviço
  • IXFR - 0xFB - Registro de transferência de zona incremental
  • AXFR - 0xFC - registro de transferência de zona padrão
  • All - 0xFF - Todos os registros de domínio

Script de análise

Aqui está um cmdlet da Arun Sabale em Leia o registro de depuração do DNS e gere a saída em formato CSV legível .

Depois de executar o cmdlet, você pode chamá-lo assim:

Get-DNSDebugLog -DNSLog ".\DnsDebug.log" | Export-Csv .\ProperlyFormatedLog.csv

Script :

###########################################################################
# NAME: read DNS debug logs
# AUTHOR:  Arun Sabale
# COMMENT: 
# VERSION HISTORY:
# 1.0  - Initial release
###########################################################################

function Get-DNSDebugLog
{
    <#
    .SYNOPSIS
    This cmdlet parses a Windows DNS Debug log.

    .DESCRIPTION
    When a DNS log is converted with this cmdlet it will be turned into objects for further parsing.

    .EXAMPLE
    Get-DNSDebugLog -DNSLog ".\Something.log" | Format-Table

    Outputs the contents of the dns debug file "Something.log" as a table.

    .EXAMPLE
    Get-DNSDebugLog -DNSLog ".\Something.log" | Export-Csv .\ProperlyFormatedLog.csv

    Turns the debug file into a csv-file.

    .PARAMETER DNSLog
    Path to the DNS log or DNS log data. Allows pipelining from for example Get-ChildItem for files, and supports pipelining DNS log data.

    #>

    [CmdletBinding()]
    param(
      [Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
      [Alias('Fullname')]
      [string] $DNSLog = "StringMode")


    BEGIN { }

    PROCESS {

        $TheReverseRegExString="\(\d\)in-addr\(\d\)arpa\(\d\)"

        ReturnDNSLogLines -DNSLog $DNSLog | % {
            if ( $_ -match "^\d\d" -AND $_ -notlike "*EVENT*") {
                $Date=$null
                $Time=$null
                $DateTime=$null
                $Protocol=$null
                $Client=$null
                $SendReceive=$null
                $QueryType=$null
                $RecordType=$null
                $Query=$null
                $Result=$null

                $Date=($_ -split " ")[0]

                # Check log time format and set properties
                if ($_ -match ":\d\d AM|:\d\d  PM") {
                    $Time=($_ -split " ")[1,2] -join " "
                    $Protocol=($_ -split " ")[7]
                    $Client=($_ -split " ")[9]
                    $SendReceive=($_ -split " ")[8]
                    $RecordType=(($_ -split "]")[1] -split " ")[1]
                    $Query=($_.ToString().Substring(110)) -replace "\s" -replace "\(\d?\d\)","." -replace "^\." -replace "\.$"
                    $Result=(((($_ -split "\[")[1]).ToString().Substring(9)) -split "]")[0] -replace " "
                }
                elseif ($_ -match "^\d\d\d\d\d\d\d\d \d\d:") {
                    $Date=$Date.Substring(0,4) + "-" + $Date.Substring(4,2) + "-" + $Date.Substring(6,2)
                    $Time=($_ -split " ")[1] -join " "
                    $Protocol=($_ -split " ")[6]
                    $Client=($_ -split " ")[8]
                    $SendReceive=($_ -split " ")[7]
                    $RecordType=(($_ -split "]")[1] -split " ")[1]
                    $Query=($_.ToString().Substring(110)) -replace "\s" -replace "\(\d?\d\)","." -replace "^\." -replace "\.$"
                    $Result=(((($_ -split "\[")[1]).ToString().Substring(9)) -split "]")[0] -replace " "
                }
                else {
                    $Time=($_ -split " ")[1]
                    $Protocol=($_ -split " ")[6]
                    $Client=($_ -split " ")[8]
                    $SendReceive=($_ -split " ")[7]
                    $RecordType=(($_ -split "]")[1] -split " ")[1]
                    $Query=($_.ToString().Substring(110)) -replace "\s" -replace "\(\d?\d\)","." -replace "^\." -replace "\.$"
                    $Result=(((($_ -split "\[")[1]).ToString().Substring(9)) -split "]")[0] -replace " "
                }

                $DateTime=Get-Date("$Date $Time") -Format "yyyy-MM-dd HH:mm:ss"


                if ($_ -match $TheReverseRegExString) {
                    $QueryType="Reverse"
                }
                else {
                    $QueryType="Forward"
                }

                $returnObj = New-Object System.Object
                $returnObj | Add-Member -Type NoteProperty -Name Date -Value $DateTime
                $returnObj | Add-Member -Type NoteProperty -Name QueryType -Value $QueryType
                $returnObj | Add-Member -Type NoteProperty -Name Client -Value $Client
                $returnObj | Add-Member -Type NoteProperty -Name SendReceive -Value $SendReceive
                $returnObj | Add-Member -Type NoteProperty -Name Protocol -Value $Protocol
                $returnObj | Add-Member -Type NoteProperty -Name RecordType -Value $RecordType
                $returnObj | Add-Member -Type NoteProperty -Name Query -Value $Query
                $returnObj | Add-Member -Type NoteProperty -Name Results -Value $Result

                if ($returnObj.Query -ne $null) {
                    Write-Output $returnObj
                }
            }
        }

    }

    END { }
}



function ReturnDNSLogLines
{
param(
$DNSLog)

$PathCorrect=try { Test-Path $DNSLog -ErrorAction Stop } catch { $false }

    if ($DNSLog -match "^\d\d" -AND $DNSLog -notlike "*EVENT*" -AND $PathCorrect -ne $true) {
        $DNSLog
    }
    elseif ($PathCorrect -eq $true) {
        Get-Content $DNSLog | % { $_ }
    }
}
    
por 22.04.2015 / 21:14