[리눅스] tcpdump
참조
http://wnstjqdl.tistory.com/42
[]# tcpdump -i eth0 -w 20160216001.log
[]# tcpdump 'src 10.3.22.112 or dst 10.3.22.112' -c 1000
떨군 덤프파일이 깨지기도 함
putty에 모든 정보를 저장하게 설정하여 해당 로그만 추출하기도 함
TCPDUMP
- 기본적으로 서로 옵션이나 규칙을 조합하여 사용가능하다
-n : 주소를 십진수로 표시
-i : 어느 인터페이스를 경유하는 패킷을 캡쳐할지 결정 (eth0, eth1, eth2 ...)
-t : 캡쳐 시간을 출력하지 않음
-c : 캡쳐할 패킷 수 지정 (지정한 수 만큼 캡쳐하고 종료)
-a : 도메인 이름형식으로 주소 출력
-f : 로컬호스트는 도메인 이름, 원격호스트는 숫자로 표시
-e : 링크레벨 헤더를 출력
-N : 호스트 이름을 출력할때 도메인 출력하지 않음
-p :인터페이스를 promiscuous 모드로 하지 않음 ( 이모드로 하면 아마 브로드케스트 패킷이나 자기와 관련없는 패킷들은 생깔것같음
-q(v): 프로토콜정보를 간단히 (자세히) 출력
-w(r) : 캡쳐한 패킷을 파일에 저장 (로드)
-s : snap length 를 변경 (기본 68바이트) : 무슨 소린지? ㅎㅎ
-S : TCP순서번호를 상대적인 번호가 아닌 절대적 값으로 출력
- v : 더 많은 정보들을 출력
-vv : -v 보다 더 많은 정보들을 출력
-x : 패킷을 헥사코드로 출력
조건식
and - or
host - net - port
src - dst
proto
tcpdump 'proto /ip' : ip데이터그램을 캡쳐
tcpdump 'arp' : ARP 패킷을 캡쳐
tcpdump 'tcp' : TCP 패킷을 캡쳐
tcpdump 'host yahoo.com' : 특정호스트가 송수신하는 패킷 캡쳐 (IP주소도 넣을수 있음)
tcpdump 'src host yahoo.com' : 특정송신자의 패킷만 캡쳐
tcpdump 'dst host yahoo.com' : 특정수신자의 패킷만 캡쳐
tcpdump 'port 23' : 송신지의 포트번호가 23인 패킷만 패킷만 캡쳐
tcpdump 'dst host A or dst host B' : 목적지가 A 혹은 B의 패킷 캡쳐
tcpdump 'not dst host A and src host B' : 목적지가 A가 아닌 발신지가 B인 패킷만 캡쳐
S : tcp 헤더의 SYN비트 (순서번호)
win : tcp 헤더의 Window Size
ack : tcp 헤더의 승인필드와 번호
DF : Don't Fragmentation (단편화 될수 없는 패킷??)
플래그
- S : SYN (Synchronize sequence numbers) 연결요청
- ACK : 패킷을 잘 받았다는 응답표시
- F : FIN (보낸쪽에서 연결을 종료) 정상적인 연결종료
- R : RST (비정상적으로 즉시 연결종료)
- P : PSH (데이터를 즉시 어플리케이션으로 전달)
- Usr : (긴급한 데이터에 우선순위를 높게 줌)
- . : (SYN, FIN, RESET, PUSH 가 아닌경우로 flag가 설정되지 않은 경우) : Placeholder
특정플래그만 캡쳐하기
SYN플래그의 패킷만 잡고 싶다?
C E U A P R S F
7 6 5 4 3 2 1 0
0 0 0 0 0 0 1 0
0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2
TCP[13] == 2
SYN-ACK 패킷만 잡고 싶다?
C E U A P R S F
7 6 5 4 3 2 1 0
0 0 0 1 0 0 1 0
0*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18
1*2 의 4승 더하기 1*2의 1승 = 18
TCP[13] == 18 으로 나타내는게 아니라 무슨 소린지 모르겠지만
TCP[13] & 2 == 2