[재 질문] pcap 라이브러리 이용시 캡쳐부분에서 코딩 문제?
글쓴이: winicon / 작성시간: 금, 2005/09/09 - 11:52오전
안녕하세요.
테스트 한 끝에 다시 질문을 드립니다.
/////////////////////////////////////////////////////////////////
// 이전 글
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);
/////////////////////////////////////////////////////////////////
위의 처럼 로스가 발생해서 ethereal 프로그램에서도 똑같이 발생하는지 확인한 결과 ethereal에서는 거의 다 캡쳐가 되었는데요.
제가 코딩한 프로그램에서는 못 잡네요.
똑같은 pcap 라이브러리를 사용했는데...
pcap구조 이해 부족과 코딩 문제 인가요?
그럼 답변 부탁 드립니다. 거운 하루되세요.^^
Forums:
* 일단 별무리없는 코드로 보입니다. 또한 네트워크 부하도 적다고 하셨고
* 일단 별무리없는 코드로 보입니다. 또한 네트워크 부하도 적다고 하셨고,
캡쳐하는 시스템의 CPU사용율도 낮을 것으로 간주되고...
그정도 전송량은 100% 캡쳐가능할 것으로 보이는데....
몇가지 가능성에 대해 검토해보고 싶군요.
* 패킷이 전송시작되고 끝나는 시점이 대략 몇초 정도 걸리는가요?
1. 캡쳐프로그램시작
2. 트래픽 발생 프로그램 시작
3. 트래픽 발생 프로그램 종료/캡쳐종료
4. 캡쳐프로그램종료
1-4단계에 걸치는 시간은?
* 중간에 디버깅이나 기타의 사유로 출력(printf()등)이 있지는 않은지?
* 메모리를 동적할당하는 로직이 내부에 있지 않은지?
* 메모리를 캡쳐 시작전에 할당했어도 초기화 없이 캡쳐부분으로 들어갔는지?
* 그럴리는 없지만, pcap_loop()의 에러처리/리턴값처리는 정확한지?
* 더군다나, 남이 작성한 프로그램(ethereal)을 동일 시스템/환경에서 돌릴경우 다잡는데, 본인이 작성한 프로그램이 못잡는다면 문제군요.
답변 주셔서 감사합니다.방화벽 툴로 해당 캡쳐하려는 프로그램의 데이터
답변 주셔서 감사합니다.
방화벽 툴로 해당 캡쳐하려는 프로그램의 데이터 송수신 속도는 대충 1500 Byte/S 입니다.
패킷이 전송시작되고 끝나는 시점은 거의 무한대라고 보시면 됩니다.
(소켓이 한번 연결이 되면 끊기지 않고 계속해서 데이터를 받습니다.
끊는 시점은 아무때나 가능합니다.^^;)
. 중간에 출력문은 약간 있습니다.
. 메모리는 스택메모리를 사용했습니다. ex) char data[4096];
. 초기화 없이 그냥 memcpy(data, packet_data, n); <--이렇게 했습니다.
. void형이라 그렇게 특별한거는 없습니다.
ex) void dispatcher_handler(u_char *pParam, const struct pcap_pkthdr *pkthdr, const u_char *packet_data);
음.. 그러고 보니깐.
위의 memcpy(data, packet_data, n); 부분에서 n 값이 위의 data[4096]으로 할당된 크기 보다 길수도 있겠군요.
그런데 이것때문에 대략 10개중 3개가 loss가 일어날수도 있나요?
별로 경험이 없어서요.^^
그럼 답변 부탁 드립니다. ( 즐거운 주말 보내세요.^^ )
댓글 달기