decodedns

이더넷 프레임에서 DNS 메시지를 디코딩하여 질의 도메인, 응답 IP 주소, 상태 코드 등을 추출합니다.

명령어 속성

항목설명
명령어 유형가공 쿼리
필요 권한없음
라이선스 사용량해당 없음
병렬 실행지원
분산 실행수집 노드에서 실행 (mapper)

문법

decodedns

입력 필드

필드타입필수 여부설명
payload바이너리필수이더넷 프레임 데이터. 바이너리 타입이 아닌 경우 입력 레코드를 그대로 출력합니다.

출력 필드

필드타입설명
txid문자열DNS 트랜잭션 ID (4자리 16진수 문자열)
src_ipIP 주소출발지 IP 주소
src_port32비트 정수출발지 포트 번호
dst_ipIP 주소목적지 IP 주소
dst_port32비트 정수목적지 포트 번호
direction문자열통신 방향. c->s (클라이언트에서 서버) 또는 s->c (서버에서 클라이언트)
bytes32비트 정수DNS 메시지 크기 (바이트)
type문자열DNS 질의 유형. A, AAAA, CNAME, MX, NS, PTR, SOA, SRV, TXT
domain문자열질의 도메인 이름
status문자열DNS 응답 상태. NO_ERROR, FORMAT_ERROR, SERVER_FAILURE, NAME_ERROR, NOT_IMPLEMENTED, REFUSED
ipIP 주소첫 번째 A 레코드의 응답 IP 주소. A 레코드가 없으면 null
flags문자열DNS 플래그 문자열 (예: 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개 이상인 경우에만 할당되며, answers, additionals, authorities 필드는 각각 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 명령어는 소나 4.0 이전 버전부터 제공되었습니다.