Guest User

Untitled

a guest
Aug 23rd, 2018
645
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.48 KB | None | 0 0
  1. import struct
  2. from socket import inet_ntoa
  3.  
  4. # TCP FRAGMENT
  5. TCP_SOURCE_PORT = 'TCP_SOURCE_PORT'
  6. TCP_DESTINATION_PORT ='TCP_DESTINATION_PORT'
  7. TCP_SEQUENCE_NUMBER = 'TCP_SEQUENCE_NUMBER'
  8. TCP_ACKNOWLEDGEMENT_NUMBER = 'TCP_ACKNOWLEDGEMENT_NUMBER'
  9. TCP_OFFSET = 'TCP_OFFSET'
  10. TCP_RESERVED = 'TCP_RESERVED'
  11. TCP_FLAGS = 'TCP_FLAGS'
  12. TCP_WINDOW = 'TCP_WINDOW'
  13. TCP_CHECKSUM = 'TCP_CHECKSUM'
  14. TCP_POINTER = 'TCP_POINTER'
  15. TCP_PAYLOAD_DATA = 'TCP_PAYLOAD_DATA'
  16.  
  17. # TCP flags
  18. TCP_FLAG_CWR = 'TCP_FLAG_CWR'
  19. TCP_FLAG_ECE = 'TCP_FLAG_ECE'
  20. TCP_FLAG_URG = 'TCP_FLAG_URG'
  21. TCP_FLAG_ACK = 'TCP_FLAG_ACK'
  22. TCP_FLAG_PSH = 'TCP_FLAG_PSH'
  23. TCP_FLAG_RST = 'TCP_FLAG_RST'
  24. TCP_FLAG_SYN = 'TCP_FLAG_SYN'
  25. TCP_FLAG_FIN = 'TCP_FLAG_FIN'
  26.  
  27. # IP HEADER
  28. IP_VERSION = 'IP_VERSION'
  29. IP_IHL = 'IP_IHL'
  30. IP_TOS = 'IP_TOS'
  31. IP_TOTAL_LENGTH = 'IP_TOTAL_LENGTH'
  32. IP_ID = 'IP_ID'
  33. IP_FLAGS = 'IP_FLAGS'
  34. IP_FRAGMENT_OFFSET = 'IP_FRAGMENT_OFFSET'
  35. IP_TTL = 'IP_TTL'
  36. IP_PROTOCOL = 'IP_PROTOCOL'
  37. IP_HEADER_CHECKSUM = 'IP_HEADER_CHECKSUM'
  38. IP_SOURCE_ADDRESS = 'IP_SOURCE_ADDRESS'
  39. IP_DESTINATION_ADDRESS = 'IP_DESTINATION_ADDRESS'
  40.  
  41. # IP flag
  42. IP_FLAG_RF = 'IP_FLAG_RF'
  43. IP_FLAG_DF = 'IP_FLAG_DF'
  44. IP_FLAG_MF = 'IP_FLAG_MF'
  45.  
  46. # IP TOS flags
  47. IP_TOS_PRECEDENSE = 'IP_TOS_PRECEDENS'
  48. IP_TOS_DELAY = 'IP_TOS_DELAY'
  49. IP_TOS_THROUGHPUT = 'IP_TOS_THROUGHPUT'
  50. IP_TOS_RELIABILITY = 'IP_TOS_RELIABILITY'
  51. IP_TOS_MONETARY = 'IP_TOS_MONETARY'
  52. IP_TOS_RESERVED = 'IP_TOS_RESERVED'
  53.  
  54.  
  55. def ethernet_frame(raw_data):
  56.     pass
  57.  
  58.  
  59. # Unpack tcp fragment
  60. def tcp_fragment(raw_data):
  61.     tcp_header = struct.unpack('!HHLLBBHHH', raw_data[:20])
  62.     source_port = tcp_header[0]
  63.     destionation_port = tcp_header[1]
  64.     sequence_number = tcp_header[2]
  65.     acknowledgement_number = tcp_header[3]
  66.     offset = tcp_header[4] >> 4
  67.     reserved = tcp_header[4] & 0xF
  68.     flags = get_tcp_flags(tcp_header[5])
  69.     window = tcp_header[6]
  70.     checksum = tcp_header[7]
  71.     pointer = tcp_header[8]
  72.  
  73.     return {
  74.         TCP_SOURCE_PORT: source_port,
  75.         TCP_DESTINATION_PORT: destionation_port,
  76.         TCP_SEQUENCE_NUMBER: sequence_number,
  77.         TCP_ACKNOWLEDGEMENT_NUMBER: acknowledgement_number,
  78.         TCP_OFFSET: offset,
  79.         TCP_RESERVED: reserved,
  80.         TCP_FLAGS: flags,
  81.         TCP_WINDOW: window,
  82.         TCP_CHECKSUM: checksum,
  83.         TCP_POINTER: pointer,
  84.         TCP_PAYLOAD_DATA: raw_data[20:]
  85.     }
  86.  
  87.  
  88. # Get flags in tcp header
  89. def get_tcp_flags(flags):
  90.     C = flags >> 7
  91.     E = flags & 0x40
  92.     E >>= 6
  93.     U = flags & 0x20
  94.     U >>= 5
  95.     A = flags & 0x10
  96.     A >>= 4
  97.     P = flags & 0x8
  98.     P >>= 3
  99.     R = flags & 0x4
  100.     R >>= 2
  101.     S = flags & 0x2
  102.     S >>= 1
  103.     F = flags & 0x1
  104.  
  105.     return {
  106.         TCP_FLAG_CWR: C,
  107.         TCP_FLAG_ECE: E,
  108.         TCP_FLAG_URG: U,
  109.         TCP_FLAG_ACK: A,
  110.         TCP_FLAG_PSH: P,
  111.         TCP_FLAG_RST: R,
  112.         TCP_FLAG_SYN: S,
  113.         TCP_FLAG_FIN: F,
  114.     }
  115.  
  116.  
  117. # Unpack ip header
  118. def ip_header(raw_data):
  119.     ip_header = struct.unpack('!BBHHHBBH4s4s', raw_data[:20])
  120.     version = ip_header[0] >> 4
  121.     IHL = ip_header[0] & 0xF
  122.     TOS = get_tos(ip_header[1])
  123.     total_length = ip_header[2]
  124.     ID = ip_header[3]
  125.     flags = get_ip_header_flags(ip_header[4])
  126.     fragment_offset = ip_header[4] & 0x1FFF
  127.     TTL = ip_header[5]
  128.     protocol = ip_header[6]
  129.     header_checksum = ip_header[7]
  130.     source_address = inet_ntoa(ip_header[8])
  131.     destination_address = inet_ntoa(ip_header[9])
  132.  
  133.     return {
  134.         IP_VERSION: version,
  135.         IP_IHL: IHL,
  136.         IP_TOS: TOS,
  137.         IP_TOTAL_LENGTH: total_length,
  138.         IP_ID: ID,
  139.         IP_FLAGS: flags,
  140.         IP_FRAGMENT_OFFSET: fragment_offset,
  141.         IP_TTL: TTL,
  142.         IP_PROTOCOL: protocol,
  143.         IP_HEADER_CHECKSUM: header_checksum,
  144.         IP_SOURCE_ADDRESS: source_address,
  145.         IP_DESTINATION_ADDRESS: destination_address
  146.     }
  147.  
  148.  
  149. # Unpack ip header flags
  150. def get_ip_header_flags(fragment):
  151.     RF = fragment >> 15
  152.     DF = fragment & 0x4000
  153.     DF >>= 14
  154.     MF = fragment & 0x2000
  155.     MF >>= 13
  156.  
  157.     return {
  158.         IP_FLAG_RF: RF,
  159.         IP_FLAG_DF: DF,
  160.         IP_FLAG_MF: MF
  161.     }
  162.  
  163.  
  164. # Unpack tos
  165. def get_tos(TOS):
  166.     P = TOS >> 5
  167.     D = TOS & 0x10
  168.     D >>= 4
  169.     T = TOS & 0x8
  170.     T >>= 3
  171.     R = TOS & 0x4
  172.     R >>= 2
  173.     M = TOS & 0x2
  174.     M >>= 1
  175.     RES = TOS & 0x1
  176.  
  177.     return {
  178.         IP_TOS_PRECEDENSE: P,
  179.         IP_TOS_DELAY: D,
  180.         IP_TOS_THROUGHPUT: T,
  181.         IP_TOS_RELIABILITY: R,
  182.         IP_TOS_MONETARY: M,
  183.         IP_TOS_RESERVED: RES
  184.     }
Advertisement
Add Comment
Please, Sign In to add comment