Что находится в полях сообщения журнала отладки DNS

Я имею, включают опции входа отладки на сервере DNS, и я пытаюсь проанализировать через вывод в dns.log. Вот руководство от technet о том, как использовать опции входа серверной отладки, но я ничто не могу найти авторитетным относительно того, каков стандартный формат для каждого поля был бы, уже не говоря о том, когда детали включены.

Вот демонстрационная строка журнала от вопроса, Что Делает Числа В Круглых скобках, Средних В Моем Windows DNS Debug Log?:

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)

К сожалению, тот ответ не вошел в то, что означает любое из других полей.

Technet, Как Работы DNS дают хороший обзор некоторых полей, но ничто характерное для форматирования журнала отладки.

Каковы все поля?

Бонусные очки для powershell сценария, который анализирует информацию.

1
задан 13 April 2017 в 15:13
1 ответ

Примечание : Этот ответ потенциально неполный как есть. Я попытался добавить как можно больше информации, чтобы нести факел как можно дальше, но я добавил ее как вики сообщества в надежде, что другие пользователи обновят неполную или неверную информацию.

Согласно вопрос Журнал отладки DNS dns.log Обзор формата , поля отображаются следующим образом

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)

Вот список информации уровня поля:

  • Дата и время - Дата и время трафика DNS
  • Тип - Тип трафика DNS
  • Prot - Используемый протокол [TCP | UDP]
  • Dir - Направление - [ Rec eiving | Sen ding]
  • IP-адрес запроса - IP-адрес запрашивающего клиента
  • R / Q - R esponse / Re q uest
  • Флаг - Флаги сообщения об обновлении DNS
  • Тип записи - Тип записи DNS
  • Домен - Домен, который был первоначально запрошен

Поиск

] Вот список возможных значений поиска для каждой категории gories:

Поиск флага :

  • NOERROR - 0 - Нет ошибки; успешное обновление.
  • FORMERR - 1 - Ошибка формата; DNS-сервер не распознал запрос на обновление.
  • SERVFAIL - 0x2 - DNS-сервер обнаружил внутреннюю ошибку, например тайм-аут пересылки
  • NXDOMAIN - 0x3 - Имя, которое должно существовать, не существует.
  • NOTIMP - 0x4 - DNS-сервер не поддерживает указанный код операции.
  • ОТКАЗАНО - 0x5 - DNS-сервер отказывается выполнить обновление, потому что
  • YXDOMAIN - 0x6 - имя, которое не должно существовать, существует.
  • YXRRSET - 0x7 - Набор записей ресурсов, который не должен существовать, существует.
  • NXRRSET - 0x8 - Набор записей ресурсов, который должен существовать, не существует.
  • NOTAUTH - 0x9 - DNS-сервер не является официальным для зоны, указанной в разделе зоны.
  • NOTZONE - 0xA - имя, используемое в разделах «Предварительные условия» или «Обновление», не входит в зона e, указанный в разделе зоны.

Поиск типа записи :

  • A - 0x01 - Запись хоста
  • NS - 0x02 - Запись сервера имен
  • CNAME - 0x05 - Запись псевдонима
  • PTR - 0x0C - Запись обратного просмотра
  • MX - 0x0F - Запись почтового обмена
  • SRV - 0x21 - Служебная запись
  • IXFR - 0xFB - Запись добавочного переноса зоны
  • AXFR - 0xFC - Стандартная запись передачи зоны
  • Все - 0xFF - Все записи Домен

Сценарий синтаксического анализа

Вот командлет из Арун Сабале на Прочитать журнал отладки DNS и сгенерировать вывод в читаемом формате CSV .

После запуска командлета вы можете вызвать его следующим образом:

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

Скрипт :

###########################################################################
# 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 | % { $_ }
    }
}
1
ответ дан 4 December 2019 в 00:09

Теги

Похожие вопросы