Skip to content

2010.01.30 05:57

Tcpdump 용어 정리

조회 수 8549 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Tcpdump



l        S: SYN (Synchronize sequence numbers ? 연결 요청)

l        F: FIN (보낸 쪽에서 연결을 종료 ? 정상적인 연결 종료)

l        R: RST (비정상적으로 즉시 연결 종료)

l        P: PSH (데이터를 즉시 어플리케이션으로 전달)

l        Urg: (긴급한 데이터에 우선순위를 높게 줌)

l        ‘.’: (SYN, FIN, RESET, PUSH가 아닌 경우로 flag가 설정되지 않았다)



명령어 분석
       tcpdump [ -adeflLnNOpqRStuUvxX ] [ -c count ]
               [ -C file_size ] [ -F file ]
               [ -i interface ] [ -m module ] [ -M secret ]
               [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -Z user ]
               [ expression ]

옵션
-h: 버전 및 기본 사용법을 보여준다.
-a : Network & Broadcast 주소들을 이름들로 바꾼다.
-c Number : 제시된 수의 패킷을 받은 후 종료한다.
-d : compile된 packet-matching code를 사람이 읽을 수 있도록 바꾸어 표준 출력으로 출력하고, 종료한다.
-dd : packet-matching code를 C program의 일부로 출력한다.
-ddd : packet-matching code를 숫자로 출력한다.
-e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.
-f : 외부의 internet address를 가급적 심볼이 아닌 숫자로 출력한다.(Sun의 yp server와의 사용은 가급적 피한다.)
-F file : filter 표현의 입력으로 파일을 받아들인다. 커맨드라인에 주어진 추가의 표현들은 모두무시된다.
-i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지정되지 않으면인터페이스 리스트를 검색하여 가장 낮은 번호를 가진 인터페이스를 선택
-l : 표준 출력으로 나가는 데이터들을 line buffering한다. 다른 프로그램에서 tcpdump로부터 데이 터를 받고자 할 때 유용하다.
보통 'tcpdump -l | tee dat' 나 'tcpdump -l < dat & tail -f dat' 명령으로 연계해서 사용하면 편리하다.
-n : 모든 주소들을 번역하지 않는다(port,host address 등등)
-N : 호스트 이름을 출력할 때, 도메인을 찍지 않는다.
-O : packet-matching code optimizer를 실행하지 않는다. 이 옵션은 optimizer에 있는 버그를 찾을때나 쓰인다.
-p : 인터페이스를 promiscuous mode로 두지 않는다.
-q : 프로토콜에 대한 정보를 덜 출력한다. 따라서 출력되는 라인이 좀 더 짧아진다.
-r file : 패킷들을 '-w'옵션으로 만들어진 파일로 부터 읽어 들인다. 파일에 "-" 가 사용되면 표준입력을 통해서 받아들인다.
-s length: 패킷들로부터 추출하는 샘플을 default값인 68Byte외의 값으로 설정할 때 사용한다.
-T type : 조건식에 의해 선택된 패킷들을 명시된 형식으로 표시한다.
type에는 다음과 같은 것들이 올 수 있다.

rpc(Remote Procedure Call), rtp(Real-Time Applications protocol), rtcp(Real-Time Application control protocal), vat(Visual Audio Tool), wb(distributed  White Board)
-S : TCP sequence번호를 상대적인 번호가 아닌 절대적인 번호로 출력한다.
-t : 출력되는 각각의 라인에 시간을 출력하지 않는다.
-tt : 출력되는 각각의 라인에 형식이 없는 시간들을 출력한다.
-v : 좀 더 많은 정보들을 출력한다.
-vv : '-v'보다 좀 더 많은 정보들을 출력한다.
-vvv : 16진수값 형태로 정보를 보여준다. 보통 -X옵션과 사용되어
-w : 캡춰한 패킷들을 분석해서 출력하는 대신에 그대로 파일에 저장한다.
-x : 각각의 패킷을 헥사코드로 출력한다.
-X : 헥사코드와 ascii형태 모두 출력해준다. 보통 -x 옵션과 같이 사용된다.
조건식(expression)
  옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할 지를 선택하는 데 쓰인다. 조건식이 주어지지 않는다면 모든 패킷들이 대상이 된다. 조건식들은 하나 또는 여러 개의 primitive들로 구성되어 있고 primitive들은 다시 하나 또는 여러 개의 qualifier들 다음에 오는 하나의 값으로 이루어진다.



