프로그래밍

와이어샤크를 이용하여 V2GTP 메시지 캡쳐 및 분석하기

채윤아빠 2025. 7. 31. 20:23

ISO 15118 기반 전기차(EV)와 충전기(EVSE) 간 통신은 V2GTP (Vehicle-to-Grid Transfer Protocol) 라는 전송 계층 프로토콜을 통해 이뤄집니다.
이 글에서는 와이어샤크(Wireshark) 를 활용해 V2GTP 메시지를 캡처하고 분석하는 방법을 단계별로 정리해 보겠습니다.

1. V2GTP란?

표준: ISO 15118-2 (AC/DC 충전 통신)
역할: TCP 위에서 동작하며, 실제 충전 제어 메시지(EXI 인코딩된 XML)를 전송
포트: 기본 15118 (TCP)
메시지 구조

  • Header (8바이트)
    • Protocol Version (1바이트) : 0x01
    • Inverse Protocol Version (1바이트) : 0xFE
    • Payload Type (2바이트, 예: 0x8001=EXI 메시지)
    • Payload Length (4바이트)
  • Payload: EXI로 인코딩된 V2G 메시지

2. 와이어샤크 및 dsV2Gshark 플러그인 준비

(1) 와이어샤크 최신 버전 설치

  • Wireshark 다운로드 후 설치
  • 관리자 권한으로 실행하면 네트워크 인터페이스 접근이 쉬워집니다.

(2) dsV2Gshark 플러그인 설치

(3) 캡처 인터페이스 선택

  • EVCC(차량) 또는 SECC(충전기)와 연결된 네트워크 인터페이스 선택
  • 필드 테스트 시에는 EVSE에 스니퍼(미러링 포트)로 연결

3. V2GTP 트래픽 캡처를 위한 TLS 복호화 설정

TLS 암호화를 위하여 구형 RSA 키 교환 환경이라면 서버 개인키를 와이어샤크의 "RSA keys list"에 추가하면 되지만 최근에는 키교환을 위하여 ECDHE를 주로 이용하기 때문에 서버의 개인키를 추가하는 방식으로는 복호화 설정이 안됩니다. (PFS 때문에 복호화 불가)

ECDHE 키교환 방식에서는 클라이언트에서 TLS 핸드셰이크 시 사용되는 pre-master secret을 로깅하여 와이어샤크에 해당 로그파일을 설정하면 복화화된 패킷을 확인할 수 있습니다.

pre-master secret을 로깅하기 위해서 SSLKEYLOGFILE 환경변수에 로깅할 파일 경로를 입력해 줍니다.

export SSLKEYLOGFILE=/home/pi/sslkeys.log

파이썬이라면 다음과 같은 내용을 소스 앞부분에 추가하면 됩니다.

import os

# ...

os.environ["SSLKEYLOGFILE"] = "exi_sslkeys.log"

와이어샤크에서 Preferences → Protocols → TLS → (Pre)-Master-Secret log filenameSSLKEYLOGFILE 설정으로 생성된 파일의 경로를 입력합니다.


4. V2GTP를 위한 필터 설정

(1) 캡처 필터 설정

TCP 15118 포트만 캡처하려면,

tcp port 15118

IPv6 TCP를 추가하면,

ip6 && tcp port 15118

(2) Display Filter

캡처된 패킷 중에서 V2GTP만 보고 싶다면,

v2gmsg

5. V2GTP 메시지 확인

V2GTP의 실제 메시지는 EXI(효율적인 XML 압축) 포맷으로 인코딩되어 있습니다.
앞서 설정한 TLS 복호화를 위한 설정과 dsV2Gshark 플러그인이 정상적으로 동작하면 아래와 같이 EXI 인코딩된 메시지가 자동으로 복호화되어 실제 V2G 메시지 내용을 확인할 수 있습니다.


6. 분석 포인트

  • Protocol Version: EV와 EVSE 간 호환성 확인
  • Payload Type: 0x8001이면 EXI 메시지, 0x8000은 SDP(Service Discovery Protocol)
  • Session Management: SessionSetup, ServiceDiscovery, Payment 등 순서를 확인

7. 맺는말

V2GTP는 ISO 15118 EV 충전 통신의 핵심 전송 계층으로, 와이어샤크로 쉽게 캡처할 수 있습니다. V2GTP는 기본적으로 TLS 암호화 통신을 하므로 서버 클라이언트간 세션키를 확보해야 암호화된 패킷 복호화하여 분석이 가능합니다.

V2GTP는 기본적으로는 단순 8바이트 헤더 + EXI Payload 구조이고, 인코딩된 EXI 데이터는 dsV2Gshark 플러그인을 설치하면 간단하게 디코딩된 V2G 메시지를 확인할 수 있습니다.



728x90
반응형