2010-12-17 9 views
0

내가 PCAP 라이브러리를 사용하고 있지만, 난 항상이 출력 얻을 이유를 모르겠어요 : 크기pcap 왜 항상 8 바이트 패킷 ... 왜?

새로운 패킷을 : udata = 8 HDR = 8 PKT = 8

이 코드는 다음과 같습니다

void handle_pcap(u_char *udata, const struct pcap_pkthdr *hdr, const u_char *pkt) 
{ 
    DEBUG("DANY new packet with size: udata= %d hdr=%d pkt=%d", (int) sizeof(udata),(int) sizeof(hdr),(int) sizeof(pkt)); 
... 
stuff 
} 

다른 파일에 내가 사용 : 그것은 그 출력이 정상

status = pcap_loop (pcap_obj, 
    -1  /* How many packets it should sniff for before returning (a negative value 
     means it should sniff until an error occurs (loop forever)) */, 
    handle_pcap /* Callback that will be called*/, 
    NULL /* Arguments to send to the callback (NULL is nothing) */); 

인가? 가끔 내 프로그램이 가끔 작동하지 않기 때문에

나는 ..

+0

답변을 올바르게 표시해야합니다. – Benubird

답변

2

음을 생각하지 않는다. 당신은 (다양한) 포인터의 크기를 얻고 있습니다.

의 크기는 sizeof(udata)입니다. 그것이 그 숫자가 의심스러운 이유입니다.

패킷의 크기를 원하는 경우 패킷 크기는 hdr->caplenhdr->len입니다 (전자는 캡처 된 길이이고 후자는 패킷 길이입니다).

+0

아, 지금은 이해가된다, 정말 고마워! – cenos

6

패킷 크기를 보려면 pcap_pkthdr * hdr을 조사하는 대신 포인터의 크기를 인쇄하십시오.

당신은 HDR-> caplenHDR-> LEN보고 캡처 된 데이터의 크기와 전체 패킷의 크기를 찾을 수 있습니다.

+0

나는 그것을 얻었다, 너무 많이 고마워. – cenos

관련 문제