チェックサム 計算式
こんにちは、tangoです。
今回は、Pythonを用いてチェックサムを作成しました。
ICMPパケットの学習時に、チェックサムが出てきたのでこれを機に仕組みを理解しようと思い、計算式を作成してみました。
機器情報とソースコード
◇機器
・ノートPC(Windows10 & Python3.11.5を導入済み)
◇ソースコード(Python)
https://github.com/tango3304/tchecksum
※RFC1071を参考
検証
◇参考値パケット


◇実行結果

◇簡易的な処理のフロー
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