123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- layout = [
- ('ETH', [
- ('DST', 6),
- ('SRC', 6),
- ('TYPE', 2),
- [
- ('ARP', [
- ('SOMETHING', 6),
- ('OPCODE', 2),
- ('SRC_ETH', 6),
- ('SRC_IP', 4),
- ('DST_ETH', 6),
- ('DST_IP', 4) ]),
- ('IP', [
- ('VHLTOS', 2),
- ('LENGTH', 2),
- ('IPID', 2),
- ('IPOFFSET', 2),
- ('TTLPROTO', 2),
- ('CHKSUM', 2),
- ('SRCIP', 4),
- ('DSTIP', 4),
- [
- ('ICMP', [
- ('TYPECODE', 2),
- ('CHKSUM', 2),
- ('IDENTIFIER', 2),
- ('SEQUENCE', 2) ]),
- ('TCP', [
- ('SOURCEPORT', 2),
- ('DESTPORT', 2),
- ('SEQNUM', 4),
- ('ACK', 4),
- ('FLAGS', 2),
- ('WINDOW', 2),
- ('CHECKSUM', 2),
- ('URGENT', 2) ]),
- ('UDP', [
- ('SOURCEPORT', 2),
- ('DESTPORT', 2),
- ('LENGTH', 2),
- ('CHECKSUM', 2),
- [
- ('DHCP', [
- ('OP', 1),
- ('HTYPE', 1),
- ('HLEN', 1),
- ('HOPS', 1),
- ('XID', 4),
- ('SECS', 2),
- ('FLAGS', 2),
- ('CIADDR', 4),
- ('YIADDR', 4),
- ('SIADDR', 4),
- ('GIADDR', 4),
- ('CHADDR', 16),
- ('SNAME', 64),
- ('FILE', 128),
- ('OPTIONS', 312)
- ]),
- ('DNS', [
- ('IDENTIFICATION', 2),
- ('FLAGS', 2),
- ('NOQ', 2),
- ('NOA', 2),
- ('NORR', 2),
- ('NOARR', 2),
- ('QUERY', 1)
- ]),
- ('NTP', [
- ('FLAGS', 4),
- ('ROOTDELAY', 4),
- ('ROOTDISPERSION', 4),
- ('REFID', 4),
- ('REFERENCE', 8),
- ('ORIGINATE', 8),
- ('RECEIVE', 8),
- ('TRANSMIT', 8),
- ]),
- ('TFTP', [
- ('OPCODE', 2),
- [
- ('RWRQ', [
- ('FILENAME', 512)
- ]),
- ('DATA', [
- ('BLOCK', 2),
- ('DATA', 512)
- ]),
- ('ACK', [
- ('BLOCK', 2),
- ]),
- ('ERROR', [
- ('NUMBER', 2),
- ('MESSAGE', 512),
- ]),
- ]
- ]),
- ('LOADER', [
- ('SEQNO', 2),
- ('OPCODE', 2),
- [
- ('RAMREAD', [
- ('ADDR', 2)
- ]),
- ('RAMWRITE', [
- ('ADDR', 2),
- ('DATA', 128)
- ]),
- ('FLASHREAD', [
- ('ADDR', 4)
- ]),
- ('FLASHWRITE', [
- ('ADDR', 4),
- ('DATA', 128)
- ]),
- ]
- ]),
- ('WGE', [
- ('MAGIC', 4),
- ('TYPE', 4),
- ('HRT', 16),
- ('REPLYTO', [
- ('MAC', 8),
- ('IP', 4),
- ('PORT', 2),
- ]),
- ('PAD', 2),
- [
- ('DISCOVER', [
- ('IP', 4)
- ]),
- ('CONFIGURE', [
- ('PRODUCT', 4),
- ('SERIAL', 4),
- ('IP', 4)
- ]),
- ('FLASHREAD', [
- ('ADDRESS', 4)
- ]),
- ('FLASHWRITE', [
- ('ADDRESS', 4),
- ('DATA', 264),
- ]),
- ('TRIGCONTROL', [
- ('TRIGSTATE', 4),
- ]),
- ('SENSORREAD', [
- ('ADDRESS', 1),
- ]),
- ('SENSORWRITE', [
- ('ADDRESS', 1),
- ('DATA', 2),
- ]),
- ('SENSORSELECT', [
- ('INDEX', 1),
- ('ADDRESS', 4),
- ]),
- ('IMAGERMODE', [
- ('MODE', 4),
- ]),
- ('IMAGERSETRES', [
- ('HORIZONTAL', 2),
- ('VERTICAL', 2),
- ]),
- ('SYSCONFIG', [
- ('MAC', 6),
- ('SERIAL', 4),
- ]),
- ('VIDSTART', [
- ('MAC', 8),
- ('IP', 4),
- ('PORT', 2),
- ]),
- ]
- ]),
- ]
- ])
- ]
- ])
- ]])
- ]
- offsets = {}
- def descend(offset, prefix, node):
- start = offset
- if isinstance(node, list):
- for n in node:
- descend(offset, prefix, n)
- else:
- (name, members) = node
- offsets[".".join((prefix + [name]))] = offset
- if isinstance(members, int):
- offset += members
- else:
- for n in members:
- offset = descend(offset, prefix + [name], n)
- # offsets["%s%s_SIZE" % (prefix, name)] = offset - start
- return offset
- descend(0, [], layout[0])
- offsets['TCP_FIN'] = 1
- offsets['TCP_SYN'] = 2
- offsets['TCP_RST'] = 4
- offsets['TCP_PSH'] = 8
- offsets['TCP_ACK'] = 16
- offsets['TCP_URG'] = 32
- offsets['IP_PROTO_ICMP'] = 1
- offsets['IP_PROTO_IGMP'] = 2
- offsets['IP_PROTO_TCP'] = 6
- offsets['IP_PROTO_UDP'] = 17
- offsets['NUM_TCPS'] = 2
|