DNSサーバーでデバッグログオプションを有効にします 、dns.logの出力を解析しようとしています。これは、technetからの方法に関するガイドです サーバーデバッグログオプションを使用 ですが、詳細が含まれている場合は言うまでもなく、各フィールドの標準形式について信頼できるものは何も見つかりません。
質問のログ行の例を次に示します 括弧内の数字はWindows DNSデバッグログで何を意味しますか? :
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スクリプトのボーナスポイント。
注:この回答はそのままでは不完全である可能性があります。トーチをできるだけ運ぶのに役立つ情報をできるだけ多く追加しようとしましたが、他のユーザーが不完全または不正確な情報を更新することを期待して、コミュニティWikiとして追加しました。
質問 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)
フィールドレベルの情報のリストは次のとおりです。
各カテゴリの潜在的なルックアップ値のリストは次のとおりです。
フラグルックアップ:
0
-エラーなし。正常な更新。1
-フォーマットエラー; DNSサーバーが更新要求を理解しませんでした。0x2
-DNSサーバーで、転送タイムアウトなどの内部エラーが発生しました0x3
-存在するはずの名前が存在しません。0x4
-DNSサーバーは、指定された操作コードをサポートしていません。0x5
-DNSサーバーは、更新の実行を拒否します。0x6
-存在してはならない名前が存在します。0x7
-存在してはならないリソースレコードセットが存在します。0x8
-存在するはずのリソースレコードセットが存在しません。0x9
-DNSサーバーは、ゾーンセクションで指定されたゾーンに対して権限がありません。0xA
-前提条件または更新セクションで使用されている名前が、ゾーンセクションで指定されたゾーン内にありません。レコードタイプルックアップ:
0x01
-ホストレコード0x02
-ネームサーバーレコード0x05
-エイリアスレコード0x0C
-逆引き記録0x0F
-メール交換レコード0x21
-サービス記録0xFB
-インクリメンタルゾーン転送レコード0xFC
-標準ゾーン転送レコード0xFF
-すべてのレコードドメインこれは、Arun Sabaleからのコマンドレットです 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 | % { $_ }
}
}