tcpdump 명령만 이용하면, 출력을 보기 좋게 또는 예쁘게 터미널로 출력하기 어렵다.
보기 좋은 형식으로 출력하려면 tshark 명령을 사용하는 것을 추천한다.
tshark 명령 사용
tshark을 사용하면, Network Packet이 정말 예쁘게 출력된다.
아래와 같이 wireshark 패키지를 설치한다. (참고로 tshark은 wireshark 패키지에 포함되어 있다)
##
## 아래 예시처럼 yum install 명령을 이용하여 wireshark 패키지를 설치한다.
##
$ yum install wireshark
...
##
## 설치 완료 후, 아래 명령과 같이 실행
## 참고: -V 옵션은 Packet을 Decode해서 출력하라는 뜻
##
$ tshark -i eth0 -nV port 53
위 예제 명령 정도의 옵션만 사용해도 꽤 보기 좋은 모양으로 IP 네트워크 패킷이 출력된다.
tcpdump 명령의 -A 옵션 사용해서 가독성 높게 출력하기
tshark을 사용할 수 없는 경우라면, 아래 명령처럼 -A 옵션을 주면, TCP 또는 UDP의 Payload가 ASCII 로 출력된다.
(사람 눈으로 읽을 수 있는, 즉 Readable Character만 터미널에 출력함)
-A 옵션만 사용하면, TCP 세션을 수립하기 위한 SYN과 ACK 및 FIN 패킷도 모두 보여지기 때문에
Filter에 tcp[32:4] = 0x47455420 조건을 추가한다. ("GET "에 대한 Pointcode 값이다)
HTTP GET 요청 메시지만 출력
$ tcpdump -i p2p2 -s 1500 -An 'src net 192.168.0.0/24' and dst port 80 and 'tcp[32:4] = 0x47455420'
HTTP GET 요청과 응답 메시지 모두 출력
$ tcpdump -i em2 -s 1500 -An 'src net 192.168.0.0/24' and 'tcp[32:4] = 0x48545450' or 'tcp[32:4] = 0x47455420'
또는 아래와 같은 방식을 사용할 수 있다.
(이 방식을 추천함)
$ tcpdump -i em2 -An -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
참고: 위의 3개 명령 중에서 제일 마지막 명령이 제일 출력 포맷이 예쁘다.