MAC Address의 앞 6자리가 제조사를 나타내는 OUI인데
http://standards.ieee.org/cgi-bin/ouisearch?xx-xx-xx
에서 xx-xx-xx를 6자리 넣어서 Enter하면 제조사가 나옴
'네트워크' 카테고리의 다른 글
백플레인? 스위칭패브릭? (0) | 2008.12.03 |
---|---|
Tcpdump 옵션 설명 (0) | 2008.12.03 |
MAC Address의 앞 6자리가 제조사를 나타내는 OUI인데
http://standards.ieee.org/cgi-bin/ouisearch?xx-xx-xx
에서 xx-xx-xx를 6자리 넣어서 Enter하면 제조사가 나옴
백플레인? 스위칭패브릭? (0) | 2008.12.03 |
---|---|
Tcpdump 옵션 설명 (0) | 2008.12.03 |
백플레인
Interface ↔ BUS 사이의 연결 속도, 백플레인이 클수록 내부 delay가 작아짐
스위칭 패브릭
스위치의 칩 (CPU?) 에서 초당 처리할 수 있는 bit 의 양
MAC address 앞자리 6자리로 제조사 알아보기 (0) | 2008.12.03 |
---|---|
Tcpdump 옵션 설명 (0) | 2008.12.03 |
■ Tcpdump란?
Tcpdump는 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더들 을 출력해 주는 프로그램이다. 프로그램의 특성상, 네트워크 인터페이스를 아주 심도 있게 사용하기 때문에, 실행하는 사람은 반드시 네트워크 인터페이스에 대한 읽기 권한이 있어야만 한다.
(OS dependent)
위에서 말하는 읽기 권한을 가지고 있어야 하는 파일, 혹은 Tcpdump의 퍼미션 이다.
■ Tcpdump의 패키지 구하기
Tcpdump는 http://www.tcpdump.org 에서 최신 버전을 구할 수 있다. 유명한 프로그램이기 때문에 시스템소프트웨어를 패키지형태로 제공해 주는 OS들의 경우 Vendor에서 패키징된(컴파일된) 버전으로도 구할 수 있을 것이다.
■ Tcpdump의 설치
Tcpdump는 libpcap (Protocol Capture Library)라는 것을 사용한다. 이 라이브러리는 Platform에 상관없이 동일한 방법으로 사용자 레벨에서 패킷들을 캡춰할 수 있게 해 준다. 따라서 이 라이브러리가 없다면 http://www.tcpdump.org 에서 최신 버전을 구하여 설치하도록 한다. ANSI C 컴파일러는 아마 대부분의 시스템에서 구비하고 있을 것이다. 만약 없다면 http://www.gnu.org/software/gcc/gcc.html 에서 를 받아서 설치하기 바란다. libpcap라이브러리가 완벽하게 설치되었다는 가정하에서 다음의 절차에 따라 설치를 시작한다.
1. Makefile.in의 BINDEST와 MANDEST 항목에 각각 tcpdump 실행파일과 메뉴얼 페이지가 설치될 디렉토리들을 입력해 준다.
2. Tcpdump 패키지와 함께 제공되는 ./configure 스크립트를 실행시킨다. 이 스크립트는 현재 시스템의 환경들을 검사하고 이에 맞추어서 Makefile을 생성해 준다.
3. make를 실행한다.
4. 컴파일이 다 됐으면 make install을 수행하여 실행파일을 설치하고, make install-man을 실행하여 메뉴얼 페이지도 설치한다.
5. tcpdump의 퍼미션이 제대로 되었는지를 검사한다. setgid가 설정되어 있기 때문에 원하지 않는 사람이 실행하게 된다면 위험하다. 위에서 설명한 절차를 그대로 옮겨 본다.
# vi Makefile.in
# ./configure
# make
# make install
# make install-man
(OS dependent)
■ Tcpdump의 옵션들
■ 조건식(expression)
옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할지를 선택하는데 쓰인다. 조건식이 주어지지 않는 다면 모든 패킷들이 그 대상이 될 것이다. 일단 주어지면, 아무리 패킷들이 많아도 조건식에 부합하는 패킷만을 출력한다. 조건식들은 하나 또는 몇 개의 primitive들로 구성되어 있다. primitive들은 보통 하나 혹은 몇개의 qualifier들 다음에 오는 하나의 값으로 이루어진다. Qualifier들은 모두 3 종류이며 다음과 같다.
이 밖에도 위의 패턴을 따르지 않는 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 or "protocol" or protocol id>
패킷이 지정된 종류의 프로토콜의 ip패킷이면 참이다. Protocol은 icmp, igrp, udp, nd, tcp 중의 하나 혹은 몇 개가 될 수 있다. 주의할 점은 그냥 protocol이 아니라 위와 같이 escape 문자를 사용하거나 protocol id를 사용해야 한다.
==============================================
프로토콜 ID | 프로토콜 종류
==============================================
1 | ICMP(인터넷 제어 메시지 프로토콜)
2 | IGMP(인터넷 그룹 관리 프로토콜)
6 | TCP(전송 제어 프로토콜)
17 | UDP(사용자 데이터그램 프로토콜)
==============================================
ehter broadcast
패킷이 ethernet broadcast 패킷이라면 참이다. ehter는 생략 가능하다.
ip broadcast
패킷이 IP broadcast 패킷이라면 참이다.
ether multicast
패킷이 IP multicast 패킷이라면 참이다.
ether proto protocol
패킷이 ether type의 protocol이라면 참이다. protocol은 ip, arp, rarp 중에 하나 혹은 몇개가 될 수 있다. ip 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'
ICMP 패킷들을 출력한다.
# tcpdump 'ip[9] = 1'
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'
traceroute 탐지 패킷 출력
(유닉스용 traceroute 는 UDP 데이터 그램을 보냄으로서 작동하므로 대개 33000-33999 포트에서 탐지된다. 하지만 윈도우용은 ICMP를 사용함)
# tcpdump -v 'udp[2:2] >=33000 and udp[2:2] < 34000'
■ Tcpdump의 평가
Tcpdump는 여러모로 좋은 툴이다. libpcap을 거의 100% 활용한 프로그램의 예이며, 실제로 많은 툴들이 Tcpdump와 병행하여 돌아가거나, Tcpdump를 기반으로 제작되었다. Tcpdump의 막강한 packet filter는 현재 로컬 네트워크 상에서 날아다니고 있는 특정한 패킷들을 실시간으로 기록해 줄 수 있으며, 이를 이용하여 네트워크에서 벌어지는 일들을 네트워크 관리자가 원하는 대로 뽑아 볼 수 있게 해 준다. 또한, 시스템 관리자들에게는 로컬 유저의 외부로의 커넥션들을 감시하고, 또 특정 침입자가 침투 경로로 자주 이용하는 호스트, 혹은 원하지 않는 호스트로부터의 커넥션을 실시간으로 감시할 수 있게 해 준다. libpcap을 이용하여 비슷한 툴을 제작하고자 하는 사람들에게도 Tcpdump는 가장 훌륭한 예제가 될 것이다.
# tcpdump -q \( dst net 1.2.3.0/24 or 1.2.4.0/25 \) and dst port 80
; 목적지 주소가 1.2.3.x/24 와 1.2.4.x/25 이고 80번포트인 패킷 캡쳐
# tcpdump host A
; A 호스트로/부터의 모든 도착/출발 패킷 출력
# tcpdump host A and \( B or C \)
; A 호스트와 B 또는 C 사이의 모든 트래픽 출력
# tcpdump ip host A and not B
; A호스트와 B를 제외한 호스트 간의 모든 IP 패킷 출력
# tcpdump net ucb-ether
; 로컬호스트와 Berkeley의 호스트들 간의 모든 트래픽 출력
# tcpdump 'gateway A and (port ftp or ftp-data)'
; 게이트웨이 A를 통한 모든 ftp 트래픽 출력
# tcpdump ip and not net <localnet>
; 로컬네트워크로/부터가 아닌 모든 트래픽 출력
# tcpdump 'tcp[13] & 3 != 0 and not src and dst net <localnet>'
; 로컬네트워크가 아닌 TCP 시작과 마지막 패킷 출력
# tcpdump 'gateway A and ip[2:2] > 576'
; 게이트웨이 A를 통해 보내지는 576 Bytes보다 긴 IP 패킷 출력
# tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
; 이더넷이 아닌 IP 브로드 또는 멀티 캐스트 패킷 출력
# tcpdump 'icmp[0] != 8 and icmp[0] != 0'
; echo 요청/응답이 아닌 모든 ICMP 패킷 출력 (ping 아닌 패킷)
# tcpdump src net 1.2.3 or 1.2.4 and not dst net 1.2.3 or 1.2.4
; 1.2.3 과 1.2.4 IP주소 (내부) 패킷을 제외한 모든 패킷 출력
# tcpdump -i br1
; br1 인터페이스의 모든 패킷 출력
MAC address 앞자리 6자리로 제조사 알아보기 (0) | 2008.12.03 |
---|---|
백플레인? 스위칭패브릭? (0) | 2008.12.03 |