Q) 특정 호스트를 지정하기 어려운경우, 점검을 해야할 시간을 특정 하지 못할 때, 어떤 패킷이 랜덤하게 들어올때 , 다량의 패킷을 tcmpdump 떠야 할때 어떻게 해야할까 ?
위와 같은 상황에서 좀더 tcmpdump 를 유용하게 쓸 수 있는 방법에 대해서 알아봅시다.
사용하게된 옵션들은 아래와 같습니다.
-C : 파일 사이즈 The units of file_size are millions of bytes(1,000,000 bytes, not 1,048,576 bytes).
-W : 최대 파일 갯수
-Z root : 파일을 나누어 남길때 권한 오류가 발생한다면 추가
-i any : 모든 인터페이스
icmp 패킷만, 10MB의 크기로, 최대 10개의 파일을 생성하게 하고 , 계속 로테이션 되게 로그를 쌓고 싶을 경우 아래와 같이 사용합니다. 캡쳐된 내용이 capfile0, capfile1, capfile2... 으로 9까지 생기고 계속 로테이션 되면서 기록됩니다.
$ tcpdump icmp -C 10 -W 10 -w capfile
권한오류가 발생 할 수도 있습니다. 그럴 경우 마지막에 -Z root 을 추가하여 루트권한으로 실행하도록 합니다.
예제추가) 백그라운드로, 모든 인터페이스, udp 161 포트, 소스아이피 또는 목적지아이피가 10.0.0.1 , 파일은 10개 크기는 20MB씩 로테이션이 되도록 하고 파일명은 dump~ , 루트권한으로 실행
$ nohup tcpdump -i any src 10.0.0.1 or dst 10.0.0.1 and udp port 161 -W 10 -C 20 -w dump -Z root &
위를 잘 활용하면, 네트워크의 문제 (ping 유실, 네트워크 부하, 이상 패킷 흐름) 등의 모니터링을 하는데 도움을 줄 수 있다고 생각합니다. 실제로 현업에서 며칠에 한번씩 랜덤하게 ping 유실되는 것을 증명할 때 사용하기도 했습니다. 디스크 용량을 확인하고 적절하게 계산하여 원하는 만큼의 기간동안의 패킷을 로깅 할 수 있습니다.
옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할지를 선택하는데 쓰인다. 조건식이 주어지지 않는 다면 모든 패킷들이 그 대상이 될 것이다. 일단 주어지면, 아무리 패킷들이 많아도 조 건식에 부합하는 패킷만을 출력한다.
조건식들은 하나 또는 몇 개의 primitive들로 구성되어 있다. primitive들은 보통 하나 혹은 몇개의 qualifier들 다음에 오는 하나의 값으로 이루어진다. Qualifier들은 모두 3 종류이며 다음과 같다.
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에 관련된 모든 프로토콜들이 그 대상이 된다.
사용예
<옵션> -c Number : 제시된 수의 패킷을 받은 후 종료한다. -i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지정하지 않을 경우 가장 낮은 번호를 가진 인터페이스를 선택한다(이 때 loopback은 제외된다).
-i any : 인터페이스를 구분 하지 않는다.
-w tcpdump.log : 결과를 tcpdump.log 파일에 저장함.(임의로 지정가능)