qualifier
type : 주어진 값의 종류가 무엇인지를 나타낸다.
가능한 type들은 'host', 'net', 'port'가 있다.type이 없는 값들은 type을 host라 가정한다.
dir : id로 부터의 어떤 특정한 전송 방향을 나타낸다.
가능한 방향은 'src', 'dst', 'src or  dst', 'src and dst'이다. 만약 방향이 정해지지 않았다면, src or dst라 가정한다. "For `null' link layers (i.e. point to point protocols such as slip) the inb ound and out  bound qualifiers can be used to specify a desired direction."
proto : 매칭을 특정 프로토콜에 한해서 수행한다. 가능한 프로토콜들은 ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp이다. 만약 프로토콜이 명시되지 않았다면, 해당하는 값의 type에 관련된 모든 프로토콜들이 그 대상이 된다
위의 패턴을 따르지 않는 primitive : gateway, broadcast, less, greater, 산술식이 있으며 참고로 더 정교한 조건식을 사용하려면 'and(&&)','or(||)','not(!)'을 사용할 수 있다.


사용가능한 primitive들
dst host HOST    => packet의 IP destination 항목이 HOST일때 참이 된다.
src host HOST    => packet의 IP source 항목이 HOST일때 참이 된다.
host HOST    => IP source, IP destination 항목 중 어느 하나라도 HOST이면 참이다.
ether dst ehost    => ethernet destination 주소가 ehost일 때 참이다.
ether src ehost    => ethernet source 주소가 ehost일 때 참이다.
ether host ehost    => ethernet source, destination 항목들 중 어느 하나라도 ehost이면 참이다.
gateway host    => 패킷이 host를 게이트웨이로 사용하면 참이다.
이 말의 의미는 ethernet sour ce나 destination 항목은 host이지만, IP source와 destination은 host가 아닐 때를 말한다.
dst net NET    => 패킷의 IP destination 주소가 NET의 network number를 가지고 있을 때 참이다.
src net NET    => 패킷의 IP source 주소가 NET의 network number를 가지고 있을 때 참이다.
net NET    => 패킷의 IP source 주소 혹은 destination 주소가 NET의 network number를 가 지고 있을 때 참이다.
net netmask mask    => IP 어드레스가 지정된 netmask를 통해서 net과 매칭되면 참이다.
net net/len    => IP 어드레스가 netmask와 len 비트만큼 매치되면 참이다.
dst port PORT    => 패킷이 ip/tcp, ip/udp 프로토콜의 패킷이고 destination port의 값이 PORT일 때 참이다.
src port PORT    => 패킷의 source port의 값으로 PORT를 가지면 참이다.
port PORT    => 패킷의 source, destination port 중에 하나라도 PORT이면 참이다.
less length => 패킷이 length보다 짧거나 같으면 참이다.(len <= length)
greater length => 패킷이 length보다 짧거나 같으면 참이다.(len >= length)
ip proto protocol => 패킷이 지정된 종류의 프로토콜의 ip패킷이면 참이다.
Protocol은 icmp, igrp, udp, nd, tcp 중의 하나 혹은 몇 개가 될 수 있다. 주의할 점은 tcp, udp, icmp들은 '\'로 escape되어야 한다.
ehter broadcast => 패킷이 ethernet broadcast 패킷이라면 참이다. ehter는 생략 가능하다.
ip broadcast => 패킷이 IP broadcast 패킷이라면 참이다.
ether multicast => 패킷이 IP multicast 패킷이라면 참이다.
ether proto protocol => 패킷 이 ether type의 protocol이라면 참이다.
protocol은 ip, arp, rarp 중에 하나 혹은 몇개가 될 수 있다. ip proto protocol에서와 마찬가지로 ip, arp, rarp는 escape 되어야 한다.
decnet src host => 만약 DECNET의 source address가 host이면 참이다.
이 어드레스는 '10.123'이 나 DECNET의 host name일 수 있다. DECNET host name은 DECNET에서 돌아가도록 설정된 Ultrix 시스템에서만 사용 가능하다.
decnet dst host => DECNET destination address가 host이면 참이다.
decnet host HOST => DECNET source, destination address중의 하나라도 HOST이면 참이다.
ip, arp, rarp, decnet => ether proto [ip|arp|rarp|decnet]의 약어
lat, moprc, mopdl => ether proto [lat|moprc|mopdl]의 약어
tcp, udp, icmp => ip proto [tcp|udp|icmp]의 약어
expr relop expr
EXPR
proto [expr:size]의 형식을 띤다. proto, expr, size에 올 수 있는 것들은 다음과 같다.
  proto : ether, fddi, ip, arp, rarp, tcp, udp, icmp
  expr : indicate Byte offset of packet of proto
  size : optional. indicate the size of bytes in field of interest
  default is one, and can be two or four
  RELOP
