defines_tcpip2.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. layout = [
  2. ('ETH', [
  3. ('DST', 6),
  4. ('SRC', 6),
  5. ('TYPE', 2),
  6. [
  7. ('ARP', [
  8. ('SOMETHING', 6),
  9. ('OPCODE', 2),
  10. ('SRC_ETH', 6),
  11. ('SRC_IP', 4),
  12. ('DST_ETH', 6),
  13. ('DST_IP', 4) ]),
  14. ('IP', [
  15. ('VHLTOS', 2),
  16. ('LENGTH', 2),
  17. ('IPID', 2),
  18. ('IPOFFSET', 2),
  19. ('TTLPROTO', 2),
  20. ('CHKSUM', 2),
  21. ('SRCIP', 4),
  22. ('DSTIP', 4),
  23. [
  24. ('ICMP', [
  25. ('TYPECODE', 2),
  26. ('CHKSUM', 2),
  27. ('IDENTIFIER', 2),
  28. ('SEQUENCE', 2) ]),
  29. ('TCP', [
  30. ('SOURCEPORT', 2),
  31. ('DESTPORT', 2),
  32. ('SEQNUM', 4),
  33. ('ACK', 4),
  34. ('FLAGS', 2),
  35. ('WINDOW', 2),
  36. ('CHECKSUM', 2),
  37. ('URGENT', 2) ]),
  38. ('UDP', [
  39. ('SOURCEPORT', 2),
  40. ('DESTPORT', 2),
  41. ('LENGTH', 2),
  42. ('CHECKSUM', 2),
  43. [
  44. ('DHCP', [
  45. ('OP', 1),
  46. ('HTYPE', 1),
  47. ('HLEN', 1),
  48. ('HOPS', 1),
  49. ('XID', 4),
  50. ('SECS', 2),
  51. ('FLAGS', 2),
  52. ('CIADDR', 4),
  53. ('YIADDR', 4),
  54. ('SIADDR', 4),
  55. ('GIADDR', 4),
  56. ('CHADDR', 16),
  57. ('SNAME', 64),
  58. ('FILE', 128),
  59. ('OPTIONS', 312)
  60. ]),
  61. ('DNS', [
  62. ('IDENTIFICATION', 2),
  63. ('FLAGS', 2),
  64. ('NOQ', 2),
  65. ('NOA', 2),
  66. ('NORR', 2),
  67. ('NOARR', 2),
  68. ('QUERY', 1)
  69. ]),
  70. ('NTP', [
  71. ('FLAGS', 4),
  72. ('ROOTDELAY', 4),
  73. ('ROOTDISPERSION', 4),
  74. ('REFID', 4),
  75. ('REFERENCE', 8),
  76. ('ORIGINATE', 8),
  77. ('RECEIVE', 8),
  78. ('TRANSMIT', 8),
  79. ]),
  80. ('TFTP', [
  81. ('OPCODE', 2),
  82. [
  83. ('RWRQ', [
  84. ('FILENAME', 512)
  85. ]),
  86. ('DATA', [
  87. ('BLOCK', 2),
  88. ('DATA', 512)
  89. ]),
  90. ('ACK', [
  91. ('BLOCK', 2),
  92. ]),
  93. ('ERROR', [
  94. ('NUMBER', 2),
  95. ('MESSAGE', 512),
  96. ]),
  97. ]
  98. ]),
  99. ('LOADER', [
  100. ('SEQNO', 2),
  101. ('OPCODE', 2),
  102. [
  103. ('RAMREAD', [
  104. ('ADDR', 2)
  105. ]),
  106. ('RAMWRITE', [
  107. ('ADDR', 2),
  108. ('DATA', 128)
  109. ]),
  110. ('FLASHREAD', [
  111. ('ADDR', 4)
  112. ]),
  113. ('FLASHWRITE', [
  114. ('ADDR', 4),
  115. ('DATA', 128)
  116. ]),
  117. ]
  118. ]),
  119. ('WGE', [
  120. ('MAGIC', 4),
  121. ('TYPE', 4),
  122. ('HRT', 16),
  123. ('REPLYTO', [
  124. ('MAC', 8),
  125. ('IP', 4),
  126. ('PORT', 2),
  127. ]),
  128. ('PAD', 2),
  129. [
  130. ('DISCOVER', [
  131. ('IP', 4)
  132. ]),
  133. ('CONFIGURE', [
  134. ('PRODUCT', 4),
  135. ('SERIAL', 4),
  136. ('IP', 4)
  137. ]),
  138. ('FLASHREAD', [
  139. ('ADDRESS', 4)
  140. ]),
  141. ('FLASHWRITE', [
  142. ('ADDRESS', 4),
  143. ('DATA', 264),
  144. ]),
  145. ('TRIGCONTROL', [
  146. ('TRIGSTATE', 4),
  147. ]),
  148. ('SENSORREAD', [
  149. ('ADDRESS', 1),
  150. ]),
  151. ('SENSORWRITE', [
  152. ('ADDRESS', 1),
  153. ('DATA', 2),
  154. ]),
  155. ('SENSORSELECT', [
  156. ('INDEX', 1),
  157. ('ADDRESS', 4),
  158. ]),
  159. ('IMAGERMODE', [
  160. ('MODE', 4),
  161. ]),
  162. ('IMAGERSETRES', [
  163. ('HORIZONTAL', 2),
  164. ('VERTICAL', 2),
  165. ]),
  166. ('SYSCONFIG', [
  167. ('MAC', 6),
  168. ('SERIAL', 4),
  169. ]),
  170. ('VIDSTART', [
  171. ('MAC', 8),
  172. ('IP', 4),
  173. ('PORT', 2),
  174. ]),
  175. ]
  176. ]),
  177. ]
  178. ])
  179. ]
  180. ])
  181. ]])
  182. ]
  183. offsets = {}
  184. def descend(offset, prefix, node):
  185. start = offset
  186. if isinstance(node, list):
  187. for n in node:
  188. descend(offset, prefix, n)
  189. else:
  190. (name, members) = node
  191. offsets[".".join((prefix + [name]))] = offset
  192. if isinstance(members, int):
  193. offset += members
  194. else:
  195. for n in members:
  196. offset = descend(offset, prefix + [name], n)
  197. # offsets["%s%s_SIZE" % (prefix, name)] = offset - start
  198. return offset
  199. descend(0, [], layout[0])
  200. offsets['TCP_FIN'] = 1
  201. offsets['TCP_SYN'] = 2
  202. offsets['TCP_RST'] = 4
  203. offsets['TCP_PSH'] = 8
  204. offsets['TCP_ACK'] = 16
  205. offsets['TCP_URG'] = 32
  206. offsets['IP_PROTO_ICMP'] = 1
  207. offsets['IP_PROTO_IGMP'] = 2
  208. offsets['IP_PROTO_TCP'] = 6
  209. offsets['IP_PROTO_UDP'] = 17
  210. offsets['NUM_TCPS'] = 2