티스토리 뷰
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
옵션을 통해 네트워크 인터페이스를 변경해주었습니다.
패킷이 잘 잡히는걸 확인할 수 있습니다.