2012년 11월 16일 금요일

Capstats 로 네트워크 인터페이스 통계 정보 수집하기

Capstats 는 Bro-IDS 에서 배포하는 작은 인터페이스 상태 정보 수집 도구이다. libpcap 을 이용한 것으로 네트워크 인터페이스에서 발생하는 트래픽 정보를 간단히 보여준다. 다운로드는 다음의 경로에서 할 수 있다.

http://www.bro-ids.org/downloads/release/capstats-0.18.tar.gz

컴파일을 하기 위해서는 cmake 가 설치되어 있어야 한다.  우분투 계열이면 apt-get 으로 쉽게 설치 가능하다.

# apt-get install cmake

그리고, 컴파일을 다음과정을 거치면 어려움 없이 쉽게 컴파일이 완료된다.

# ./configure
# make
# make install

사용방법 또한 아주 간단하다. 인터페이스를 지정하고 -I 로 얼마 주기로 정보를 출력할 것인지 시간만 정해주면 된다. -f 를 이용하면 BPF 스타일의 필터를 사용할 수 있고 -n 은 지정한 값 만큼만 출력해주고 중단한다. -w 를 사용하면 패킷을 파일로도 저장할 수 있어, 간단히 패킷 덤프용으로도 사용가능하다.

# capstats -i eth0 -I 1

1352159800.380532 pkts=14 kpps=0.0 kbytes=6 mbps=0.1 nic_pkts=2906 nic_drops=0 u=0 t=14 i=0 o=0 nonip=0
1352159801.380637 pkts=2 kpps=0.0 kbytes=0 mbps=0.0 nic_pkts=2908 nic_drops=0 u=0 t=2 i=0 o=0 nonip=0
1352159802.380823 pkts=10 kpps=0.0 kbytes=0 mbps=0.0 nic_pkts=2918 nic_drops=0 u=2 t=8 i=0 o=0 nonip=0
^C1352159803.374389 pkts=3 kpps=0.0 kbytes=0 mbps=0.0 nic_pkts=2921 nic_drops=0 u=0 t=2 i=0 o=0 nonip=1
1352159803.374402
=== Total

1352159803.374442 pkts=2921 kpps=0.0 kbytes=984 mbps=0.0 nic_pkts=2921 nic_drops=0 u=398 t=2299 i=0 o=14 nonip=210


위 예는 인터페이스 eth0 을 모니터링 하고 -I 로 1초마다 정보를 출력하도록 설정한 것이다. 라인별 각 필드 정보는 다음과 같다:

pkts: Interval 기간에 capstats 가 본 패킷 개수
kpps: 초당 패킷 개수
kbytes: 지정된 Interval 동안 발생한 KBytes
mbps: 초당 Mbits
nic_pkts: libcap 의 pcap_stats() 에 보고된 패킷 개수
nic_drops:libpcap 의  pcap_stats() 에 보고된 Drop 패킷 개수
u: UDP 패킷 개수
t: TCP 패킷 개수
i: ICMP 패킷 개수
nonip: non-IP 패킷 개수


간단하게 네트워크 인터페이스 상황을 모니터링할때 유용하다.

[참고]
1. Capstats 추가 정보

http://www.bro-ids.org/documentation/components/capstats/README.html

댓글 2개:

  1. 안녕하세요 ^^
    제가 리눅스에서 네트워크 세션 모니터링 에이전트라는 프로그램을 만들려고 하는데요 (사실 굉장히 중요한 과제 프로젝트에요...ㅠ)
    리눅스에서 클라이언트가 패킷 지나다니는거 왔다갔다 하는거 잡아서
    아이피, 포트 이런거 목록을 서버에게 보내주는거에요...ㅠ
    그런데 이걸 제가 소스쳐서 하는건데 pcap사용해서 하려하는데
    감이 안잡혀서요 혹시 조금이라도 아시는거 있으시면 도움좀 얻을 수 있나해서요... ㅎㅎ
    그럼 꼭 답변 부탁드리고 추운데 감기조심하세요~ㅎㅎ

    답글삭제
    답글
    1. 안녕하세요, 에이전트의 범위가 어디까지인줄은 모르겠으나, IP/PORT 목록을 얻는것은 쉽습니다. libpcap 라이브러리를 이용하시면 어렵지 않게 해당 정보를 얻을 수 있고요, libpcap 을 이용한 튜토리얼을 찾아보시면 어렵지 않게 구하실 수 있습니다. 그리고 더 빠른 방법은 코드가 이미 나와있는 도구의 소스를 살펴보시는 것입니다. 여기 블로그에 소개되어 있는 도구 또는 다른 도구를 참고하셔서 간단하면서도 원하시는 기능이 구현되어 있는 소스를 보시면 도움이 많이 될것 같습니다.

      P.S libpcap 이용한 튜토리얼을 소개할 예정이긴 한데 시간이 여의치 않네요 ㅋㅋ

      삭제