티스토리 뷰

Overview

최근 진행한 프로젝트에서 Netty 프레임워크를 사용하여 대외기관과 소켓통신을 할 일이 있어서, 패킷들을 분석한 일이 있었다.
TCP 패킷을 dump하고, 해당 파일을 WireShark 툴로 분석을 해보려한다.

TCP dump란?

linux의 manual 명령어를 통해 알아보자.

> man tcpdump
NAME
       tcpdump - dump traffic on a network

네트워크의 트래픽을 덤프한다라고 매뉴얼에서 말해준다.
tcp dump는 해당 서버에서 네트워크를 통해 송/수신되는 패킷들을 확인할 수 있는 명령어이다.

TCP dump 명령어

TCP 기본 명령어

SYNOPSIS
       tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
               [ -c count ]
               [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
               [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
               [ --number ] [ -Q|-P in|out|inout ]
               [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
               [ --time-stamp-precision=tstamp_precision ]
               [ --immediate-mode ] [ --version ]
               [ expression ]
tcpdump [options] [expression]

options

| option | desc |
| A | 각 패킷들을 ASCII로 출력함 |
| w | 수집한 패킷을 파일에 저장함 |
| i | 인터페이스명을 지정하여 수집함 ex) -i eth0, en0... |
| G | 캡쳐 주기를 지정함(초) |
| Z | 실행권한을 가질 user를 지정함 |
| nn | 주소(host주소, port번호 등)를 변경하지 않고 그대로 출력함 |
| vvv | 패킷의 정보를 전체 출력함(telnet정보 등) |
| tttt | 덤프의 각 라인에 타임스탬프(시간,분,초)와 함께 출력함 |

expression

| option | desc |
| host | 패킷을 수집할 대상 host를 지정함 |
| port | 패킷을 수집할 대상 port를 지정함 |
| net | 패킷을 수집할 대상 서브네트워크를 지정함 ex) net 192.168.1.0/24 |

TCP 명령어 사용해보기

> sudo tcpdump -nn -vvv -tttt -X -A -G 100 -w /home/lhjang/tcpdump_%Y%m%d-%H%M%S.pcap -Z lhjang host 10.10.40.171 and port 8080

TCP dump 분석

정상적으로 패킷이 전송되는지 테스트하기 위해 tcpdump를 일정주기를 지정해놓고 수집하여 분석하였습니다.
대상 서버에 필요한 옵션을 적용한 tcpdump명령어를 백그라운드로 실행시켜서 .pcap파일을 일정량 수집 후, GUI 프로그램인 wireShark를 사용하여 분석해보았습니다.

분석절차

분석을 하기위하여 진행한 절차는 아래와 같습니다.

1. 패킷 분석할 대상에 명령어를 실행

2. 해당 서버에 떠있는 API서버에 테스트로 api 호출

3. 지정한 경로에 .pcap 파일이 생성 및 패킷이 정상적으로 되었는지 확인

4. pcap 파일을 wireShark 툴로 실행

.pcap 파일 열어보기

HTTP Connection option을 Keep-Alive로 설정 후 HTTP 통신의 Connection 재활용을 확인해보자.

1. HTTP통신이 발생하기 전 3way-handshake가 일어난 것을 확인 할 수 있다. [Line. 1~3]
2. HTTP Keep-Alive handshake가 일어나서 Connection을 유지중인 것을 확인할 수 있다. 패킷이 계속 적재 됨
[Line. 10~17]
3. HTTP통신 시 별도의 3way-handshake 없이 Connection을 재사용한 것을 확인할 수 있다. [Line. 18~]

local 환경에서 TCP dump에 패킷이 안잡힐 때 (Linux 환경)

로컬환경에서 테스트 환경을 구축하고 TCP dump를 해야할 상황이 있었습니다. 아무리 패킷을 날려도 잡히지 않아서 무슨일인가? 했더니..
네트워크 인터페이스가 Default로 적용되었습니다.

ifconfig 를 하면 LOOPBACK 인터페이스가 lo0 라고 확인이 됩니다. (환경마다 상이)

-i 옵션을 통해 네트워크 인터페이스를 변경해주었습니다.

패킷이 잘 잡히는걸 확인할 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
Total
Today
Yesterday