!=, =, <=, >=, etc.


이 조건식을 사용하기 위해서는 먼저 해당하는 Protocol(proto)의 헤더에 관련된 것들을 자세히 알아야만 한다. proto에는 대상이 될 프로토콜을 지정한다. expr에는 프로토콜 헤더의 처음부터의 Byte Offset을 지정하는 식이 들어가게 된다. Size는 Option이며 지정이 안 되어 있을 경우에는 자동으로 1byte를 지칭한다. 따라서 이 조건식을 사용하게 되면 헤더에 포함된 정보를 Bitmask를 사용하여 직 접 원하는 패킷인지를 가려낼 수 있기 때문에, 보다 정밀한 사용이 가능하게 된다.



TCPDUMP 사용 예제
security라는 호스트로부터 날아오고, 날아가는 패킷들을 출력      # tcpdump host security
security와 mazinga, getarobo 사이에 날아다니고 있는 패킷들을 출력      # tcpdump host security and \( mazinga or getarobo \)
security에서 elgaim을 제외한 모든 호스트로 날아다니는 IP 패킷들을 출력      # tcpdump ip host security and not elgaim
gateway amurorei를 거치는 ftp에 관련된 패킷들을 출력      # tcpdump 'gateway amurorei and ( port ftp or ftp-data )'
local호스트가 아닌 호스트와 로컬호스트가 맺는 TCP 커넥션의 시작과 마지막 패 킷들을 출력한다(SYN, FIN 패킷).      # tcpdump 'tcp[13] & 3 != 0 and not src and dst net non-local'
gateway amurorei를 지나는 576Byte보다 큰 패킷들을 출력한다      # tcpdump 'gateway amurorei and ip[2:2] > 576'
Ethernet boradcast 혹은 multicast를 통해서 보내진 것이 아닌, IP broadcast 혹 은 multicast 패킷들을 출력한다.      # tcpdump 'ehter[0] & 1 = 0 and ip[16] >= 224'
Echo request/reply가 아닌 ICMP 패킷들을 모두 출력한다.      # tcpdump 'icmp[0] != 8 and icmp[0] != 0'


mytcpdump 예제

출처 : http://www.awarenetwork.org/home/iqlord/exploits/collection/knu.c  [mytcpdump]




Pcap 라이브러리
pacp_open_live() : 네트워크 디바이스 열기
pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)

device : 디바이스 이름 (eth0, hme0)
snplen : 한번에 캡쳐할 크기 지정
promisc : 캡쳐할 대상

0 : 목적지가 자신, 브로드 캐스트, 자신포함한 멀티 캐스트
1 : 모든 패킷
to_ms : 버퍼링 시간, 패킷 도착후 OS가 처리 대기 시간

0 : 충분히 패킷 도착 할떄 까지 대기
ebuf : 에러 발생시 원인 저장
성공시 pcap_t 타입의 디바이스 디스크립터, 실패시 null



pcap_lookupdev() : 패킷 캡쳐 할수 있는 디바이스 찾기
char *pcap_lookupdev (char *ebuf);

ebuf : 에러 발생시 원인 저장
성공시 디바이스 이름 반환





pcap_loop() : 패킷 캡쳐 함수   (pcap_dispatch와 비슷)
int pcap_loop(pcap_t *p, int maxcnt, pcap_handler callback, u_char *args);

*p : pcap 디스크립터
maxcnt : 캡쳐할 최대 수
callback : 패킷 읽어 드린후 처리 하기 위해 내부적으로 호출하는 콜백 함수
args : callback 함수의 인자


