From b23fe8f36f13219e1b54eebed6fa4a31d1af73c7 Mon Sep 17 00:00:00 2001 From: Sana147 <14mseeshabib@seecs.edu.pk> Date: Mon, 8 May 2023 00:07:52 +0000 Subject: [PATCH] Upload files to 'Test_Cases' --- Test_Cases/IP_Checksum_Calculator.py | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Test_Cases/IP_Checksum_Calculator.py diff --git a/Test_Cases/IP_Checksum_Calculator.py b/Test_Cases/IP_Checksum_Calculator.py new file mode 100644 index 0000000..ff9cd9c --- /dev/null +++ b/Test_Cases/IP_Checksum_Calculator.py @@ -0,0 +1,50 @@ +# Code has been taken from https://www.codeproject.com/Tips/460867/Python-Implementation-of-IP-Checksum +# Example is provided at https://www.thegeekstuff.com/2012/05/ip-header-checksum/ + +def ip_checksum(ip_header, size): + + cksum = 0 + pointer = 0 + + #The main loop adds up each set of 2 bytes. They are first converted to strings and then concatenated + #together, converted to integers, and then added to the sum. + while size > 1: + cksum += int((str("%02x" % (ip_header[pointer],)) + + str("%02x" % (ip_header[pointer+1],))), 16) + size -= 2 + pointer += 2 + if size: #This accounts for a situation where the header is odd + cksum += ip_header[pointer] + + cksum = (cksum >> 16) + (cksum & 0xffff) + cksum += (cksum >>16) + + return (~cksum) & 0xFFFF + + +if __name__=="__main__": + + header = {} + + header[0] = 0x45 + header[1] = 0x00 + header[2] = 0x00 + header[3] = 0x28 + header[4] = 0x00 + header[5] = 0x02 + header[6] = 0x00 + header[7] = 0x00 + header[8] = 0x28 + header[9] = 0x06 + header[10] = 0xfd + header[11] = 0x5f + header[12] = 0xc0 + header[13] = 0xa8 + header[14] = 0x0a + header[15] = 0x14 + header[16] = 0xc0 + header[17] = 0xa8 + header[18] = 0x0a + header[19] = 0x0a + + print("Checksum is: %x" % (ip_checksum(header, len(header)),))