Advertisement
Guest User

Untitled

a guest
Jul 20th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. from scapy.all import *
  2.  
  3. proto_list = {0x00 : "raw",0x01 : "NEC"}
  4.  
  5.  
  6. class IRma_Hdr(Packet):
  7. name = "IRma Header"
  8. fields_desc = [
  9. ByteEnumField("opcode", None, {0x00 : "reset",
  10. 0x01 : "freq",
  11. 0x02 : "send",
  12. 0x03 : "recv"}),
  13. ByteEnumField("resp", None, {0x00 : "request",0x01 : "response"}),
  14. ShortField("param_size", None)
  15. ]
  16. def post_build(self, p, pay):
  17. if self.param_size is None:
  18. self.param_size = len(pay)
  19. p = p[:2] + struct.pack('>h',self.param_size)
  20. return p+pay
  21.  
  22. class IRma_Reset(Packet):
  23. name = "IRma Reset Packet"
  24.  
  25. class IRma_Freq(Packet):
  26. name = "IRma Frequency Packet"
  27. fields_desc = [ IntField("freq", None) ]
  28.  
  29. class IRma_Send(Packet):
  30. name = "IRma Send Packet"
  31. fields_desc = [ ByteEnumField("proto", None, proto_list),
  32. FieldLenField("data_size", None, length_of="data"),
  33. StrLenField("data", None,length_from = lambda pkt:pkt.data_size)]
  34.  
  35. class IRma_Recv(Packet):
  36. name = "IRma Receive Packet"
  37. fields_desc = [ FieldLenField("raw_size",None,length_of = "raw"),
  38. StrLenField("raw", None, length_from = lambda pkt:pkt.raw_size),
  39. ByteEnumField("proto", None, proto_list),
  40. FieldLenField("code_size",None,length_of = "code"),
  41. StrLenField("code", None, length_from = lambda pkt:pkt.code_size)]
  42.  
  43.  
  44. bind_layers(IRma_Hdr, IRma_Reset, opcode=0x00)
  45. bind_layers(IRma_Hdr, IRma_Freq, opcode=0x01)
  46. bind_layers(IRma_Hdr, IRma_Send, opcode=0x02)
  47. bind_layers(IRma_Hdr, IRma_Recv, opcode=0x03)
  48.  
  49. IRma_Hdr("\x00\x00\x00\x00\x00\x00\x00").show()
  50. print("================================================================")
  51. IRma_Hdr("\x01\x01\x00\x48").show()
  52. print("================================================================")
  53. IRma_Hdr("\x02\x01\x00\x48\x01\x00\x02\x41\x42\x43").show()
  54. print("================================================================")
  55. IRma_Hdr("\x02\x01\x00\x48\x01\x00\x02\x41\x42\x43").show()
  56. print("================================================================")
  57. IRma_Hdr("\x03\x01\x00\x48\x00\x02\x45\x44\x00\x00\x01\x03").show()
  58.  
  59. print "==============TEST BUILD=============="
  60. print "P1, request Reset"
  61. p1 = (IRma_Hdr(resp="request")/IRma_Reset())
  62. p1.show()
  63. print (str(p1).encode('hex')) + '\n'
  64.  
  65. print "------------------------"
  66.  
  67. print "P2, response Freq"
  68. p2 = (IRma_Hdr(resp="response")/IRma_Freq(freq=0xaabbccdd))
  69. p2.show()
  70. print (str(p2).encode('hex')) + '\n'
  71.  
  72. print "------------------------"
  73.  
  74. print "P3, response Send"
  75. p3 = (IRma_Hdr(resp="response")/IRma_Send(proto="NEC", data = "AB"))
  76. p3.show()
  77. print (str(p3).encode('hex')) + '\n'
  78.  
  79. print "------------------------"
  80.  
  81. print "P4, request Recv"
  82. p4 = (IRma_Hdr(resp="request")/IRma_Recv(raw="ED", code = '\x03'))
  83. p4.show()
  84. print (str(p4).encode('hex')) + '\n'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement