winpcap man page에서 "pcap_pkthdr" 이란 구조체를 봤습니다.
확실하진 않지만 winpcap을 사용하면 LAN으로 들어오는 데이터들을 Packet 단위로 읽을 수 있는 것 같습니다.
이 때, 각 Packet은 "헤더 + 페이로드" 로 분류가 되고
"pcap_pkthdr" (packet capture - packet header) 는 그 이름처럼 헤더에 대한 정보를 받아옵니다.
이 구조체에는 아래처럼 딱 세가지 멤버가 있습니다.
struct timeval ts; bpf_u_int32 caplen; bpf_u_int32 len; |
여기서 caplen과 len의 차이가 뭘까? 궁금해서 찾아봤습니다. 출처
결론만 말하자면 caplen은 captured length 실제 읽은 길이를 뜻하고
len은 이번에 capture한 packet의 length를 뜻하는 것 같습니다.
무슨 말인고... 영어는 잘못하지만 나름 해석을 해보니
packet을 받기전에 앞으로 받을 packet의 최대 길이를 설정할 수 있다는 것 같습니다.
예를 들면, pcap은 packet 단위로 데이터를 가져다 주는데 이번에 들어온 packet은 길이가 100입니다.
그런데 처음에 한 번에 읽을 최대 길이를 60으로 설정했다면
실제 읽은 데이터 길이 (caplen) 은 60이 되고 capture한 packet의 실제 길이 (len)은 100이 됩니다.
'개발 > c' 카테고리의 다른 글
[백준] 17822 원판 돌리기 (0) | 2020.04.22 |
---|---|
[백준] 3111 검열 (0) | 2019.03.05 |
[백준] 4179 불! (0) | 2018.12.13 |
ffmpeg 라이브러리 사용법 (2) | 2018.11.16 |
ffmpeg 이란? (1) | 2018.11.02 |