Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.71 KB | None | 0 0
  1. import socket
  2. import struct
  3.  
  4. class Ipv4Header():
  5.  
  6.     def __init__(self, sourceIpAddress, destinationIpAddress):
  7.         self.version = 4 # ipv4
  8.         self.internetHeaderLength = 5 # number of 32 bit words
  9.         self.differntiatedServicesCodePoint = 0
  10.         self.electronicCommunicationNetwork = 0
  11.         self.identification = 0 # only one packet will be sent
  12.         self.flags = 0 # no flags needed
  13.         self.fragmentOffset = 0 # packet won't be fragmented
  14.         self.timeToLive = 128
  15.         self.protocol = 6 # tcp
  16.         self.headerChecksum = 0 # temporary number for checksum calculation
  17.         self.sourceIpAddress = socket.inet_aton(sourceIpAddress) # format source ip
  18.         self.destinationIpAddress = socket.inet_aton(destinationIpAddress) # format destination ip
  19.  
  20.     def calculateTotalLength(self, payloadLength):
  21.         self.totalLength = payloadLength + (self.internetHeaderLength * 4)
  22.  
  23.     def packHeader(self):
  24.         self.raw = struct.pack("!BBHHHBBH4s4s",
  25.             (self.version << 4) + self.internetHeaderLength,
  26.             (self.differntiatedServicesCodePoint << 2) + self.electronicCommunicationNetwork,
  27.             self.totalLength,
  28.             self.identification,
  29.             (self.flags << 13) + self.fragmentOffset,
  30.             self.timeToLive,
  31.             self.protocol,
  32.             self.headerChecksum,
  33.             self.sourceIpAddress,
  34.             self.destinationIpAddress)
  35.  
  36.     def calculateHeaderChecksum(self):
  37.         s = 0
  38.         w = 0
  39.         for i in range(0, len(self.raw), 2):
  40.             w = (self.raw[i] << 8) + self.raw[i + 1]
  41.             s += w
  42.         s = (s + (s >> 16)) & 0xffff
  43.         s = ~s & 0xffff
  44.         self.headerChecksum = s
  45.  
  46. if __name__ == "__main__":
  47.     Ipv4Header = Ipv4Header("192.168.0.1","192.168.0.128")
  48.     Ipv4Header.calculateTotalLength(0)
  49.     Ipv4Header.packHeader()
  50.     Ipv4Header.calculateHeaderChecksum()
  51.     Ipv4Header.packHeader()
  52.  
  53.     print(Ipv4Header.raw)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement