pcapdecode

패킷 바이너리에서 이더넷, IP, 포트 헤더를 디코딩하여 출력 필드로 할당합니다. pcapfile, table 등의 명령어로 조회한 패킷 데이터를 네트워크 계층별 필드로 분리할 때 사용합니다.

명령어 속성

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

문법

pcapdecode

입력 필드

필드타입필수 여부설명
payload바이너리필수이더넷 프레임 바이너리. byte[] 타입이 아니면 디코딩을 건너뛰고 입력 레코드를 그대로 출력합니다.

출력 필드

필드타입설명
src_mac문자열출발지 MAC 주소. XX:XX:XX:XX:XX:XX 형식입니다.
dst_mac문자열목적지 MAC 주소. XX:XX:XX:XX:XX:XX 형식입니다.
vlan_id32비트 정수VLAN ID. 802.1Q 태그가 있는 프레임(EtherType 0x8100)에서만 할당됩니다.
protocol문자열IP 프로토콜 이름. icmp, tcp, udp, esp 중 하나입니다.
src_ipIP 주소출발지 IPv4 주소. ICMP, TCP, UDP, ESP 프로토콜에서 할당됩니다.
dst_ipIP 주소목적지 IPv4 주소. ICMP, TCP, UDP, ESP 프로토콜에서 할당됩니다.
src_port32비트 정수출발지 포트 번호. TCP, UDP 프로토콜에서만 할당됩니다.
dst_port32비트 정수목적지 포트 번호. TCP, UDP 프로토콜에서만 할당됩니다.

오류 코드

파싱 오류

해당 사항 없음

런타임 오류

해당 사항 없음

설명

pcapdecode 명령어는 입력 레코드의 payload 필드에서 이더넷 프레임 바이너리를 읽고, L2/L3/L4 헤더를 파싱하여 출력 필드를 할당합니다. 디코딩 결과는 입력 레코드에 병합되므로, 기존 필드(_time, payload 등)는 그대로 유지됩니다.

지원하는 EtherType은 IPv4(0x0800)와 802.1Q VLAN(0x8100)이며, VLAN 프레임의 경우 내부 EtherType이 IPv4일 때만 디코딩합니다. 지원하는 IP 프로토콜은 ICMP(1), TCP(6), UDP(17), ESP(50)이며, 그 외 프로토콜이나 이더넷 헤더 길이가 부족한 패킷은 디코딩 없이 입력 레코드를 그대로 출력합니다.

TCP, UDP 프로토콜은 출발지/목적지 IP와 포트를 모두 할당하고, ICMP, ESP 프로토콜은 IP만 할당합니다.

사용 예

  1. PCAP 파일의 패킷 디코딩

    pcapfile /opt/logpresso/data/capture.pcap | pcapdecode
    

    PCAP 파일에서 패킷을 읽어 이더넷, IP, 포트 헤더를 디코딩합니다.

  2. 디코딩 후 TCP 패킷만 필터링

    pcapfile /opt/logpresso/data/capture.pcap
    | pcapdecode
    | search protocol == "tcp"
    

    PCAP 파일에서 패킷을 디코딩한 후 TCP 프로토콜인 레코드만 필터링합니다.

  3. 디코딩 후 목적지 포트별 패킷 수 집계

    pcapfile /opt/logpresso/data/capture.pcap
    | pcapdecode
    | search protocol == "tcp" or protocol == "udp"
    | stats count by dst_port
    | sort -count
    

    TCP 또는 UDP 패킷을 디코딩하고, 목적지 포트별 패킷 수를 집계하여 내림차순으로 정렬합니다.

  4. 테이블에 저장된 패킷 디코딩

    table duration=1h pcap_data | pcapdecode | fields _time, src_ip, dst_ip, src_port, dst_port, protocol
    

    테이블에 저장된 패킷 데이터를 디코딩하고, 주요 네트워크 필드만 추출합니다.

호환성

pcapdecode 명령어는 소나 4.0 이전 버전부터 제공되었습니다.