2014-10-18 2 views
1

패킷을 캡처하기 위해 다음 코드를 작성했습니다. 실제로 마지막 패킷을 저장합니다.패킷을 현재 PCAP 파일에 추가하십시오.

process_Packet(const struct pcap_pkthdr *header, 
        const u_char * packet) 
    { 
     FILE* pFile = NULL; 
     pFile = fopen ("myfile.pcap" , "wb"); // open for writing in binary mode 
     pcap_dumper_t * dumpfile = pcap_dump_fopen(pcap_handle,pFile); 
     if (dumpfile == NULL) 
     { 
      printf("***NOOOO Dump!!!!!!!***"); 
     } 
     else 
     { 
      pcap_dump((unsigned char *) dumpfile, header, packet); 
      printf("***Dumped!!!!!!!***"); 
     } 
     pcap_dump_close(dumpfile); 
    } 

패킷을 수집하고 이전 패킷에 새 패킷을 추가하는 코드를 작성하고 싶습니다. fopen("...", "ab")은 파일을 손상시키고 작동하지 않는다고 말해야합니다.

답변

1

pcap_dump_fopen은 일부 초기화 헤더를 작성하므로 빈 파일에서 한 번만 호출해야합니다. 파일을 헤더로 생성 한 후 실제로 can pass FILE * 인스턴스가 추가 모드에서 열리고 pcap_dump가 unsigned char *에 직접 형 변환되었습니다. 하지만 안전한 방법이 아닙니다. 함수 구현이 미래에 변경 될 수 있고 파일 형식이 변경되지 않으므로 필요한 모든 필드를 직접 작성하는 것이 좋습니다 (어쨌든 10 줄과 비슷합니다). 그리고 왜 모든 패킷을 덤프하여 파일을 다시 열고 싶은지 이해할 수 없습니다. 모든 데이터가 기록되도록하려면 fflush를 호출하면됩니다.

관련 문제