소개
Grove 이벤트 팀은 방문자가 Night Garden Walk 상세 정보를 여는 과정을 보여 주는 믿을 만한 예시가 필요합니다. 실제로 기록한 HTTP 트래픽에서 올바른 방문을 찾고, 요청과 응답을 연결한 뒤 다른 분석가가 다시 열 수 있는 캡처를 준비합니다.
파일 열기, 간단한 터미널 명령 입력, 기본 Wireshark 디스플레이 필터 적용 방법을 알고 있어야 합니다. 프로그래밍은 필요하지 않습니다. 이 실습에서는 계속 Desktop을 사용합니다. 터미널, Wireshark, 텍스트 편집기는 같은 교육용 컨테이너를 공유합니다. 통제된 환경의 기록이며 실제 방문자의 실시간 트래픽이 아닙니다. 이 실습은 독립적으로 시작하며 예상 시간에는 읽기와 일반적인 실수도 포함됩니다.
완전한 방문 분리하기
이 단계에서는 Cedar의 정상 방문을 찾아 전체 대화를 내보냅니다. Desktop에서 시작하세요. 왼쪽 아래 데스크톱 메뉴에서 Applications → Terminal Emulator를 엽니다. 준비된 캡처는 입력 파일이므로 변경하지 마세요. 다음 명령으로 Wireshark를 실행하고 파일을 엽니다. Wireshark 실행 중에는 터미널이 사용 중이므로 이후에는 Wireshark 창에서 진행합니다.
wireshark /home/labex/project/event-page/input/casebook.pcapng
제목 표시줄의 최대화 버튼으로 창을 키웁니다. 위쪽 창은 패킷 목록, 가운데는 선택한 패킷의 설명, 아래쪽은 바이트를 보여 줍니다. 이 파일에는 로컬 이벤트 서비스의 서로 다른 세 방문이 기록되어 있습니다. 서비스 주소는 127.0.0.1입니다. 클라이언트 주소는 서로 다른 로컬 테스트 신원이며 물리적인 컴퓨터가 아닙니다.
| 방문 | 클라이언트 | 이 실습의 용도 |
|---|---|---|
| cedar | 127.0.0.2 | 전달할 정상 방문 |
| willow | 127.0.0.3 | 이번 전달 범위 밖의 다른 방문자 |
| birch | 127.0.0.4 | 이번 전달 범위 밖의 다른 방문자 |
패킷 목록 위의 필터 표시줄을 클릭하고 다음 식을 입력한 뒤 Enter를 누릅니다. ip.addr는 양 끝점 중 어느 쪽과도 일치하므로 양방향을 유지합니다. ==는 같다는 뜻입니다. 디스플레이 필터는 보기만 바꾸며 입력 파일에서 패킷을 삭제하지 않습니다.
ip.addr == 127.0.0.2
Statistics → Conversations를 열고 TCP 탭을 선택한 다음 필요하면 Limit to display filter를 켭니다. TCP 대화에는 두 주소와 두 포트가 포함됩니다. Duration에는 유휴 시간도 포함되므로 한 HTTP 응답의 측정값이 아닙니다. 선택한 대화가 Cedar와 이벤트 서비스를 연결하는지 확인하고 대화 상자를 닫습니다.
Info가 GET으로 시작하는 요청 패킷을 선택합니다. HTTP는 애플리케이션의 요청 응답 프로토콜입니다. URI는 요청할 리소스를 식별합니다. 여기서는 view 값이 list, details, programme을 선택합니다. 요청을 마우스 오른쪽 버튼으로 클릭하고 Follow → TCP Stream을 선택합니다. 필요하면 스크롤하며 양방향 내용을 읽습니다. Cedar는 같은 연결에서 상세 정보를 두 번 요청합니다. 따라서 같은 URI와 스트림만으로 하나의 요청을 고유하게 식별할 수 없습니다.
Close로 Follow 창을 닫습니다. Wireshark에는 스트림 필터가 남습니다. 그대로 두세요. 이 보기에는 HTTP라고 표시된 패킷만이 아니라 연결의 TCP 세그먼트도 포함됩니다. 다른 방문을 잘못 골랐다면 필터를 Cedar 주소 식으로 바꾸고 Cedar 요청에서 Follow를 다시 수행합니다.
File → Export Specified Packets를 선택합니다. /home/labex/project/event-page/output/evidence.pcapng로 저장하며 형식은 pcapng, 패킷 범위는 Displayed, 표시된 집합 안에서는 All packets를 선택합니다. 입력 파일과 별도로 보관하세요. 출력 이름이 틀렸다면 요구된 이름으로 다시 내보냅니다. Export Packet Dissections는 재사용 가능한 캡처가 아닌 요약을 만들므로 사용하지 마세요.

저장 전에 Displayed 열과 All packets 옵션을 확인합니다. 예시에는 Cedar 패킷 30개가 표시됩니다.
File → Open으로 새 evidence.pcapng를 엽니다. 필터 표시줄에 http를 적용합니다. GET 요청 네 개와 HTTP 응답 네 개가 있어야 합니다. 개수뿐 아니라 내용도 확인하세요. 응답 하나는 여러 TCP 세그먼트에 걸칠 수 있습니다. 원래 창에서 응답이 완전해 보였더라도 HTTP로 표시된 행만 내보내면 앞선 세그먼트가 빠질 수 있습니다. 내보낸 파일을 다시 열면 이 실수를 찾을 수 있습니다.
응답이 없거나 재조립되지 않으면 원본 입력을 다시 열고 Cedar 주소 필터를 복원한 뒤 전체 연결을 다시 내보냅니다. 빠진 응답 내용을 다른 파일에 직접 입력해서 채우지 마세요.
요청과 실제 응답 연결하기
이 단계에서는 두 상세 요청을 구분하고 올바른 네 쌍을 기록합니다. Wireshark가 열린 Desktop에서 시작합니다. File → Open으로 /home/labex/project/event-page/input/casebook.pcapng에 돌아갑니다. 다음 표의 모든 프레임 번호는 새 번호가 붙은 내보내기 파일이 아니라 원본 입력을 가리킵니다.
두 조건을 &&로 결합하면 둘 다 일치해야 합니다. http는 디코딩된 HTTP 메시지를 선택합니다.
ip.addr == 127.0.0.2 && http
첫 GET을 선택합니다. 가운데 창에서 삼각형을 눌러 Hypertext Transfer Protocol을 펼치거나 그 행을 선택하고 Right Arrow를 누릅니다. URI와 X-Request 헤더를 읽습니다. 이 합성 애플리케이션은 cedar-01처럼 각 요청에 고유한 식별자를 부여합니다.
Response in frame을 찾아 오른쪽 버튼으로 클릭하고 Go to Linked Packet을 선택합니다. 응답의 HTTP 부분에 있는 Request in frame은 원래 요청을 가리킵니다. 양쪽 링크가 모두 중요합니다. 스트림의 마지막 응답이 반드시 첫 요청의 응답인 것은 아닙니다.
응답의 JavaScript Object Notation → Object → Member: title을 펼치고 필요하면 가운데 창을 스크롤합니다. 또는 Follow → TCP Stream으로 전체 애플리케이션 대화를 읽습니다. 이벤트 제목은 Night Garden Walk입니다. JSON은 이름이 붙은 애플리케이션 값을 표현합니다. title은 이름이며 뒤따르는 따옴표 안의 단어가 값입니다. 200 응답 코드만 보지 말고 실제 값을 읽으세요. JSON 부분이 보이지 않으면 가운데 창을 스크롤합니다.
두 상세 요청을 포함해 Cedar의 모든 요청에서 반복합니다. 이 고정된 기록의 쌍은 다음과 같습니다.
| 입력의 요청 프레임 | 해당 응답 | 이벤트 제목 |
|---|---|---|
| 4 | 10 | Night Garden Walk |
| 12 | 16 | Night Garden Walk |
| 17 | 21 | Night Garden Walk |
| 23 | 27 | Night Garden Walk |
응답 링크를 비교하기 쉽도록 요청의 Response in frame을 오른쪽 버튼으로 클릭하고 Apply as Column을 선택합니다. 응답 행의 빈 셀은 정상입니다. 그 행에는 대신 Request in frame 필드가 있습니다. 이 열은 보조 수단이며 필수 프로필 설정은 아닙니다. 반복 상세 요청이 서로 다른 응답을 가리키는지 확인합니다.

왼쪽의 원본 프레임 번호와 옆의 Response in frame을 읽습니다. 두 상세 요청은 프레임 16과 27로 이어집니다.
그래픽 텍스트 편집기에서 작은 전달 표를 만듭니다. Applications → Terminal Emulator를 다시 열어 Desktop에 다른 터미널을 만듭니다. mousepad는 제공된 편집기를 열고 절대 경로는 출력 파일을 지정합니다.
mousepad /home/labex/project/event-page/output/pairs.csv
다음 CSV 전체를 입력합니다. CSV는 쉼표로 필드를 구분하고 한 줄에 한 레코드를 둡니다. 헤더는 열 이름입니다. 이 제목에는 쉼표가 없으므로 추가 따옴표가 필요하지 않습니다.
request_frame,response_frame,title
4,10,Night Garden Walk
12,16,Night Garden Walk
17,21,Night Garden Walk
23,27,Night Garden Walk
Ctrl+S로 저장합니다. 저장 대화 상자가 나타나면 정확한 출력 디렉터리와 pairs.csv 이름을 확인합니다. 창이나 아래 패널 버튼으로 Wireshark에 돌아갑니다. 각 CSV 행을 입력의 실제 요청 응답 링크와 비교합니다. 표는 조사를 기록하지만 완전한 evidence.pcapng를 대신하지 않습니다.
요약
Wireshark 대화 통계와 Follow TCP Stream으로 한 방문을 분리하고 완전히 내보낸 캡처를 다시 열어 반복 HTTP 요청을 각각의 응답과 연결했습니다. 원본 입력은 그대로 유지되며 내보낸 패킷과 짧은 대응표는 독립적으로 확인할 수 있습니다.


