리눅스 tcpdump: Difference between revisions
From CS Wiki
No edit summary |
No edit summary |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
[[분류:정보보안기사]] | [[분류:정보보안기사]] | ||
;네트워크 인터페이스를 거치는 패킷을 | ;네트워크 인터페이스를 거치는 패킷을 캡처해주는 도구(패킷 스니퍼) | ||
==사용법== | ==사용법== | ||
Line 13: | Line 13: | ||
==주요 옵션 및 사용법== | ==주요 옵션 및 사용법== | ||
*-i : 인터페이스를 지정 | *-i: 인터페이스를 지정 | ||
*-nn : 출력시 호스트/서비스명이 아닌 IP주소와 Port번호로 출력 | *-nn: 출력시 호스트/서비스명이 아닌 IP주소와 Port번호로 출력 | ||
*-v, -vv, -vvv : 패킷을 헤더부까지 자세하게, 더 자세하게 출력 | *-v, -vv, -vvv: 패킷을 헤더부까지 자세하게, 더 자세하게 출력 | ||
*IP주소는 192.168.0.1/24와 같이 CIDR 포맷으로 지정 가능 | *IP주소는 192.168.0.1/24와 같이 CIDR 포맷으로 지정 가능 | ||
Line 22: | Line 22: | ||
;Berkely Packet Filter | ;Berkely Packet Filter | ||
*원하는 패킷만을 | *원하는 패킷만을 스니핑하기 위한 룰 지정부 | ||
*대부분의 패킷 스니퍼에서 표준으로 지원되는 형식 | *대부분의 패킷 스니퍼에서 표준으로 지원되는 형식 | ||
==사용 예시== | ==사용 예시== | ||
*'''tcpdump -i eth0''' : 인터페이스 | *'''tcpdump -i eth0''': 인터페이스 eth0을 보여줌 | ||
*'''tcpdump -i eth0 -c 10''' : | *'''tcpdump -i eth0 -c 10''': 10개만 덤프 | ||
*'''tcpdump -i eth0 tcp port 80''' : TCP 80 포트로 통신하는 패킷 덤프 | *'''tcpdump -i eth0 tcp port 80''': TCP 80 포트로 통신하는 패킷 덤프 | ||
*'''tcpdump -i eth0 src 192.168.0.1''' | *'''tcpdump -i eth0 src 192.168.0.1:''' 출발지 IP가 192.168.0.1인 패킷 덤프 | ||
*'''tcpdump -i eth0 dst 192.168.0.1''' : 목적지 IP가 192.168.0.1인 패킷 덤프 | *'''tcpdump -i eth0 dst 192.168.0.1''': 목적지 IP가 192.168.0.1인 패킷 덤프 | ||
*'''tcpdump -i eth0 src 192.168.0.1 and tcp port 80''' : 목적지 IP가 192.168.0.1이면서 TCP 80 포트인 패킷 보여줌 | *'''tcpdump -i eth0 src 192.168.0.1 and tcp port 80''': 목적지 IP가 192.168.0.1이면서 TCP 80 포트인 패킷 보여줌 | ||
*'''tcpdump -i eth0 dst 192.168.0.1''' : 목적지IP가 192.168.0.1인 패킷 보여줌 | *'''tcpdump -i eth0 dst 192.168.0.1''': 목적지IP가 192.168.0.1인 패킷 보여줌 | ||
*'''tcpdump host 192.168.0.1''' : 특정 호스트 IP로 들어오거가 나가는 양방향 패킷 모두 덤프 | *'''tcpdump host 192.168.0.1''': 특정 호스트 IP로 들어오거가 나가는 양방향 패킷 모두 덤프 | ||
*'''tcpdump src 192.168.0.1''' : 특정 호스트 중에서 출발지가 192.168.0.1인 것만 덤프 | *'''tcpdump src 192.168.0.1''': 특정 호스트 중에서 출발지가 192.168.0.1인 것만 덤프 | ||
*'''tcpdump dst 192.168.0.1''' : 특정 호스트 중에서 목적지가 192.168.0.1인 것만 덤프 | *'''tcpdump dst 192.168.0.1''': 특정 호스트 중에서 목적지가 192.168.0.1인 것만 덤프 | ||
*'''tcpdump port 3389''' : 포트 양뱡항으로 3389이면 덤프 | *'''tcpdump port 3389''': 포트 양뱡항으로 3389이면 덤프 | ||
*'''tcpdump src port 3389''' : 출발지 포트가 3389인 것만 덤프 | *'''tcpdump src port 3389''': 출발지 포트가 3389인 것만 덤프 | ||
*'''tcpdump dst port 3389''' : 목적지 포트가 3389인 것만 덤프 | *'''tcpdump dst port 3389''': 목적지 포트가 3389인 것만 덤프 | ||
*t'''cpdump udp and src port 53''' : | *t'''cpdump udp and src port 53''': UDP이고 출발지 포트가 53이면 덤프 | ||
*'''tcpdump src 192.168.0.1 and not dst port 22''' : 출발지 IP가 192.168.0.1이고 목적지 포트가 22 가 아닌 패킷 덤프 | *'''tcpdump src 192.168.0.1 and not dst port 22''': 출발지 IP가 192.168.0.1이고 목적지 포트가 22 가 아닌 패킷 덤프 | ||
*'''tcpdump -w tcpdump.log''' : 결과를 파일로 저장(텍스트가 아닌 바이너리 형식으로 저장) | *'''tcpdump -w tcpdump.log''': 결과를 파일로 저장(텍스트가 아닌 바이너리 형식으로 저장) | ||
*'''tcpdump -r tcpdump.log''' : 저장한 파일을 읽음 | *'''tcpdump -r tcpdump.log''': 저장한 파일을 읽음 | ||
== 실무 예제 == | |||
X-Forwarded-For 조회 | |||
결과 예시<blockquote>GET /api/files/file/name/History%20EX-Guide.docx/properties?aewgaweg.com&siteName=asgsd.com&folderName=1231212 HTTP/1.1 | |||
Host: mydlb.lb.anypointdns.net | |||
X-Real-IP: 1.1.1.1 | |||
X-Forwarded-For: 1.1.1.1 | |||
User-Agent: curl/7.64.1 | |||
Accept: */* | |||
Authorization: bearer 23423</blockquote>조회 방법<blockquote>tcpdump -A -s 10240 'tcp port 8091 and (((ip[2: 2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | egrep --line-buffered "^ ........(GET |HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: " | sed -r 's/^........(GET | HTTP\/|POST |HEAD )/\n\1/g'</blockquote> |
Latest revision as of 21:20, 16 October 2023
- 네트워크 인터페이스를 거치는 패킷을 캡처해주는 도구(패킷 스니퍼)
사용법[edit | edit source]
# tcpdump [옵션] [BPF]
주요 옵션 및 사용법[edit | edit source]
- -i: 인터페이스를 지정
- -nn: 출력시 호스트/서비스명이 아닌 IP주소와 Port번호로 출력
- -v, -vv, -vvv: 패킷을 헤더부까지 자세하게, 더 자세하게 출력
- IP주소는 192.168.0.1/24와 같이 CIDR 포맷으로 지정 가능
BPF[edit | edit source]
- Berkely Packet Filter
- 원하는 패킷만을 스니핑하기 위한 룰 지정부
- 대부분의 패킷 스니퍼에서 표준으로 지원되는 형식
사용 예시[edit | edit source]
- tcpdump -i eth0: 인터페이스 eth0을 보여줌
- tcpdump -i eth0 -c 10: 10개만 덤프
- tcpdump -i eth0 tcp port 80: TCP 80 포트로 통신하는 패킷 덤프
- tcpdump -i eth0 src 192.168.0.1: 출발지 IP가 192.168.0.1인 패킷 덤프
- tcpdump -i eth0 dst 192.168.0.1: 목적지 IP가 192.168.0.1인 패킷 덤프
- tcpdump -i eth0 src 192.168.0.1 and tcp port 80: 목적지 IP가 192.168.0.1이면서 TCP 80 포트인 패킷 보여줌
- tcpdump -i eth0 dst 192.168.0.1: 목적지IP가 192.168.0.1인 패킷 보여줌
- tcpdump host 192.168.0.1: 특정 호스트 IP로 들어오거가 나가는 양방향 패킷 모두 덤프
- tcpdump src 192.168.0.1: 특정 호스트 중에서 출발지가 192.168.0.1인 것만 덤프
- tcpdump dst 192.168.0.1: 특정 호스트 중에서 목적지가 192.168.0.1인 것만 덤프
- tcpdump port 3389: 포트 양뱡항으로 3389이면 덤프
- tcpdump src port 3389: 출발지 포트가 3389인 것만 덤프
- tcpdump dst port 3389: 목적지 포트가 3389인 것만 덤프
- tcpdump udp and src port 53: UDP이고 출발지 포트가 53이면 덤프
- tcpdump src 192.168.0.1 and not dst port 22: 출발지 IP가 192.168.0.1이고 목적지 포트가 22 가 아닌 패킷 덤프
- tcpdump -w tcpdump.log: 결과를 파일로 저장(텍스트가 아닌 바이너리 형식으로 저장)
- tcpdump -r tcpdump.log: 저장한 파일을 읽음
실무 예제[edit | edit source]
X-Forwarded-For 조회
결과 예시
GET /api/files/file/name/History%20EX-Guide.docx/properties?aewgaweg.com&siteName=asgsd.com&folderName=1231212 HTTP/1.1
Host: mydlb.lb.anypointdns.net
X-Real-IP: 1.1.1.1
X-Forwarded-For: 1.1.1.1
User-Agent: curl/7.64.1
Accept: */*
Authorization: bearer 23423
조회 방법
tcpdump -A -s 10240 'tcp port 8091 and (((ip[2: 2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | egrep --line-buffered "^ ........(GET |HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: " | sed -r 's/^........(GET | HTTP\/|POST |HEAD )/\n\1/g'