capinfo, tshak 등을 실행하다 아래와 같은 에러를 얻은 경우가 있다.
[Error] (pcap: File has 1279743227-byte packet, bigger than maximum of 65535)
[Error] (pcap: File has 1174099712-byte packet, bigger than maximum of 65535)
[Error] (pcap: File has 808345964-byte packet, bigger than maximum of 65535)
패킷 사이즈만 보면 엄청난 크기이다. 그런데 잘 생각해 보면 이상하다고 생각되는 부분이 있을 것이다.
아래 관련한 소스를 찾아보면 한번 살펴보자.
wireshark1.2.9/wiretap/libpcap.c 를 한번 들여다 본 것이다.
if (hdr->hdr.incl_len > WTAP_MAX_PACKET_SIZE) {
/*
* Probably a corrupt capture file; return an error,
* so that our caller doesn't blow up trying to allocate
* space for an immensely-large packet, and so that
* the code to try to guess what type of libpcap file
* this is can tell when it's not the type we're guessing
* it is.
*/
*err = WTAP_ERR_BAD_RECORD;
if (err_info != NULL) {
*err_info = g_strdup_printf("pcap: File has %u-byte packet, bigger than maximum of %u",
hdr->hdr.incl_len, WTAP_MAX_PACKET_SIZE);
}
return -1;
}
일단, 위에서 발생한 에러의 문구를 볼 수 있다. hdr->hdr.incl_len 이 WTAP_MAX_PACKET_SIZE 보다 큰 경우에 발생한 것인데 WTAP_MAX_PACKET_SIZE 값 또한 찾아보자.
이 값은 wtap.h 에 아래와 같이 정의되어 있다.
/*
* Maximum packet size we'll support.
* It must be at least 65535.
*/
#define WTAP_MAX_PACKET_SIZE 65535
최대 패킷 사이즈라고 정의되어 있다. 즉 헤더의 패킷 사이즈를 생각해보면 2 바이트로 최대 65535 까지
가능한 것이다. 그러므로 이론적으로 이 값을 초과할수는 없는 것이기에 패킷 파일이 깨졌을 가능성이 높은 것이다.
한번 테스트용 파일을 tcpdump 를 통해서 오픈 해 봤다. bogus savefile header 라는 문구가 보인다.
# tcpdump -n -r test.cap | wc -l
reading from file test.cap, link-type EN10MB (Ethernet)
tcpdump: pcap_loop: bogus savefile header
1407
이번에는 tshark 를 통해 파일을 읽어 보겠다.
tshark: "test.cap" appears to be damaged or corrupt.
(pcap: File has 781876-byte packet, bigger than maximum of 65535)
781876 바이트를 가지고 있다고 에러가 발생한다. 그리하여 781876 을 HEX 로 변환하여 해당 값을
찾아보니 나타난다.
# hexdump -C test.cap | grep "34 ee 0b"
00072eb0 34 ee 0b 00 66 00 00 00 66 00 00 00 01 00 5e 00 |4...f...f.....^.|
결국은 헤더파일에 잘못된 값이 들어가 있었기 때문에 발생한 것이다. 이렇게 파일이 깨지는 경우도 있으니, 이와 같은 메시지를 얻는 다면 참고하기 바란다.
현재 Windump Pcap 1.12에서 262140 으로 수정되었습니다.
답글삭제혹시 관련 내용에 대해서 아시는게 있을까요?