decodedns

イーサネットフレームからDNSメッセージをデコードして、クエリドメイン、応答IPアドレス、ステータスコードなどを抽出します。

コマンドプロパティ

項目説明
コマンドタイプ加工クエリ
必要な権限なし
ライセンス使用量該当なし
並列実行対応
分散実行データノードで実行(mapper)

構文

decodedns

入力フィールド

フィールド必須/任意説明
payloadバイナリ必須イーサネットフレームデータ。バイナリ型でない場合は入力レコードをそのまま出力します。

出力フィールド

フィールド説明
txidstringDNSトランザクションID(4桁16進数文字列)
src_ipIPアドレス送信元IPアドレス
src_port32ビット整数送信元ポート番号
dst_ipIPアドレス宛先IPアドレス
dst_port32ビット整数宛先ポート番号
directionstring通信方向。c->s(クライアントからサーバー)または s->c(サーバーからクライアント)
bytes32ビット整数DNSメッセージサイズ(バイト)
typestringDNSクエリ種別。AAAAACNAMEMXNSPTRSOASRVTXT など
domainstringクエリドメイン名
statusstringDNS応答ステータス。NO_ERRORFORMAT_ERRORSERVER_FAILURENAME_ERRORNOT_IMPLEMENTEDREFUSED
ipIPアドレス最初のAレコードの応答IPアドレス。Aレコードがなければ null
flagsstringDNSフラグ文字列(例: standard query response (RD RA)
queries配列DNSクエリセクションのレコードリスト。クエリが2個以上の場合のみ割り当て
answers配列DNS応答セクションのレコードリスト。応答が1個以上の場合のみ割り当て
additionals配列DNS追加セクションのレコードリスト。追加レコードが1個以上の場合のみ割り当て
authorities配列DNS権限セクションのレコードリスト。権限レコードが1個以上の場合のみ割り当て

エラーコード

パースエラー

該当なし

ランタイムエラー

該当なし

説明

decodedns コマンドは入力レコードの payload フィールドからイーサネットフレームを読み取りDNSプロトコルメッセージをデコードします。payload フィールドがバイナリ型でない場合は入力レコードをそのまま次のコマンドに渡します。

デコードされたDNSメッセージから送信元/宛先IPおよびポート、通信方向、クエリ種別、ドメイン、応答ステータス、最初のAレコードのIPアドレスなどを抽出します。DNSクエリ、応答、追加、権限セクションのレコードリストも配列として提供します。

queries フィールドはクエリレコードが2個以上の場合のみ割り当てられ、answersadditionalsauthorities フィールドはそれぞれ1個以上のレコードがある場合のみ割り当てられます。

このコマンドは並列実行をサポートしており、分散環境ではデータノードで実行されます。

使用例

  1. PCAPファイルからDNSメッセージをデコード

    pcapfile /opt/logpresso/dns-capture.pcap
    | decodedns
    

    PCAPファイルから読み取ったイーサネットフレームのDNSメッセージをデコードします。

  2. 特定ドメインへのDNSクエリを照会

    pcapfile /opt/logpresso/dns-capture.pcap
    | decodedns
    | search domain == "*.example.com"
    | fields txid, src_ip, domain, type, ip, status
    

    DNSメッセージのうち example.com のサブドメインへのクエリをフィルタリングして主要フィールドを照会します。

  3. DNS応答ステータス別の集計

    pcapfile /opt/logpresso/dns-capture.pcap
    | decodedns
    | search direction == "s->c"
    | stats count by status
    

    サーバーからクライアントへ送信されたDNS応答をステータスコード別に集計します。

互換性

decodedns コマンドはSonar 4.0以前のバージョンから提供されています。