Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from scapy.all import *
- proto_list = {0x00 : "raw",0x01 : "NEC"}
- class IRma_Hdr(Packet):
- name = "IRma Header"
- fields_desc = [
- ByteEnumField("opcode", None, {0x00 : "reset",
- 0x01 : "freq",
- 0x02 : "send",
- 0x03 : "recv"}),
- ByteEnumField("resp", None, {0x00 : "request",0x01 : "response"}),
- ShortField("param_size", None)
- ]
- def post_build(self, p, pay):
- if self.param_size is None:
- self.param_size = len(pay)
- p = p[:2] + struct.pack('>h',self.param_size)
- return p+pay
- class IRma_Reset(Packet):
- name = "IRma Reset Packet"
- class IRma_Freq(Packet):
- name = "IRma Frequency Packet"
- fields_desc = [ IntField("freq", None) ]
- class IRma_Send(Packet):
- name = "IRma Send Packet"
- fields_desc = [ ByteEnumField("proto", None, proto_list),
- FieldLenField("data_size", None, length_of="data"),
- StrLenField("data", None,length_from = lambda pkt:pkt.data_size)]
- class IRma_Recv(Packet):
- name = "IRma Receive Packet"
- fields_desc = [ FieldLenField("raw_size",None,length_of = "raw"),
- StrLenField("raw", None, length_from = lambda pkt:pkt.raw_size),
- ByteEnumField("proto", None, proto_list),
- FieldLenField("code_size",None,length_of = "code"),
- StrLenField("code", None, length_from = lambda pkt:pkt.code_size)]
- bind_layers(IRma_Hdr, IRma_Reset, opcode=0x00)
- bind_layers(IRma_Hdr, IRma_Freq, opcode=0x01)
- bind_layers(IRma_Hdr, IRma_Send, opcode=0x02)
- bind_layers(IRma_Hdr, IRma_Recv, opcode=0x03)
- IRma_Hdr("\x00\x00\x00\x00\x00\x00\x00").show()
- print("================================================================")
- IRma_Hdr("\x01\x01\x00\x48").show()
- print("================================================================")
- IRma_Hdr("\x02\x01\x00\x48\x01\x00\x02\x41\x42\x43").show()
- print("================================================================")
- IRma_Hdr("\x02\x01\x00\x48\x01\x00\x02\x41\x42\x43").show()
- print("================================================================")
- IRma_Hdr("\x03\x01\x00\x48\x00\x02\x45\x44\x00\x00\x01\x03").show()
- print "==============TEST BUILD=============="
- print "P1, request Reset"
- p1 = (IRma_Hdr(resp="request")/IRma_Reset())
- p1.show()
- print (str(p1).encode('hex')) + '\n'
- print "------------------------"
- print "P2, response Freq"
- p2 = (IRma_Hdr(resp="response")/IRma_Freq(freq=0xaabbccdd))
- p2.show()
- print (str(p2).encode('hex')) + '\n'
- print "------------------------"
- print "P3, response Send"
- p3 = (IRma_Hdr(resp="response")/IRma_Send(proto="NEC", data = "AB"))
- p3.show()
- print (str(p3).encode('hex')) + '\n'
- print "------------------------"
- print "P4, request Recv"
- p4 = (IRma_Hdr(resp="request")/IRma_Recv(raw="ED", code = '\x03'))
- p4.show()
- print (str(p4).encode('hex')) + '\n'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement