チェックサム 計算式

こんにちは、tangoです。
今回は、Pythonを用いてチェックサムを作成しました。
ICMPパケットの学習時に、チェックサムが出てきたのでこれを機に仕組みを理解しようと思い、計算式を作成してみました。


機器情報とソースコード

◇機器

・ノートPC(Windows10 & Python3.11.5を導入済み)

◇ソースコード(Python)

https://github.com/tango3304/tchecksum

※RFC1071を参考

検証

◇参考値パケット

参考値パケット1
参考値パケット2(青背景の値)

◇実行結果

実行結果

◇簡易的な処理のフロー

1.16ビットになるようにつなぎ合わせる
  例.('08' '00' > 0800) ('00' '01' > 0001) ('00' '05' > 0005)
2.1の値同士を加算していく
3.2の値から16ビットまでを取得
  例.1101011001010100010 and 1111111111111111 = 1011001010100010
4.2の値から17ビット以降を取得
  例.1101011001010100010 and 1111111111111111 = 0000000000000110
5.3と4の値を加算する
  例.1011001010100010 + 0000000000000110 = 1011001010101000
6.5の値をXOR(排他的論理和)する
  例.1011001010101000 ^ 1111111111111111 = 0100110101010111