callback 함수의 사용 문법
void (*pcap_handler)(u_char *args, const struct pcap_pkthdr *, const u_char *packet);

args : pcap_loop()에서 넘겨 받은 인자
pcap_pkthdr : 캡쳐한 패킷의 길이나 시간 관련 정보
    struct pcap_pkthdr {
         struct timeval ts;      /* time stamp */
         bpf_u_int32 caplen;     /* length of portion present */
         bpf_u_int32 len;        /* length this packet (off wire) */
};

packet : 캡쳐된 데이터의 첫 부분을 가르키는 포인터


관련 사이트
Programming with pcap : http://blog.naver.com/oz9th?Redirect=Log&logNo=30009332560   http://blog.naver.com/wja30/100030218871 http://www.tcpdump.org/pcap.htm

리눅스에서 pcap library를 사용하여 패킷을 잡아보기 v0.3  http://kldp.org/KoreanDoc/Libpcap-KLDP
PCD(Packet Capture Descriptor) : http://blog.naver.com/linuxint/100007507207
http://blog.naver.com/linuxint/100007507207
Pcap 을 이용한 패킷캡쳐응용 : joinc
리눅스에서 pcap library를 사용하여 패킷을 잡아보기 v0.3  http://www.usinglinux.org/docu/translations/ko/koreanDoc/Libpcap-KLDP
패킷을 캡쳐하기 위한 libpcap의 fuction http://kldp.org/KoreanDoc/html/Libpcap-KLDP/function.html




참고 : 옵션 처리 함수 getopt

The getopt and getopt_long functions automate some of the chore involved in parsing typical unix command line options.

Using Getopt: Using the getopt function.
Example of Getopt: An example of parsing options with getopt.
Getopt Long Options: GNU suggests utilities accept long-named options; here is one way to do.
Getopt Long Option Example: An example of using getopt_long.

List of Articles
번호 제목 글쓴이 날짜 조회 수
48 리눅스서버에서 ping(ICMP) 열기/닫기 ADMINPLAY 2009.08.18 14876
47 시스템 로그를 메일로 - logcheck file ADMINPLAY 2009.09.08 8827
46 스위칭 허브 상에서의 sniffing 툴 file ADMINPLAY 2009.09.08 9637
45 apache 웹방화벽 modsecurity용 웹설정 툴, Remo file ADMINPLAY 2009.09.09 9498
44 rootkit 검색 프로그램 rkhunter-1.2.9.tar.gz file ADMINPLAY 2009.09.22 9236
43 rootkit 검색 프로그램 rkhunter-1.3.4.tar.gz file ADMINPLAY 2009.09.22 9483
42 SYN Flooding공격에 대한 대비 ADMINPLAY 2009.09.24 13008
41 SQL Injection tools 15종 ADMINPLAY 2009.09.25 12327
40 iframe 이용한 악성코드 삽입, 홈페이지 변조 사고 대비 ... ADMINPLAY 2009.10.15 10869
39 홈페이지 변조 대처법 (FTP 계정을 이용한 아이프레임 코... ADMINPLAY 2009.10.15 9091
38 SSH(Security SHell) 보안쉘 ADMINPLAY 2009.10.20 8444
37 ossec 로그 분석 툴 설치 ADMINPLAY 2009.10.20 11576
36 iptables 옵션 및 상태 추적 테이블 및 rule ADMINPLAY 2009.11.30 8917
35 해외에서 접근하는 IP 차단하기 ADMINPLAY 2009.11.30 9311
34 실전 테스트!! 스니퍼 공격 ADMINPLAY 2009.11.30 9824
33 lsof 활용 가이드 ADMINPLAY 2009.11.30 8357
32 Kernel 2.4.23 버전 이하에 나온 ptrace 버그에 관한 사항 ADMINPLAY 2009.12.13 8842
31 홈페이지 보안 강화 도구(CASTLE) 보급 안내 1 file ADMINPLAY 2010.01.22 8971
» Tcpdump 용어 정리 ADMINPLAY 2010.01.30 8549
29 SSH 공격막아내기 방법 l2zeo 2010.03.08 8449
Board Pagination Prev 1 2 3 4 5 Next
/ 5

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234