同じようなコードの繰り返しで途中で飽きてきたが写経をやり遂げて、パケットキャプチャが動いたらちょっと嬉しい。
チェックサムの計算のしかた
対象となるパケットに対して、16ビットごとの1の補数和ををとり、さらにその1の補数をとる
となっているんだが、なんでコレでうまくいくのか理解できていない
sum = 0; ptr = (u_int16_t *) data; for(c = len; c > 1; c -= 2){ sum += ptr; if(sum & 0x80000000){ sum = (sum & 0xFFFF) + (sum >> 16); } ptr++; }