문제

캡처 파일에 패킷 수를 인쇄하는 프로그램이 필요합니다. PCAP 형식. 이 번호는 PCAP 헤더에서 사용할 수없는 것 같습니다 (아마도 캡처가 시작되기 전에 작성 되었기 때문에)이 정보와 함께 파일에 "바닥 글"이없는 것 같습니다.

따라서 나는 유일한 알고리즘은 모든 패킷을 루프하고 합산하는 것이라고 생각합니다. 그것은 O (n)에 있으며 큰 흔적의 경우 꽤 길다.

누군가가 영리한 아이디어가 있는지 확인하기 위해 여기에 게시합니까?

"C"로 태그가 지정되어 있으며 현재 사용하는 언어이지만 언어 독립적 인 문제라고 생각합니다.

도움이 되었습니까?

해결책

PCAPUTILS의 저자 인 Robert Edmonds는 이미 Wireshark 패키지에 내가 원하는 것을하고있는 프로그램이 이미 있다고 언급했습니다. 포함 된 패킷 수를 포함하여 PCAP 파일에 대한 다양한 표시가 표시됩니다.

코드 소스를 읽으면 전체 파일을 순차적으로 걷는 것으로 보입니다.

다른 팁

그만큼 파일의 패킷 수를 결정하는 방법은 전체 파일을 읽는 것입니다. 실제로 파일 헤더에는 패킷 수가 없으며 (형식은 한 번의 패스로 쓸 수 있도록 설계 되었기 때문에) 실제로 바닥 글이 없습니다.

당신이 원한다면 숫자 PCAP의 프레임 :

tshark -r test.cap | wc -l

capinfos 사용 :

capinfos test.cap | grep "Number of packets"| tr -d " " | cut -d ":" -f 2

tcpdump 사용 :

tcpdump -r test.cap 2>/dev/null| wc -l

따라서 기본적으로 libpcap을 사용하십시오. 예는 다음과 같습니다.

#include <stdio.h>
#include <pcap.h>
#include <stdlib.h>

int main(int argc, char **argv) 
{ 
  unsigned int packet_counter=0;
  struct pcap_pkthdr header; 
  const u_char *packet;

  if (argc < 2) { 
    fprintf(stderr, "Usage: %s <pcap>\n", argv[0]); 
    exit(1); 
  } 

   pcap_t *handle; 
   char errbuf[PCAP_ERRBUF_SIZE];  
   handle = pcap_open_offline(argv[1], errbuf); 

   if (handle == NULL) { 
     fprintf(stderr,"Couldn't open pcap file %s: %s\n", argv[1], errbuf); 
     return(2); 
   } 

   while (packet = pcap_next(handle,&header)) { 

      packet_counter++;

    } 
    pcap_close(handle);


  printf("%d\n", packet_counter);
  return 0;
}

참고 : LIBPCAP 헤더를 설치해야합니다 (LIBPCAP DEV/DEVEL 패키지의 Linux 검색에서)

그런 다음 gcc -o myprogram myprogram.c -lpcap으로 컴파일하십시오

내가 아는 유일한 방법은 파일을 읽고 캡처 된 프레임으로 캡처 된 프레임을 읽고 "패킷 카운터를 증가시키는 것입니다. 그러나 저장된 프레임의 길이를 포함하는 작은 프레임 헤더가 있으므로 파일에서 앞으로 나아갈 수 있습니다. 그 길이로. 더 빠르지 않을 수도 있습니다.

그러나 단순히 캡처 된 프레임의 수를 계산하는 것 이상에 관심이 있다면 데이터를 읽고 캡처 된 프레임 체인을 세면서 나중에 사용하기 위해 캡처 된 프레임 체인을 구축하는 것이 합리적 일 수 있습니다. Common LISP 용 PCAP 라이브러리가이를 수행합니다. 다음/이전 "프레임 내비게이션을 위해"다음 프레임 "을 두 배로 링크 할 수 있습니다. 그러나 프레임 내용의 구문 분석은 라이브러리 사용자의 재량에 맡겨져 있으며 프레임 옥트를 데이터 구조로 단순히 읽는 것만으로는 시행되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top