pcap 라이브러리를 이용한 데이터 캡쳐시 loss 발생?
글쓴이: winicon / 작성시간: 목, 2005/09/08 - 10:57오전
안녕하세요.
pcap 라이브러리를 이용해서 윈도우에서 어떤 프로그램으로
데이터가 들어오는 패킷을 모든 잡을려고 하는데요.
data traffic은 그렇게 많지는 않습니다.
옵션을 "tcp port 1234" 이렇게 주고 promiscuous mode로는 안하고 돌렸는데요.
실제 프로그램에서는 10개 데이터가 왔는데, 캡쳐하는 프로그램에서는 대략 10개중 3개 데이터는 안 잡히네요.
코드에 대한 적용한 pcap함수는 아래와 같습니다.
#define PCAP_TIMEOUT = 1000 #define FILTER_RULE = "tcp port 1234" . pcap_open_live(pDev->name, 1024 * 300, 0, PCAP_TIMEOUT, ebuf); pcap_compile(fp, &fcode, FILTER_RULE, 0, netmask); pcap_setfilter(fp, &fcode); . pcap_loop(pObject->fp, -1, dispatcher_handler, (PUCHAR)pParam);
Forums:
* 일단 packet을 100% capture하는 것은 불가능합니다.
* 일단 packet을 100% capture하는 것은 불가능합니다.
당연하게도, 100% 근처에 가도록 노력하는것이 필요합니다.
여러 방법론 및 연구가 있는데, 현재 제가 아는 바로는...
1) 네트워크 디바이스 드라이버를 폴링으로 구현
2) pcap의 dual buffer를 좀.. 큰 버퍼(circula queue알고리즘)로 구현
- 아~ 짜기 귀차니즘이니, PF_RING패치를 주워다가 패치를 검토
3) 모든 부분에서 CPU 부하를 줄이는 프로그램으로 작성
-CPU 사용이 대략 40~60을 넘지 않도록 한다.
4) pcap외 Netfilter framework를 사용하는 방법
5) 운영체제별 차이
- BSD, Windows, Linux등
6) 고성능 하드웨어를 사용하여 처리
-NPU 도입 검토
-시스템버스의 밴드위쓰검토 PCI-X, Infiniband, RDMA, Myrinet등
7) 패킷로드밸런싱, 워크스테이션 클러스터링을 사용
8) 병렬 프로그래밍 검토
- SMP
- multi-threaded programming
9) 메모리...
- 다다익선
* 일단 2번을 시도해보시는게 좋아 보입니다.
* 그외 분석등을 동시에 한다면, capture 프로세스와 analysis프로세스를 나누어 구현
* 좋은 프로그램 만드세요.
댓글 달기