소개
이 랩에서는 Lua 스크립팅을 사용하여 Wireshark 의 패킷 분석 기능을 확장하는 방법을 배우게 됩니다. 명령줄 옵션을 통해 사용자 지정 스크립트를 로드하고 인수를 전달하여 기능을 향상시키는 방법을 살펴봅니다.
이 연습에서는 Lua 스크립트를 생성하고, Wireshark 의 tshark 명령으로 테스트하고, 출력을 확인하는 과정을 안내합니다. 빈 캡처로 스크립트 실행을 연습하고 자세한 패킷 정보를 해석하는 방법을 배우게 됩니다.
-X lua_script:script.lua 로 스크립트 로드
이 단계에서는 -X 옵션을 사용하여 Wireshark 에서 Lua 스크립트를 로드하는 방법을 배우게 됩니다. Lua 는 Wireshark 와 잘 통합되는 가벼운 스크립팅 언어로서, 핵심 프로그램을 수정하지 않고도 사용자 지정 패킷 분석을 위해 기능을 확장할 수 있게 해줍니다.
먼저, 기본 작업 디렉터리에 간단한 Lua 스크립트를 생성해 보겠습니다. 이 스크립트는 Wireshark 가 Lua 코드를 성공적으로 로드하고 실행할 수 있는지 확인하기 위한 기본 테스트 케이스 역할을 합니다.
터미널을 열고
~/project디렉터리에 있는지 확인합니다. 여기에서 Lua 스크립트를 생성하고 저장합니다.cd ~/projectnano 를 사용하여
script.lua라는 새 Lua 스크립트 파일을 생성합니다. nano 는 간단하고 대부분의 Linux 환경에서 사용할 수 있기 때문에 사용합니다.nano script.lua로드될 때 메시지를 출력하는 다음 기본 Lua 코드를 추가합니다. 이는 가장 기본적인 작업, 즉 스크립트 실행을 확인하는 것을 보여줍니다.
-- Simple Wireshark Lua script print("Wireshark Lua script loaded successfully!")파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X). 이제 스크립트는 Wireshark 에서 로드할 준비가 되었습니다.
이제 Wireshark 의 명령줄 인터페이스를 사용하여 이 스크립트를 로드해 보겠습니다. 실제 네트워크 트래픽을 처리하지 않고 스크립트를 테스트하기 위해 특별한 매개변수 조합을 사용합니다.
wireshark -X lua_script:script.lua -r /dev/null -k
이 명령의 각 부분이 무엇을 하는지 자세히 살펴보겠습니다.
-X lua_script:script.lua는 Wireshark 에 Lua 스크립트 파일을 로드하도록 지시합니다.-r /dev/null은 빈 캡처 파일을 지정합니다 (패킷을 분석하는 것이 아니라 스크립트 로드를 테스트하는 것입니다).-k는 사용자 입력을 기다리지 않고 즉시 캡처를 시작합니다.
이 명령을 실행하면 터미널 출력에 "Wireshark Lua script loaded successfully!" 메시지가 표시되어야 합니다. 이는 Wireshark 가 Lua 스크립트를 성공적으로 찾아 로드하고 실행했음을 확인합니다. 이 메시지가 표시되지 않으면 스크립트 파일이 올바른 위치에 있는지, 구문 오류가 없는지 확인하십시오.
-X lua_script1:arg1 로 인수 전달
이 단계에서는 -X lua_script1: 옵션을 사용하여 Wireshark 에서 Lua 스크립트에 인수를 전달하는 방법을 배우게 됩니다. 이 기술은 스크립트 자체를 매번 수정하지 않고도 다양한 입력을 허용하여 스크립트를 더 유연하게 만들고 싶을 때 유용합니다.
먼저, Wireshark 의 Lua 환경에서 인수 전달이 어떻게 작동하는지 이해해 보겠습니다. -X lua_script1: 옵션을 사용하면 스크립트에 문자열 값을 보낼 수 있으며, 이 값은 get_string() 함수를 사용하여 액세스할 수 있습니다. 이는 다른 프로그래밍 언어에서 명령줄 인수가 작동하는 방식과 유사합니다.
이제 기존 Lua 스크립트를 수정하여 인수를 허용하고 처리해 보겠습니다.
이전 단계에서
script.lua파일을 엽니다.nano ~/project/script.lua내용을 인수를 허용하고 표시하는 다음 코드로 바꿉니다.
-- Lua script with argument handling local arg1 = get_string("lua_script1") print("Received argument: " .. (arg1 or "no argument provided"))get_string("lua_script1")함수는-X lua_script1:과 함께 전달된 인수를 검색합니다.or "no argument provided"부분은 인수가 제공되지 않은 경우 기본 메시지를 제공합니다.파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X).
이제 인수를 사용하여 스크립트를 실행해 보겠습니다.
wireshark -X lua_script:script.lua -X lua_script1:test123 -r /dev/null -k
이 명령을 분석해 보겠습니다.
-X lua_script:script.lua는 Lua 스크립트 파일을 로드합니다.-X lua_script1:test123은 "test123"을 스크립트에 인수로 전달합니다.-r /dev/null은 빈 캡처 파일을 지정합니다 (스크립트만 테스트하므로).-k는 사용자 입력을 기다리지 않고 즉시 캡처를 시작합니다.
다음과 유사한 출력을 볼 수 있습니다.
Received argument: test123
스크립트가 다른 입력으로 작동하는지 확인하려면 다른 값으로 실행해 보십시오.
wireshark -X lua_script:script.lua -X lua_script1:another_value -r /dev/null -k
이는 서로 다른 인수를 사용하여 동일한 스크립트를 재사용하여 분석을 더욱 동적이고 다양한 시나리오에 적응할 수 있도록 하는 방법을 보여줍니다.
-r capture.pcap 으로 파일 처리
이 단계에서는 -r 옵션을 사용하여 Wireshark 의 명령줄 도구인 Tshark 로 미리 기록된 네트워크 캡처 파일을 처리하는 방법을 배우게 됩니다. 이는 실시간 패킷을 캡처하는 대신 저장된 네트워크 트래픽을 분석하려는 경우에 유용합니다.
먼저, 작업할 샘플 패킷 캡처 파일이 필요합니다. PCAP 파일에는 분석할 수 있는 실제 네트워크 트래픽 데이터가 포함되어 있습니다. 표준 HTTP 트래픽 샘플을 다운로드해 보겠습니다.
샘플 pcap 파일을 프로젝트 디렉터리에 다운로드합니다.
wget https://wiki.wireshark.org/SampleCaptures/http.cap -O ~/project/capture.pcap파일 크기와 위치를 확인하여 파일이 올바르게 다운로드되었는지 확인합니다.
ls -lh ~/project/capture.pcap
이제 이 캡처 파일을 분석하도록 Lua 스크립트를 수정하겠습니다. 스크립트는 파일의 모든 패킷을 계산하고 총계를 보고합니다. 업데이트 방법은 다음과 같습니다.
편집을 위해 스크립트를 엽니다.
nano ~/project/script.lua이 패킷 계산 로직으로 내용을 업데이트합니다.
-- Packet counter script local arg1 = get_string("lua_script1") or "default" local packet_count = 0 -- Called for each packet function tap.packet(pinfo,tvb) packet_count = packet_count + 1 end -- Called after processing all packets function tap.draw() print("Argument received: " .. arg1) print("Total packets processed: " .. packet_count) end -- Register the tap tap = Listener.new()파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X).
이제 캡처 파일에 대해 스크립트를 실행해 보겠습니다. 이 명령은 Tshark 에 다음을 지시합니다.
- Lua 스크립트 사용 (
-X lua_script) - 스크립트에 인수 전달 (
-X lua_script1) - 다운로드한 파일 처리 (
-r) - GUI 없이 조용히 실행 (
-q)
wireshark -X lua_script:script.lua -X lua_script1:analysis -r ~/project/capture.pcap -q
처리 후 다음을 보여주는 출력을 볼 수 있습니다.
- 스크립트에 전달한 인수
- 계산된 총 패킷 수
예시 출력:
Argument received: analysis
Total packets processed: 83
-V 옵션으로 사용자 지정 출력 확인
이 단계에서는 Wireshark 의 -V (verbose, 상세) 옵션을 사용하여 Lua 스크립트의 출력을 확인하는 방법을 살펴보겠습니다. 이는 사용자 지정 스크립트의 상세 분석 결과와 표준 패킷 정보를 함께 확인해야 할 때 특히 유용합니다.
먼저, 더 의미 있는 통계를 제공하도록 Lua 스크립트를 개선해 보겠습니다. 다양한 프로토콜 유형을 추적하도록 수정하겠습니다.
nano 에서 편집을 위해 스크립트를 엽니다.
nano ~/project/script.luaHTTP 및 TCP 패킷을 계산하는 이 향상된 버전으로 스크립트를 업데이트합니다.
-- Enhanced packet analyzer local arg1 = get_string("lua_script1") or "default" local stats = { total = 0, http = 0, tcp = 0 } function tap.packet(pinfo,tvb) stats.total = stats.total + 1 if pinfo.visited then return end if pinfo.protocols:find("http") then stats.http = stats.http + 1 end if pinfo.protocols:find("tcp") then stats.tcp = stats.tcp + 1 end end function tap.draw() print("=== Analysis Report ===") print("Argument received: " .. arg1) print("Total packets: " .. stats.total) print("HTTP packets: " .. stats.http) print("TCP packets: " .. stats.tcp) print("======================") end tap = Listener.new()파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X).
이제 상세 출력을 활성화하여 스크립트를 실행해 보겠습니다. -V 플래그는 Wireshark 에 사용자 지정 스크립트 출력을 포함하여 사용 가능한 모든 정보를 표시하도록 지시합니다.
wireshark -X lua_script:script.lua -X lua_script1:final_run -r ~/project/capture.pcap -q -V
다음과 유사한 출력을 볼 수 있으며, 패킷 세부 정보와 스크립트의 분석 결과가 모두 표시됩니다.
=== Analysis Report ===
Argument received: final_run
Total packets: 83
HTTP packets: 10
TCP packets: 83
======================
향후 참조를 위해 이 출력을 파일에 저장하려면 파일로 리디렉션합니다.
wireshark -X lua_script:script.lua -X lua_script1:final_run -r ~/project/capture.pcap -q -V > ~/project/analysis_output.txt
마지막으로, 파일 내용을 확인하여 저장된 출력을 확인합니다.
cat ~/project/analysis_output.txt
요약
이 Lab 에서는 명령줄 작업을 통해 Lua 스크립트를 사용하여 Wireshark 의 기능을 확장하는 방법을 배웠습니다. 주요 단계에는 -X lua_script:script.lua 옵션을 사용하여 Lua 스크립트를 로드하고 Wireshark 의 CLI 인터페이스로 테스트하는 것이 포함되었습니다.
또한 -X lua_script1:arg1을 사용하여 Lua 스크립트에 인수를 전달하는 방법을 탐색하여 외부 매개변수를 허용하는 유연한 스크립트를 만드는 방법을 시연했습니다. 이 기술은 사용자 정의 가능한 Lua 확장을 통해 Wireshark 의 패킷 분석 기능을 향상시킵니다.


