[ R E P O R T ] 정보통신공학전공 200301582 김성태
1. 과제의목표 * 리눅스상에서패킷을잡는기법에대하여공부한다. 구체적으로 pcap library 와관련테크닉을공부하고예제프로그램을해석한다. 참고로본예제프로그램은앞으로개발한 SimTL 의기초가되므로완벽한이해가필수적이다. 2. 과제수행내용및수행결과 * tcpdump TCPDUMP 란주어진조건식을만족하는네트워크인터페이스를거치는패킷들의헤더들을출력해주는프로그램이다. * tcpdump 의옵션들. -a : Network & Broadcast 주소들을이름들로바꾼다. -c Number : 제시된수의패킷을받은후종료한다. -d : comile 된 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 : 어느인터페이스를경유하는패킷들을잡을지지정한다. 지저되지않으면시스템의인터페이스리스트를뒤져서가장낮은번호를가진인터페이스를선택한다 ( 이때 loopback 은제외된다 ). -l : 표준출력으로나가는데이터들을 line buffering한다. 다른프로그램에서 tcpdump 로부터데이터를받고자할때, 유용하다. -n : 모든주소들을번역하지않는다 (port,host address 등등 ) -N : 호스트이름을출력할때, 도메인을찍지않는다. -O : packet-matching code optimizer 를실행하지않는다. 이옵션은 optimizer 에있는버그를찾을때나쓰인다. -p : 인터페이스를 promiscuous mode 로두지않는다. -q : 프로토콜에대한정보를덜출력한다. 따라서출력되는라인이좀더짧아진다. -r file : 패킷들을 '-w' 옵션으로만들어진파일로부터읽어들인다. 파일에 "-" 가사용되면표준입력을통해서받아들인다. -s length: 패킷들로부터추출하는샘플을 default 값인 68Byte 외의값으로설정할때사용한다 (SunOS 의 NIT 에서는최소가 96Byte이다 ). 68Byte 는 IP,ICMP, TCP, UDP 등에적절한값이지만 Name Server 나 NFS 패킷들의경우에는프로토콜의정보들을 Truncation 할우려가있다. 이옵션을수정할때는신중해야만한다. 이유는샘플사이즈를크게잡으면곧패킷하나하나를처리하는데시간이더걸릴뿐만아니라패킷버퍼의사이즈도자연
히작아지게되어손실되는패킷들이발생할수있기때문이다. 또, 작게잡으면그만큼의정보를잃게되는것이다. 따라서가급적캡춰하고자하는프로토콜의헤더사이즈에가깝게잡아주어야한다. -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' 보다좀더많은정보들을출력한다. -w : 캡춰한패킷들을분석해서출력하는대신에그대로파일에저장한다. -x : 각각의패킷을헥사코드로출력한다. * tcpdump 의조건식 (expression) 옵션의제일마지막인조건식은어떤패킷들을출력할지를선택하는데쓰인다. 조건식이주어지지않는다면모든패킷들이그대상이될것이다. 일단주어지면, 아무리패킷들이많아도조건식에부합하는패킷만을출력한다. 조건식들은하나또는몇개의 primitive 들로구성되어있다. primitive 들은보통하나혹은몇개의 qualifier 들다음에오는하나의값으로이루어진다. Qualifier 들은모두 3 종류이며다음과같다. dst such 콜 type : 주어진값의종류가무엇인지를나타낸다. 가능한 type 들은 'host', 'net', 'port' 가있다. type 이없는값들은 type 을 host 라가정한다. dir : id 로부터의어떤특정한전송방향을나타낸다. 가능한방향은 'src', 'dst', 'src or dst', 'src and dst' 이다. 만약방향이정해지지않았다면, src or 라가정한다. "For `null' link layers (i.e. point to point protocols 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, broadcst, less, greater, 산술식 ). 좀더정교한조건식들을사용하려면, 'and(&&)', 'or( )', 'not(!)' 들을사용하여여러 primitive 들을연결하면된다. 같은표현들은생략될수있다. 사용가능한 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 일때참이다. port 는 /etc/services 에명시된이름일수도있고그냥숫자일수도있다. 만약이름이사용됐다면 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 : 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 사용모습
* pcap library 를이용한패킷분석기 Flowchart
* pcap 프로그램사용모습
* 컴퓨터인증화면 3. 참조 1. http://kldp.org :. 한국리눅스문서프로젝트 2. http://www.tcpdump.org : tcpdump 홈페이지 3. http://phpshool.com : php 개발자커뮤니티 4. http://blog.naver.com/linuxint?redirect=log&logno=100007507589 : 곱단이네블로그 5. Unix Network Programming 스티븐슨 4. 요구등급 - 모든사항은독자수행하였음.