Я имею, включают опции входа отладки на сервере 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 сценария, который анализирует информацию.
Примечание : Этот ответ потенциально неполный как есть. Я попытался добавить как можно больше информации, чтобы нести факел как можно дальше, но я добавил ее как вики сообщества в надежде, что другие пользователи обновят неполную или неверную информацию.
Согласно вопрос Журнал отладки 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)
Вот список информации уровня поля:
] Вот список возможных значений поиска для каждой категории gories:
Поиск флага :
0
- Нет ошибки; успешное обновление. 1
- Ошибка формата; DNS-сервер не распознал запрос на обновление. 0x2
- DNS-сервер обнаружил внутреннюю ошибку, например тайм-аут пересылки 0x3
- Имя, которое должно существовать, не существует. 0x4
- DNS-сервер не поддерживает указанный код операции. 0x5
- DNS-сервер отказывается выполнить обновление, потому что 0x6
- имя, которое не должно существовать, существует. 0x7
- Набор записей ресурсов, который не должен существовать, существует. 0x8
- Набор записей ресурсов, который должен существовать, не существует. 0x9
- DNS-сервер не является официальным для зоны, указанной в разделе зоны. 0xA
- имя, используемое в разделах «Предварительные условия» или «Обновление», не входит в зона e, указанный в разделе зоны. Поиск типа записи :
0x01
- Запись хоста 0x02
- Запись сервера имен 0x05
- Запись псевдонима 0x0C
- Запись обратного просмотра 0x0F
- Запись почтового обмена 0x21
- Служебная запись 0xFB
- Запись добавочного переноса зоны 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 | % { $_ }
}
}