pypcapkit 1.3.3.post1__cp313-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. pcapkit/__init__.py +126 -0
  2. pcapkit/__main__.py +138 -0
  3. pcapkit/all.py +136 -0
  4. pcapkit/const/__init__.py +81 -0
  5. pcapkit/const/arp/__init__.py +25 -0
  6. pcapkit/const/arp/hardware.py +181 -0
  7. pcapkit/const/arp/operation.py +131 -0
  8. pcapkit/const/ftp/__init__.py +25 -0
  9. pcapkit/const/ftp/command.py +309 -0
  10. pcapkit/const/ftp/return_code.py +304 -0
  11. pcapkit/const/hip/__init__.py +94 -0
  12. pcapkit/const/hip/certificate.py +77 -0
  13. pcapkit/const/hip/cipher.py +65 -0
  14. pcapkit/const/hip/di.py +59 -0
  15. pcapkit/const/hip/ecdsa_curve.py +59 -0
  16. pcapkit/const/hip/ecdsa_low_curve.py +56 -0
  17. pcapkit/const/hip/eddsa_curve.py +65 -0
  18. pcapkit/const/hip/esp_transform_suite.py +98 -0
  19. pcapkit/const/hip/group.py +86 -0
  20. pcapkit/const/hip/hi_algorithm.py +86 -0
  21. pcapkit/const/hip/hit_suite.py +68 -0
  22. pcapkit/const/hip/nat_traversal.py +62 -0
  23. pcapkit/const/hip/notify_message.py +200 -0
  24. pcapkit/const/hip/packet.py +89 -0
  25. pcapkit/const/hip/parameter.py +377 -0
  26. pcapkit/const/hip/registration.py +68 -0
  27. pcapkit/const/hip/registration_failure.py +84 -0
  28. pcapkit/const/hip/suite.py +71 -0
  29. pcapkit/const/hip/transport.py +59 -0
  30. pcapkit/const/http/__init__.py +39 -0
  31. pcapkit/const/http/error_code.py +95 -0
  32. pcapkit/const/http/frame.py +95 -0
  33. pcapkit/const/http/method.py +184 -0
  34. pcapkit/const/http/setting.py +96 -0
  35. pcapkit/const/http/status_code.py +294 -0
  36. pcapkit/const/ipv4/__init__.py +57 -0
  37. pcapkit/const/ipv4/classification_level.py +64 -0
  38. pcapkit/const/ipv4/option_class.py +55 -0
  39. pcapkit/const/ipv4/option_number.py +137 -0
  40. pcapkit/const/ipv4/protection_authority.py +63 -0
  41. pcapkit/const/ipv4/qs_function.py +51 -0
  42. pcapkit/const/ipv4/router_alert.py +251 -0
  43. pcapkit/const/ipv4/tos_del.py +51 -0
  44. pcapkit/const/ipv4/tos_ecn.py +55 -0
  45. pcapkit/const/ipv4/tos_pre.py +63 -0
  46. pcapkit/const/ipv4/tos_rel.py +51 -0
  47. pcapkit/const/ipv4/tos_thr.py +51 -0
  48. pcapkit/const/ipv4/ts_flag.py +53 -0
  49. pcapkit/const/ipv6/__init__.py +53 -0
  50. pcapkit/const/ipv6/extension_header.py +66 -0
  51. pcapkit/const/ipv6/option.py +137 -0
  52. pcapkit/const/ipv6/option_action.py +55 -0
  53. pcapkit/const/ipv6/qs_function.py +51 -0
  54. pcapkit/const/ipv6/router_alert.py +266 -0
  55. pcapkit/const/ipv6/routing.py +80 -0
  56. pcapkit/const/ipv6/seed_id.py +55 -0
  57. pcapkit/const/ipv6/smf_dpd_mode.py +51 -0
  58. pcapkit/const/ipv6/tagger_id.py +62 -0
  59. pcapkit/const/ipx/__init__.py +27 -0
  60. pcapkit/const/ipx/packet.py +72 -0
  61. pcapkit/const/ipx/socket.py +104 -0
  62. pcapkit/const/l2tp/__init__.py +21 -0
  63. pcapkit/const/l2tp/type.py +51 -0
  64. pcapkit/const/mh/__init__.py +204 -0
  65. pcapkit/const/mh/access_type.py +92 -0
  66. pcapkit/const/mh/ack_status_code.py +71 -0
  67. pcapkit/const/mh/ani_suboption.py +74 -0
  68. pcapkit/const/mh/auth_subtype.py +53 -0
  69. pcapkit/const/mh/binding_ack_flag.py +66 -0
  70. pcapkit/const/mh/binding_error.py +51 -0
  71. pcapkit/const/mh/binding_revocation.py +59 -0
  72. pcapkit/const/mh/binding_update_flag.py +81 -0
  73. pcapkit/const/mh/cga_extension.py +66 -0
  74. pcapkit/const/mh/cga_sec.py +57 -0
  75. pcapkit/const/mh/cga_type.py +68 -0
  76. pcapkit/const/mh/dhcp_support_mode.py +53 -0
  77. pcapkit/const/mh/dns_status_code.py +65 -0
  78. pcapkit/const/mh/dsmip6_tls_packet.py +62 -0
  79. pcapkit/const/mh/dsmipv6_home_address.py +74 -0
  80. pcapkit/const/mh/enumerating_algorithm.py +56 -0
  81. pcapkit/const/mh/fb_ack_status.py +62 -0
  82. pcapkit/const/mh/fb_action.py +71 -0
  83. pcapkit/const/mh/fb_indication_trigger.py +65 -0
  84. pcapkit/const/mh/fb_type.py +59 -0
  85. pcapkit/const/mh/flow_id_status.py +77 -0
  86. pcapkit/const/mh/flow_id_suboption.py +71 -0
  87. pcapkit/const/mh/handoff_type.py +71 -0
  88. pcapkit/const/mh/handover_ack_flag.py +54 -0
  89. pcapkit/const/mh/handover_ack_status.py +92 -0
  90. pcapkit/const/mh/handover_initiate_flag.py +57 -0
  91. pcapkit/const/mh/handover_initiate_status.py +62 -0
  92. pcapkit/const/mh/home_address_reply.py +71 -0
  93. pcapkit/const/mh/lla_code.py +63 -0
  94. pcapkit/const/mh/lma_mag_suboption.py +59 -0
  95. pcapkit/const/mh/mn_group_id.py +59 -0
  96. pcapkit/const/mh/mn_id_subtype.py +77 -0
  97. pcapkit/const/mh/operator_id.py +63 -0
  98. pcapkit/const/mh/option.py +260 -0
  99. pcapkit/const/mh/packet.py +119 -0
  100. pcapkit/const/mh/qos_attribute.py +89 -0
  101. pcapkit/const/mh/revocation_status_code.py +83 -0
  102. pcapkit/const/mh/revocation_trigger.py +86 -0
  103. pcapkit/const/mh/status_code.py +232 -0
  104. pcapkit/const/mh/traffic_selector.py +62 -0
  105. pcapkit/const/mh/upa_status.py +71 -0
  106. pcapkit/const/mh/upn_reason.py +80 -0
  107. pcapkit/const/ospf/__init__.py +27 -0
  108. pcapkit/const/ospf/authentication.py +65 -0
  109. pcapkit/const/ospf/packet.py +71 -0
  110. pcapkit/const/pcapng/__init__.py +51 -0
  111. pcapkit/const/pcapng/block_type.py +152 -0
  112. pcapkit/const/pcapng/filter_type.py +48 -0
  113. pcapkit/const/pcapng/hash_algorithm.py +59 -0
  114. pcapkit/const/pcapng/option_type.py +233 -0
  115. pcapkit/const/pcapng/record_type.py +57 -0
  116. pcapkit/const/pcapng/secrets_type.py +56 -0
  117. pcapkit/const/pcapng/verdict_type.py +53 -0
  118. pcapkit/const/reg/__init__.py +34 -0
  119. pcapkit/const/reg/apptype.py +32702 -0
  120. pcapkit/const/reg/ethertype.py +714 -0
  121. pcapkit/const/reg/linktype.py +902 -0
  122. pcapkit/const/reg/transtype.py +523 -0
  123. pcapkit/const/tcp/__init__.py +35 -0
  124. pcapkit/const/tcp/checksum.py +55 -0
  125. pcapkit/const/tcp/flags.py +73 -0
  126. pcapkit/const/tcp/mp_tcp_option.py +80 -0
  127. pcapkit/const/tcp/option.py +198 -0
  128. pcapkit/const/vlan/__init__.py +23 -0
  129. pcapkit/const/vlan/priority_level.py +71 -0
  130. pcapkit/corekit/__init__.py +59 -0
  131. pcapkit/corekit/fields/__init__.py +45 -0
  132. pcapkit/corekit/fields/collections.py +282 -0
  133. pcapkit/corekit/fields/field.py +269 -0
  134. pcapkit/corekit/fields/ipaddress.py +274 -0
  135. pcapkit/corekit/fields/misc.py +722 -0
  136. pcapkit/corekit/fields/numbers.py +375 -0
  137. pcapkit/corekit/fields/strings.py +245 -0
  138. pcapkit/corekit/infoclass.py +394 -0
  139. pcapkit/corekit/io.py +506 -0
  140. pcapkit/corekit/module.py +39 -0
  141. pcapkit/corekit/multidict.py +626 -0
  142. pcapkit/corekit/protochain.py +263 -0
  143. pcapkit/corekit/version.py +33 -0
  144. pcapkit/dumpkit/__init__.py +15 -0
  145. pcapkit/dumpkit/common.py +199 -0
  146. pcapkit/dumpkit/null.py +77 -0
  147. pcapkit/dumpkit/pcap.py +144 -0
  148. pcapkit/foundation/__init__.py +45 -0
  149. pcapkit/foundation/engines/__init__.py +36 -0
  150. pcapkit/foundation/engines/dpkt.py +230 -0
  151. pcapkit/foundation/engines/engine.py +194 -0
  152. pcapkit/foundation/engines/pcap.py +188 -0
  153. pcapkit/foundation/engines/pcapng.py +310 -0
  154. pcapkit/foundation/engines/pyshark.py +166 -0
  155. pcapkit/foundation/engines/scapy.py +161 -0
  156. pcapkit/foundation/extraction.py +915 -0
  157. pcapkit/foundation/reassembly/__init__.py +49 -0
  158. pcapkit/foundation/reassembly/data/__init__.py +48 -0
  159. pcapkit/foundation/reassembly/data/ip.py +117 -0
  160. pcapkit/foundation/reassembly/data/tcp.py +145 -0
  161. pcapkit/foundation/reassembly/ip.py +192 -0
  162. pcapkit/foundation/reassembly/ipv4.py +50 -0
  163. pcapkit/foundation/reassembly/ipv6.py +50 -0
  164. pcapkit/foundation/reassembly/reassembly.py +389 -0
  165. pcapkit/foundation/reassembly/tcp.py +249 -0
  166. pcapkit/foundation/registry/__init__.py +41 -0
  167. pcapkit/foundation/registry/foundation.py +327 -0
  168. pcapkit/foundation/registry/protocols.py +885 -0
  169. pcapkit/foundation/traceflow/__init__.py +44 -0
  170. pcapkit/foundation/traceflow/data/__init__.py +30 -0
  171. pcapkit/foundation/traceflow/data/tcp.py +105 -0
  172. pcapkit/foundation/traceflow/tcp.py +159 -0
  173. pcapkit/foundation/traceflow/traceflow.py +390 -0
  174. pcapkit/interface/__init__.py +22 -0
  175. pcapkit/interface/core.py +185 -0
  176. pcapkit/interface/misc.py +120 -0
  177. pcapkit/protocols/__init__.py +85 -0
  178. pcapkit/protocols/application/NotImplemented/bgp.py +0 -0
  179. pcapkit/protocols/application/NotImplemented/dhcp.py +0 -0
  180. pcapkit/protocols/application/NotImplemented/dhcpv6.py +0 -0
  181. pcapkit/protocols/application/NotImplemented/dns.py +0 -0
  182. pcapkit/protocols/application/NotImplemented/imap.py +0 -0
  183. pcapkit/protocols/application/NotImplemented/ldap.py +0 -0
  184. pcapkit/protocols/application/NotImplemented/mqtt.py +0 -0
  185. pcapkit/protocols/application/NotImplemented/nntp.py +0 -0
  186. pcapkit/protocols/application/NotImplemented/ntp.py +0 -0
  187. pcapkit/protocols/application/NotImplemented/onc_rpc.py +0 -0
  188. pcapkit/protocols/application/NotImplemented/pop.py +0 -0
  189. pcapkit/protocols/application/NotImplemented/rip.py +0 -0
  190. pcapkit/protocols/application/NotImplemented/rtp.py +0 -0
  191. pcapkit/protocols/application/NotImplemented/sip.py +0 -0
  192. pcapkit/protocols/application/NotImplemented/smtp.py +0 -0
  193. pcapkit/protocols/application/NotImplemented/snmp.py +0 -0
  194. pcapkit/protocols/application/NotImplemented/ssh.py +0 -0
  195. pcapkit/protocols/application/NotImplemented/telnet.py +0 -0
  196. pcapkit/protocols/application/NotImplemented/tls.py +0 -0
  197. pcapkit/protocols/application/NotImplemented/xmpp.py +0 -0
  198. pcapkit/protocols/application/__init__.py +34 -0
  199. pcapkit/protocols/application/application.py +114 -0
  200. pcapkit/protocols/application/ftp.py +206 -0
  201. pcapkit/protocols/application/http.py +176 -0
  202. pcapkit/protocols/application/httpv1.py +320 -0
  203. pcapkit/protocols/application/httpv2.py +1255 -0
  204. pcapkit/protocols/data/__init__.py +192 -0
  205. pcapkit/protocols/data/application/__init__.py +57 -0
  206. pcapkit/protocols/data/application/ftp.py +59 -0
  207. pcapkit/protocols/data/application/httpv1.py +79 -0
  208. pcapkit/protocols/data/application/httpv2.py +293 -0
  209. pcapkit/protocols/data/data.py +25 -0
  210. pcapkit/protocols/data/internet/__init__.py +298 -0
  211. pcapkit/protocols/data/internet/ah.py +31 -0
  212. pcapkit/protocols/data/internet/hip.py +804 -0
  213. pcapkit/protocols/data/internet/hopopt.py +351 -0
  214. pcapkit/protocols/data/internet/ipv4.py +369 -0
  215. pcapkit/protocols/data/internet/ipv6.py +67 -0
  216. pcapkit/protocols/data/internet/ipv6_frag.py +29 -0
  217. pcapkit/protocols/data/internet/ipv6_opts.py +368 -0
  218. pcapkit/protocols/data/internet/ipv6_route.py +86 -0
  219. pcapkit/protocols/data/internet/ipx.py +56 -0
  220. pcapkit/protocols/data/internet/mh.py +509 -0
  221. pcapkit/protocols/data/link/__init__.py +33 -0
  222. pcapkit/protocols/data/link/arp.py +74 -0
  223. pcapkit/protocols/data/link/ethernet.py +28 -0
  224. pcapkit/protocols/data/link/l2tp.py +63 -0
  225. pcapkit/protocols/data/link/ospf.py +58 -0
  226. pcapkit/protocols/data/link/vlan.py +42 -0
  227. pcapkit/protocols/data/misc/__init__.py +109 -0
  228. pcapkit/protocols/data/misc/null.py +18 -0
  229. pcapkit/protocols/data/misc/pcap/__init__.py +18 -0
  230. pcapkit/protocols/data/misc/pcap/frame.py +56 -0
  231. pcapkit/protocols/data/misc/pcap/header.py +53 -0
  232. pcapkit/protocols/data/misc/pcapng.py +925 -0
  233. pcapkit/protocols/data/misc/raw.py +25 -0
  234. pcapkit/protocols/data/protocol.py +32 -0
  235. pcapkit/protocols/data/transport/__init__.py +71 -0
  236. pcapkit/protocols/data/transport/tcp.py +555 -0
  237. pcapkit/protocols/data/transport/udp.py +29 -0
  238. pcapkit/protocols/internet/NotImplemented/ecn.py +0 -0
  239. pcapkit/protocols/internet/NotImplemented/esp.py +97 -0
  240. pcapkit/protocols/internet/NotImplemented/icmp.py +0 -0
  241. pcapkit/protocols/internet/NotImplemented/icmpv6.py +0 -0
  242. pcapkit/protocols/internet/NotImplemented/igmp.py +0 -0
  243. pcapkit/protocols/internet/NotImplemented/shim6.py +0 -0
  244. pcapkit/protocols/internet/__init__.py +43 -0
  245. pcapkit/protocols/internet/ah.py +275 -0
  246. pcapkit/protocols/internet/hip.py +4727 -0
  247. pcapkit/protocols/internet/hopopt.py +1879 -0
  248. pcapkit/protocols/internet/internet.py +240 -0
  249. pcapkit/protocols/internet/ip.py +51 -0
  250. pcapkit/protocols/internet/ipsec.py +50 -0
  251. pcapkit/protocols/internet/ipv4.py +1782 -0
  252. pcapkit/protocols/internet/ipv6.py +361 -0
  253. pcapkit/protocols/internet/ipv6_frag.py +258 -0
  254. pcapkit/protocols/internet/ipv6_opts.py +1890 -0
  255. pcapkit/protocols/internet/ipv6_route.py +710 -0
  256. pcapkit/protocols/internet/ipx.py +230 -0
  257. pcapkit/protocols/internet/mh.py +2764 -0
  258. pcapkit/protocols/link/NotImplemented/dsl.py +0 -0
  259. pcapkit/protocols/link/NotImplemented/eapol.py +1 -0
  260. pcapkit/protocols/link/NotImplemented/fddi.py +0 -0
  261. pcapkit/protocols/link/NotImplemented/isdn.py +0 -0
  262. pcapkit/protocols/link/NotImplemented/ndp.py +0 -0
  263. pcapkit/protocols/link/NotImplemented/ppp.py +0 -0
  264. pcapkit/protocols/link/__init__.py +35 -0
  265. pcapkit/protocols/link/arp.py +421 -0
  266. pcapkit/protocols/link/ethernet.py +248 -0
  267. pcapkit/protocols/link/l2tp.py +267 -0
  268. pcapkit/protocols/link/link.py +140 -0
  269. pcapkit/protocols/link/ospf.py +342 -0
  270. pcapkit/protocols/link/rarp.py +82 -0
  271. pcapkit/protocols/link/vlan.py +225 -0
  272. pcapkit/protocols/misc/__init__.py +37 -0
  273. pcapkit/protocols/misc/null.py +129 -0
  274. pcapkit/protocols/misc/pcap/__init__.py +17 -0
  275. pcapkit/protocols/misc/pcap/frame.py +478 -0
  276. pcapkit/protocols/misc/pcap/header.py +358 -0
  277. pcapkit/protocols/misc/pcapng.py +5520 -0
  278. pcapkit/protocols/misc/raw.py +180 -0
  279. pcapkit/protocols/protocol.py +1216 -0
  280. pcapkit/protocols/schema/__init__.py +140 -0
  281. pcapkit/protocols/schema/application/__init__.py +40 -0
  282. pcapkit/protocols/schema/application/ftp.py +21 -0
  283. pcapkit/protocols/schema/application/httpv1.py +21 -0
  284. pcapkit/protocols/schema/application/httpv2.py +384 -0
  285. pcapkit/protocols/schema/internet/__init__.py +294 -0
  286. pcapkit/protocols/schema/internet/ah.py +40 -0
  287. pcapkit/protocols/schema/internet/hip.py +1184 -0
  288. pcapkit/protocols/schema/internet/hopopt.py +679 -0
  289. pcapkit/protocols/schema/internet/ipv4.py +576 -0
  290. pcapkit/protocols/schema/internet/ipv6.py +63 -0
  291. pcapkit/protocols/schema/internet/ipv6_frag.py +48 -0
  292. pcapkit/protocols/schema/internet/ipv6_opts.py +680 -0
  293. pcapkit/protocols/schema/internet/ipv6_route.py +198 -0
  294. pcapkit/protocols/schema/internet/ipx.py +40 -0
  295. pcapkit/protocols/schema/internet/mh.py +718 -0
  296. pcapkit/protocols/schema/link/__init__.py +19 -0
  297. pcapkit/protocols/schema/link/arp.py +39 -0
  298. pcapkit/protocols/schema/link/ethernet.py +51 -0
  299. pcapkit/protocols/schema/link/l2tp.py +88 -0
  300. pcapkit/protocols/schema/link/ospf.py +90 -0
  301. pcapkit/protocols/schema/link/vlan.py +69 -0
  302. pcapkit/protocols/schema/misc/__init__.py +108 -0
  303. pcapkit/protocols/schema/misc/null.py +18 -0
  304. pcapkit/protocols/schema/misc/pcap/__init__.py +10 -0
  305. pcapkit/protocols/schema/misc/pcap/frame.py +51 -0
  306. pcapkit/protocols/schema/misc/pcap/header.py +63 -0
  307. pcapkit/protocols/schema/misc/pcapng.py +1689 -0
  308. pcapkit/protocols/schema/misc/raw.py +24 -0
  309. pcapkit/protocols/schema/schema.py +809 -0
  310. pcapkit/protocols/schema/transport/__init__.py +69 -0
  311. pcapkit/protocols/schema/transport/tcp.py +928 -0
  312. pcapkit/protocols/schema/transport/udp.py +90 -0
  313. pcapkit/protocols/transport/NotImplemented/dccp.py +0 -0
  314. pcapkit/protocols/transport/NotImplemented/rsvp.py +0 -0
  315. pcapkit/protocols/transport/NotImplemented/sctp.py +0 -0
  316. pcapkit/protocols/transport/__init__.py +27 -0
  317. pcapkit/protocols/transport/tcp.py +3025 -0
  318. pcapkit/protocols/transport/transport.py +158 -0
  319. pcapkit/protocols/transport/udp.py +214 -0
  320. pcapkit/py.typed +0 -0
  321. pcapkit/toolkit/__init__.py +57 -0
  322. pcapkit/toolkit/dpkt.py +306 -0
  323. pcapkit/toolkit/pcap.py +212 -0
  324. pcapkit/toolkit/pcapng.py +251 -0
  325. pcapkit/toolkit/pyshark.py +99 -0
  326. pcapkit/toolkit/scapy.py +297 -0
  327. pcapkit/utilities/__init__.py +20 -0
  328. pcapkit/utilities/compat.py +196 -0
  329. pcapkit/utilities/decorators.py +192 -0
  330. pcapkit/utilities/exceptions.py +365 -0
  331. pcapkit/utilities/logging.py +55 -0
  332. pcapkit/utilities/warnings.py +185 -0
  333. pcapkit/vendor/__init__.py +105 -0
  334. pcapkit/vendor/__main__.py +92 -0
  335. pcapkit/vendor/arp/__init__.py +27 -0
  336. pcapkit/vendor/arp/hardware.py +29 -0
  337. pcapkit/vendor/arp/operation.py +29 -0
  338. pcapkit/vendor/default.py +474 -0
  339. pcapkit/vendor/ftp/__init__.py +27 -0
  340. pcapkit/vendor/ftp/command.py +244 -0
  341. pcapkit/vendor/ftp/return_code.py +256 -0
  342. pcapkit/vendor/hip/__init__.py +94 -0
  343. pcapkit/vendor/hip/certificate.py +29 -0
  344. pcapkit/vendor/hip/cipher.py +29 -0
  345. pcapkit/vendor/hip/di.py +29 -0
  346. pcapkit/vendor/hip/ecdsa_curve.py +29 -0
  347. pcapkit/vendor/hip/ecdsa_low_curve.py +29 -0
  348. pcapkit/vendor/hip/eddsa_curve.py +85 -0
  349. pcapkit/vendor/hip/esp_transform_suite.py +29 -0
  350. pcapkit/vendor/hip/group.py +87 -0
  351. pcapkit/vendor/hip/hi_algorithm.py +29 -0
  352. pcapkit/vendor/hip/hit_suite.py +29 -0
  353. pcapkit/vendor/hip/nat_traversal.py +29 -0
  354. pcapkit/vendor/hip/notify_message.py +29 -0
  355. pcapkit/vendor/hip/packet.py +88 -0
  356. pcapkit/vendor/hip/parameter.py +88 -0
  357. pcapkit/vendor/hip/registration.py +29 -0
  358. pcapkit/vendor/hip/registration_failure.py +29 -0
  359. pcapkit/vendor/hip/suite.py +29 -0
  360. pcapkit/vendor/hip/transport.py +29 -0
  361. pcapkit/vendor/http/__init__.py +39 -0
  362. pcapkit/vendor/http/error_code.py +95 -0
  363. pcapkit/vendor/http/frame.py +91 -0
  364. pcapkit/vendor/http/method.py +167 -0
  365. pcapkit/vendor/http/setting.py +93 -0
  366. pcapkit/vendor/http/status_code.py +185 -0
  367. pcapkit/vendor/ipv4/__init__.py +57 -0
  368. pcapkit/vendor/ipv4/classification_level.py +91 -0
  369. pcapkit/vendor/ipv4/option_class.py +80 -0
  370. pcapkit/vendor/ipv4/option_number.py +105 -0
  371. pcapkit/vendor/ipv4/protection_authority.py +84 -0
  372. pcapkit/vendor/ipv4/qs_function.py +78 -0
  373. pcapkit/vendor/ipv4/router_alert.py +93 -0
  374. pcapkit/vendor/ipv4/tos_del.py +78 -0
  375. pcapkit/vendor/ipv4/tos_ecn.py +95 -0
  376. pcapkit/vendor/ipv4/tos_pre.py +84 -0
  377. pcapkit/vendor/ipv4/tos_rel.py +78 -0
  378. pcapkit/vendor/ipv4/tos_thr.py +77 -0
  379. pcapkit/vendor/ipv4/ts_flag.py +79 -0
  380. pcapkit/vendor/ipv6/__init__.py +53 -0
  381. pcapkit/vendor/ipv6/extension_header.py +171 -0
  382. pcapkit/vendor/ipv6/option.py +104 -0
  383. pcapkit/vendor/ipv6/option_action.py +90 -0
  384. pcapkit/vendor/ipv6/qs_function.py +78 -0
  385. pcapkit/vendor/ipv6/router_alert.py +93 -0
  386. pcapkit/vendor/ipv6/routing.py +87 -0
  387. pcapkit/vendor/ipv6/seed_id.py +81 -0
  388. pcapkit/vendor/ipv6/smf_dpd_mode.py +78 -0
  389. pcapkit/vendor/ipv6/tagger_id.py +81 -0
  390. pcapkit/vendor/ipx/__init__.py +37 -0
  391. pcapkit/vendor/ipx/packet.py +123 -0
  392. pcapkit/vendor/ipx/socket.py +125 -0
  393. pcapkit/vendor/l2tp/__init__.py +21 -0
  394. pcapkit/vendor/l2tp/type.py +78 -0
  395. pcapkit/vendor/mh/__init__.py +204 -0
  396. pcapkit/vendor/mh/access_type.py +87 -0
  397. pcapkit/vendor/mh/ack_status_code.py +88 -0
  398. pcapkit/vendor/mh/ani_suboption.py +88 -0
  399. pcapkit/vendor/mh/auth_subtype.py +83 -0
  400. pcapkit/vendor/mh/binding_ack_flag.py +148 -0
  401. pcapkit/vendor/mh/binding_error.py +78 -0
  402. pcapkit/vendor/mh/binding_revocation.py +87 -0
  403. pcapkit/vendor/mh/binding_update_flag.py +147 -0
  404. pcapkit/vendor/mh/cga_extension.py +91 -0
  405. pcapkit/vendor/mh/cga_sec.py +91 -0
  406. pcapkit/vendor/mh/cga_type.py +74 -0
  407. pcapkit/vendor/mh/dhcp_support_mode.py +77 -0
  408. pcapkit/vendor/mh/dns_status_code.py +87 -0
  409. pcapkit/vendor/mh/dsmip6_tls_packet.py +87 -0
  410. pcapkit/vendor/mh/dsmipv6_home_address.py +87 -0
  411. pcapkit/vendor/mh/enumerating_algorithm.py +82 -0
  412. pcapkit/vendor/mh/fb_ack_status.py +87 -0
  413. pcapkit/vendor/mh/fb_action.py +88 -0
  414. pcapkit/vendor/mh/fb_indication_trigger.py +87 -0
  415. pcapkit/vendor/mh/fb_type.py +88 -0
  416. pcapkit/vendor/mh/flow_id_status.py +87 -0
  417. pcapkit/vendor/mh/flow_id_suboption.py +87 -0
  418. pcapkit/vendor/mh/handoff_type.py +87 -0
  419. pcapkit/vendor/mh/handover_ack_flag.py +143 -0
  420. pcapkit/vendor/mh/handover_ack_status.py +87 -0
  421. pcapkit/vendor/mh/handover_initiate_flag.py +143 -0
  422. pcapkit/vendor/mh/handover_initiate_status.py +87 -0
  423. pcapkit/vendor/mh/home_address_reply.py +87 -0
  424. pcapkit/vendor/mh/lla_code.py +97 -0
  425. pcapkit/vendor/mh/lma_mag_suboption.py +88 -0
  426. pcapkit/vendor/mh/mn_group_id.py +87 -0
  427. pcapkit/vendor/mh/mn_id_subtype.py +87 -0
  428. pcapkit/vendor/mh/operator_id.py +87 -0
  429. pcapkit/vendor/mh/option.py +83 -0
  430. pcapkit/vendor/mh/packet.py +82 -0
  431. pcapkit/vendor/mh/qos_attribute.py +87 -0
  432. pcapkit/vendor/mh/revocation_status_code.py +87 -0
  433. pcapkit/vendor/mh/revocation_trigger.py +87 -0
  434. pcapkit/vendor/mh/status_code.py +91 -0
  435. pcapkit/vendor/mh/traffic_selector.py +87 -0
  436. pcapkit/vendor/mh/upa_status.py +87 -0
  437. pcapkit/vendor/mh/upn_reason.py +87 -0
  438. pcapkit/vendor/ospf/__init__.py +27 -0
  439. pcapkit/vendor/ospf/authentication.py +29 -0
  440. pcapkit/vendor/ospf/packet.py +29 -0
  441. pcapkit/vendor/pcapng/__init__.py +51 -0
  442. pcapkit/vendor/pcapng/block_type.py +94 -0
  443. pcapkit/vendor/pcapng/filter_type.py +77 -0
  444. pcapkit/vendor/pcapng/hash_algorithm.py +82 -0
  445. pcapkit/vendor/pcapng/option_type.py +287 -0
  446. pcapkit/vendor/pcapng/record_type.py +81 -0
  447. pcapkit/vendor/pcapng/secrets_type.py +81 -0
  448. pcapkit/vendor/pcapng/verdict_type.py +79 -0
  449. pcapkit/vendor/reg/__init__.py +34 -0
  450. pcapkit/vendor/reg/apptype.py +338 -0
  451. pcapkit/vendor/reg/ethertype.py +121 -0
  452. pcapkit/vendor/reg/linktype.py +110 -0
  453. pcapkit/vendor/reg/transtype.py +111 -0
  454. pcapkit/vendor/tcp/__init__.py +35 -0
  455. pcapkit/vendor/tcp/checksum.py +80 -0
  456. pcapkit/vendor/tcp/flags.py +149 -0
  457. pcapkit/vendor/tcp/mp_tcp_option.py +90 -0
  458. pcapkit/vendor/tcp/option.py +103 -0
  459. pcapkit/vendor/vlan/__init__.py +23 -0
  460. pcapkit/vendor/vlan/priority_level.py +97 -0
  461. pypcapkit-1.3.3.post1.dist-info/LICENSE +29 -0
  462. pypcapkit-1.3.3.post1.dist-info/METADATA +236 -0
  463. pypcapkit-1.3.3.post1.dist-info/RECORD +466 -0
  464. pypcapkit-1.3.3.post1.dist-info/WHEEL +5 -0
  465. pypcapkit-1.3.3.post1.dist-info/entry_points.txt +3 -0
  466. pypcapkit-1.3.3.post1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,718 @@
1
+ # -*- coding: utf-8 -*-
2
+ # mypy: disable-error-code=assignment
3
+ """header schema for mobility header"""
4
+
5
+ import datetime
6
+ import math
7
+ from typing import TYPE_CHECKING
8
+
9
+ from pcapkit.const.mh.access_type import AccessType as Enum_AccessType
10
+ from pcapkit.const.mh.ack_status_code import ACKStatusCode as Enum_ACKStatusCode
11
+ from pcapkit.const.mh.ani_suboption import ANISuboption as Enum_ANISuboption
12
+ from pcapkit.const.mh.auth_subtype import AuthSubtype as Enum_AuthSubtype
13
+ from pcapkit.const.mh.binding_ack_flag import BindingACKFlag as Enum_BindingACKFlag
14
+ from pcapkit.const.mh.binding_error import BindingError as Enum_BindingError
15
+ from pcapkit.const.mh.binding_revocation import BindingRevocation as Enum_BindingRevocation
16
+ from pcapkit.const.mh.binding_update_flag import BindingUpdateFlag as Enum_BindingUpdateFlag
17
+ from pcapkit.const.mh.cga_extension import CGAExtension as Enum_CGAExtension
18
+ from pcapkit.const.mh.cga_type import CGAType as Enum_CGAType
19
+ from pcapkit.const.mh.dhcp_support_mode import DHCPSupportMode as Enum_DHCPSupportMode
20
+ from pcapkit.const.mh.dns_status_code import DNSStatusCode as Enum_DNSStatusCode
21
+ from pcapkit.const.mh.dsmip6_tls_packet import DSMIP6TLSPacket as Enum_DSMIP6TLSPacket
22
+ from pcapkit.const.mh.dsmipv6_home_address import DSMIPv6HomeAddress as Enum_DSMIPv6HomeAddress
23
+ from pcapkit.const.mh.enumerating_algorithm import EnumeratingAlgorithm as Enum_EnumeratingAlgorithm
24
+ from pcapkit.const.mh.fb_ack_status import FlowBindingACKStatus as Enum_FlowBindingACKStatus
25
+ from pcapkit.const.mh.fb_action import FlowBindingAction as Enum_FlowBindingAction
26
+ from pcapkit.const.mh.fb_indication_trigger import \
27
+ FlowBindingIndicationTrigger as Enum_FlowBindingIndicationTrigger
28
+ from pcapkit.const.mh.fb_type import FlowBindingType as Enum_FlowBindingType
29
+ from pcapkit.const.mh.flow_id_status import FlowIDStatus as Enum_FlowIDStatus
30
+ from pcapkit.const.mh.flow_id_suboption import FlowIDSuboption as Enum_FlowIDSuboption
31
+ from pcapkit.const.mh.handoff_type import HandoffType as Enum_HandoffType
32
+ from pcapkit.const.mh.handover_ack_flag import HandoverACKFlag as Enum_HandoverACKFlag
33
+ from pcapkit.const.mh.handover_ack_status import HandoverACKStatus as Enum_HandoverACKStatus
34
+ from pcapkit.const.mh.handover_initiate_flag import \
35
+ HandoverInitiateFlag as Enum_HandoverInitiateFlag
36
+ from pcapkit.const.mh.home_address_reply import HomeAddressReply as Enum_HomeAddressReply
37
+ from pcapkit.const.mh.lla_code import LLACode as Enum_LLACode
38
+ from pcapkit.const.mh.lma_mag_suboption import \
39
+ LMAControlledMAGSuboption as Enum_LMAControlledMAGSuboption
40
+ from pcapkit.const.mh.mn_group_id import MNGroupID as Enum_MNGroupID
41
+ from pcapkit.const.mh.mn_id_subtype import MNIDSubtype as Enum_MNIDSubtype
42
+ from pcapkit.const.mh.operator_id import OperatorID as Enum_OperatorID
43
+ from pcapkit.const.mh.option import Option as Enum_Option
44
+ from pcapkit.const.mh.packet import Packet as Enum_Packet
45
+ from pcapkit.const.mh.qos_attribute import QoSAttribute as Enum_QoSAttribute
46
+ from pcapkit.const.mh.revocation_status_code import \
47
+ RevocationStatusCode as Enum_RevocationStatusCode
48
+ from pcapkit.const.mh.revocation_trigger import RevocationTrigger as Enum_RevocationTrigger
49
+ from pcapkit.const.mh.status_code import StatusCode as Enum_StatusCode
50
+ from pcapkit.const.mh.traffic_selector import TrafficSelector as Enum_TrafficSelector
51
+ from pcapkit.const.mh.upa_status import \
52
+ UpdateNotificationACKStatus as Enum_UpdateNotificationACKStatus
53
+ from pcapkit.const.mh.upn_reason import UpdateNotificationReason as Enum_UpdateNotificationReason
54
+ from pcapkit.const.reg.transtype import TransType as Enum_TransType
55
+ from pcapkit.corekit.fields.collections import ListField, OptionField
56
+ from pcapkit.corekit.fields.ipaddress import IPv6AddressField
57
+ from pcapkit.corekit.fields.misc import (ConditionalField, ForwardMatchField, PayloadField,
58
+ SchemaField, SwitchField)
59
+ from pcapkit.corekit.fields.numbers import (EnumField, UInt8Field, UInt16Field, UInt32Field,
60
+ UInt64Field)
61
+ from pcapkit.corekit.fields.strings import BitField, BytesField, PaddingField, StringField
62
+ from pcapkit.protocols.schema.schema import EnumSchema, Schema, schema_final
63
+ from pcapkit.utilities.logging import SPHINX_TYPE_CHECKING
64
+
65
+ __all__ = [
66
+ 'MH',
67
+
68
+ 'Packet',
69
+ 'UnknownMessage', 'BindingRefreshRequestMessage', 'HomeTestInitMessage', 'CareofTestInitMessage',
70
+ 'HomeTestMessage', 'CareofTestMessage', 'BindingUpdateMessage', 'BindingAcknowledgementMessage',
71
+ 'BindingErrorMessage',
72
+
73
+ 'Option',
74
+ 'UnassignedOption', 'PadOption', 'BindingRefreshAdviceOption', 'AlternateCareofAddressOption',
75
+ 'NonceIndicesOption', 'AuthorizationDataOption', 'MobileNetworkPrefixOption',
76
+ 'LinkLayerAddressOption', 'MNIDOption', 'AuthOption', 'MesgIDOption', 'CGAParametersRequestOption',
77
+ 'CGAParametersOption', 'SignatureOption', 'PermanentHomeKeygenTokenOption', 'CareofTestInitOption',
78
+ 'CareofTestOption',
79
+
80
+ 'CGAParameter',
81
+
82
+ 'CGAExtension',
83
+ 'UnknownExtension', 'MultiPrefixExtension',
84
+ ]
85
+
86
+ if TYPE_CHECKING:
87
+ from datetime import datetime as dt_type
88
+ from ipaddress import IPv6Address
89
+ from typing import Any
90
+
91
+ from pcapkit.corekit.fields.field import FieldBase as Field
92
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
93
+
94
+ if SPHINX_TYPE_CHECKING:
95
+ from typing_extensions import TypedDict
96
+
97
+ class ANSIKeyLengthTest(TypedDict):
98
+ """Length test for ANSI.1 encoded data, c.f.,
99
+ :attr:`CGAParameter.public_key_test`."""
100
+
101
+ len: int
102
+
103
+ class MultiPrefixExtensionFlags(TypedDict):
104
+ """Flags for :attr:`MultiPrefixExtension.flags`."""
105
+
106
+ P: int
107
+
108
+ class BindingUpdateMessageFlags(TypedDict):
109
+ """Flags for :attr:`BindingUpdateMessage.flags`."""
110
+
111
+ A: 'int'
112
+ H: 'int'
113
+ L: 'int'
114
+ K: 'int'
115
+
116
+ class BindingAcknowledgementMessageFlags(TypedDict):
117
+ """Flags for :attr:`BindingAcknowledgementMessage.flags`."""
118
+
119
+ K: 'int'
120
+
121
+
122
+ def mh_data_selector(pkt: 'dict[str, Any]') -> 'Field':
123
+ """Selector function for :attr:`MH.data` field.
124
+
125
+ Args:
126
+ pkt: Packet data.
127
+
128
+ Returns:
129
+ Returns a :class:`~pcapkit.corekit.fields.misc.SchemaField`
130
+ wrapped :class:`~pcapkit.protocols.schema.internet.mh.Packet`
131
+ subclass instance.
132
+
133
+ """
134
+ type = pkt['type'] # type: Enum_Packet
135
+ length = pkt['length'] * 8 + 2
136
+ schema = Packet.registry[type]
137
+ return SchemaField(length=length, schema=schema)
138
+
139
+
140
+ def mn_id_selector(pkt: 'dict[str, Any]') -> 'Field':
141
+ """Selector function for :attr:`MNIDOption.identifier` field.
142
+
143
+ Args:
144
+ pkt: Packet data.
145
+
146
+ Returns:
147
+ Returns a :class:`~pcapkit.corekit.fields.field.Field` instance
148
+ corresponding to the subtype.
149
+
150
+ """
151
+ subtype = pkt['subtype'] # type: Enum_MNIDSubtype
152
+ if subtype == Enum_MNIDSubtype.NAI:
153
+ return StringField(length=pkt['length'] - 1)
154
+ if subtype == Enum_MNIDSubtype.IPv6_Address:
155
+ return IPv6AddressField()
156
+ return BytesField(length=pkt['length'] - 1)
157
+
158
+
159
+ @schema_final
160
+ class MH(Schema):
161
+ """Header schema for MH packets."""
162
+
163
+ #: Next header.
164
+ next: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
165
+ #: Header length.
166
+ length: 'int' = UInt8Field()
167
+ #: MH type.
168
+ type: 'Enum_Packet' = EnumField(length=1, namespace=Enum_Packet)
169
+ #: Reserved.
170
+ reserved: 'bytes' = PaddingField(length=1)
171
+ #: Checksum.
172
+ chksum: 'bytes' = BytesField(length=2)
173
+ #: Message data.
174
+ data: 'Packet' = SwitchField(selector=mh_data_selector)
175
+ #: Payload.
176
+ payload: 'bytes' = PayloadField()
177
+
178
+ if TYPE_CHECKING:
179
+ def __init__(self, next: 'Enum_TransType | int', length: 'int', type: 'Enum_Packet | int',
180
+ chksum: 'bytes', data: 'Packet | bytes', payload: 'bytes | Protocol | Schema') -> 'None': ...
181
+
182
+
183
+ class Option(EnumSchema[Enum_Option]):
184
+ """Header schema for MH options."""
185
+
186
+ __default__ = lambda: UnassignedOption
187
+
188
+ #: Option type.
189
+ type: 'Enum_Option' = EnumField(length=1, namespace=Enum_Option)
190
+ #: Option length (excl. type and length fields), conditional in case of
191
+ #: ``Pad1`` option.
192
+ length: 'int' = ConditionalField(
193
+ UInt8Field(default=0),
194
+ lambda pkt: pkt['type'] != Enum_Option.Pad1,
195
+ )
196
+
197
+ def post_process(self, packet: 'dict[str, Any]') -> 'Option':
198
+ """Revise ``schema`` data after unpacking process.
199
+
200
+ Args:
201
+ packet: Unpacked data.
202
+
203
+ Returns:
204
+ Revised schema.
205
+
206
+ """
207
+ # for Pad1 option, length is always 1
208
+ if self.type == Enum_Option.pad1:
209
+ self.length = 0
210
+ return self
211
+
212
+
213
+ @schema_final
214
+ class UnassignedOption(Option):
215
+ """Header schema for unassigned MH options."""
216
+
217
+ #: Option data.
218
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
219
+
220
+ if TYPE_CHECKING:
221
+ def __init__(self, type: 'Enum_Option', length: 'int', data: 'bytes') -> 'None': ...
222
+
223
+
224
+ @schema_final
225
+ class PadOption(Option, code=[Enum_Option.Pad1,
226
+ Enum_Option.PadN]):
227
+ """Header schema for MH padding options."""
228
+
229
+ #: Option data.
230
+ data: 'bytes' = PaddingField(length=lambda pkt: pkt.get('length', 0))
231
+
232
+ if TYPE_CHECKING:
233
+ def __init__(self, type: 'Enum_Option', length: 'int') -> 'None': ...
234
+
235
+
236
+ @schema_final
237
+ class BindingRefreshAdviceOption(Option, code=Enum_Option.Binding_Refresh_Advice):
238
+ """Header schema for MH binding refresh advice options."""
239
+
240
+ #: Refresh interval.
241
+ interval: 'int' = UInt16Field()
242
+
243
+ if TYPE_CHECKING:
244
+ def __init__(self, type: 'Enum_Option', length: 'int', interval: 'int') -> 'None': ...
245
+
246
+
247
+ @schema_final
248
+ class AlternateCareofAddressOption(Option, code=Enum_Option.Alternate_Care_of_Address):
249
+ """Header schema for MH alternate care-of address options."""
250
+
251
+ #: Alternate care-of address.
252
+ address: 'IPv6Address' = IPv6AddressField()
253
+
254
+ if TYPE_CHECKING:
255
+ def __init__(self, type: 'Enum_Option', length: 'int', address: 'IPv6Address | str | bytes | int') -> 'None': ...
256
+
257
+
258
+ @schema_final
259
+ class NonceIndicesOption(Option, code=Enum_Option.Nonce_Indices):
260
+ """Header schema for MH nonce indices options."""
261
+
262
+ #: Home nonce index.
263
+ home: 'int' = UInt16Field()
264
+ #: Care-of nonce index.
265
+ careof: 'int' = UInt16Field()
266
+
267
+ if TYPE_CHECKING:
268
+ def __init__(self, type: 'Enum_Option', length: 'int', home: 'int', careof: 'int') -> 'None': ...
269
+
270
+
271
+ @schema_final
272
+ class AuthorizationDataOption(Option, code=Enum_Option.Authorization_Data):
273
+ """Header schema for MH binding authorization data options."""
274
+
275
+ #: Authenticator.
276
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
277
+
278
+ if TYPE_CHECKING:
279
+ def __init__(self, type: 'Enum_Option', length: 'int', data: 'bytes') -> 'None': ...
280
+
281
+
282
+ @schema_final
283
+ class MobileNetworkPrefixOption(Option, code=Enum_Option.Mobile_Network_Prefix_Option):
284
+ """Header schema for MH mobile network prefix options."""
285
+
286
+ #: Reserved.
287
+ reserved: 'bytes' = PaddingField(length=1)
288
+ #: Prefix length.
289
+ prefix_length: 'int' = UInt8Field()
290
+ #: Mobile network prefix.
291
+ prefix: 'IPv6Address' = IPv6AddressField()
292
+
293
+ if TYPE_CHECKING:
294
+ def __init__(self, type: 'Enum_Option', length: 'int', prefix_length: 'int', prefix: 'IPv6Address | int | bytes | str') -> 'None': ...
295
+
296
+
297
+ @schema_final
298
+ class LinkLayerAddressOption(Option, code=Enum_Option.Mobility_Header_Link_Layer_Address_option):
299
+ """Header schema for MH link-layer address (MH-LLA) options."""
300
+
301
+ #: Option code.
302
+ code: 'Enum_LLACode' = EnumField(length=1, namespace=Enum_LLACode)
303
+ #: Link-layer address (LAA).
304
+ lla: 'bytes' = BytesField(length=lambda pkt: pkt['length'] - 1)
305
+
306
+ if TYPE_CHECKING:
307
+ def __init__(self, type: 'Enum_Option', length: 'int', code: 'Enum_LLACode', lla: 'bytes') -> 'None': ...
308
+
309
+
310
+ @schema_final
311
+ class MNIDOption(Option, code=Enum_Option.MN_ID_OPTION_TYPE):
312
+ """Header schema for MH mobile node identifier (MNID) options."""
313
+
314
+ #: Subtype.
315
+ subtype: 'Enum_MNIDSubtype' = EnumField(length=1, namespace=Enum_MNIDSubtype)
316
+ #: Identifier.
317
+ identifier: 'bytes | str | IPv6Address' = SwitchField(selector=mn_id_selector)
318
+
319
+ if TYPE_CHECKING:
320
+ def __init__(self, type: 'Enum_Option', length: 'int', subtype: 'Enum_MNIDSubtype', identifier: 'bytes | str | IPv6Address | int') -> 'None': ...
321
+
322
+
323
+ @schema_final
324
+ class AuthOption(Option, code=Enum_Option.AUTH_OPTION_TYPE):
325
+ """Header schema for Mobility Message Authentication options."""
326
+
327
+ #: Subtype.
328
+ subtype: 'Enum_AuthSubtype' = EnumField(length=1, namespace=Enum_AuthSubtype)
329
+ #: Mobility SPI.
330
+ spi: 'int' = UInt32Field()
331
+ #: Authentication data.
332
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['length'] - 5)
333
+
334
+ if TYPE_CHECKING:
335
+ def __init__(self, type: 'Enum_Option', length: 'int', subtype: 'Enum_AuthSubtype', spi: 'int', data: 'bytes') -> 'None': ...
336
+
337
+
338
+ @schema_final
339
+ class MesgIDOption(Option, code=Enum_Option.MESG_ID_OPTION_TYPE):
340
+ """Header schema for Mobility Message Replay Protection options."""
341
+
342
+ #: Timestamp (seconds since January 1st, 1970, c.f., :rfc:`1305`).
343
+ seconds: 'int' = UInt32Field()
344
+ #: Timestamp fractions (1/2**32 seconds per unit, c.f., :rfc:`1305`).
345
+ fraction: 'int' = UInt32Field()
346
+
347
+ def post_process(self, packet: 'dict[str, Any]') -> 'MesgIDOption':
348
+ """Revise ``schema`` data after unpacking process.
349
+
350
+ Args:
351
+ packet: Unpacked data.
352
+
353
+ Returns:
354
+ Revised schema.
355
+
356
+ """
357
+ self = super().post_process(packet)
358
+
359
+ # convert timestamp to datetime
360
+ # c.f., http://tickelton.gitlab.io/articles/ntp-timestamps/
361
+ ts_sec = self.seconds - 2_208_988_800 # 70 years
362
+ ts_usec = math.floor(self.fraction / 2**32)
363
+
364
+ self.timestamp = datetime.datetime.fromtimestamp(ts_sec + ts_usec, tz=datetime.timezone.utc)
365
+
366
+ return self
367
+
368
+ if TYPE_CHECKING:
369
+ #: Timestamp interval (since UNIX-epoch).
370
+ timestamp: 'dt_type'
371
+
372
+ def __init__(self, type: 'Enum_Option', length: 'int', seconds: 'int', fraction: 'int') -> 'None': ...
373
+
374
+
375
+ @schema_final
376
+ class CGAParametersRequestOption(Option, code=Enum_Option.CGA_Parameters_Request):
377
+ """Header schema for CGA Parameters Request options."""
378
+
379
+ if TYPE_CHECKING:
380
+ def __init__(self, type: 'Enum_Option', length: 'int') -> 'None': ...
381
+
382
+
383
+ class CGAExtension(EnumSchema[Enum_CGAExtension]):
384
+ """Header schema for CGA extensions."""
385
+
386
+ __default__ = lambda: UnknownExtension
387
+
388
+ #: Extension type.
389
+ type: 'Enum_CGAExtension' = EnumField(length=2, namespace=Enum_CGAExtension)
390
+ #: Extension data length.
391
+ length: 'int' = UInt16Field()
392
+
393
+
394
+ @schema_final
395
+ class UnknownExtension(CGAExtension):
396
+ """Header schema for unknown CGA extensions."""
397
+
398
+ #: Extension data.
399
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
400
+
401
+ if TYPE_CHECKING:
402
+ def __init__(self, type: 'Enum_CGAExtension', length: 'int', data: 'bytes') -> 'None': ...
403
+
404
+
405
+ @schema_final
406
+ class MultiPrefixExtension(CGAExtension, code=Enum_CGAExtension.Multi_Prefix):
407
+ """Header schema for Multi-Prefix CGA extensions."""
408
+
409
+ #: Flags.
410
+ flags: 'MultiPrefixExtensionFlags' = BitField(length=4, namespace={
411
+ 'P': (0, 1),
412
+ })
413
+ #: Prefixes.
414
+ prefixes: 'list[int]' = ListField(
415
+ length=lambda pkt: pkt['length'] - 4,
416
+ item_type=UInt64Field(),
417
+ )
418
+
419
+ if TYPE_CHECKING:
420
+ def __init__(self, type: 'Enum_CGAExtension', length: 'int', flags: 'MultiPrefixExtensionFlags', prefixes: 'list[int]') -> 'None': ...
421
+
422
+
423
+ @schema_final
424
+ class CGAParameter(Schema):
425
+ """Header schema for CGA Parameters."""
426
+
427
+ #: Modifier.
428
+ modifier: 'Enum_CGAType' = EnumField(length=16, namespace=Enum_CGAType)
429
+ #: Subnet prefix.
430
+ prefix: 'int' = UInt64Field()
431
+ #: Collision count.
432
+ collision_count: 'int' = UInt8Field()
433
+ #: Public key length test.
434
+ public_key_test: 'ANSIKeyLengthTest' = ForwardMatchField(BitField(length=2, namespace={
435
+ 'len': (8, 8),
436
+ }))
437
+ #: Public key (ASN.1 encoded).
438
+ public_key: 'bytes' = BytesField(length=lambda pkt: pkt['public_key_test']['len'] + 2) # 2 bytes for type & length
439
+ #: Extension fields.
440
+ extensions: 'list[CGAExtension]' = OptionField(
441
+ length=lambda pkt: pkt['length'] - 25 - len(pkt['public_key']),
442
+ base_schema=CGAExtension,
443
+ type_name='type',
444
+ registry=CGAExtension.registry,
445
+ eool=None,
446
+ )
447
+
448
+ if TYPE_CHECKING:
449
+ def __init__(self, modifier: 'Enum_CGAType', prefix: 'int', collision_count: 'int', public_key: 'bytes',
450
+ extensions: 'list[CGAExtension | bytes]') -> 'None': ...
451
+
452
+
453
+ @schema_final
454
+ class CGAParametersOption(Option, code=Enum_Option.CGA_Parameters):
455
+ """Header schema for CGA Parameters options."""
456
+
457
+ #: CGA parameters, c.f., :rfc:`3972`.
458
+ parameters: 'list[CGAParameter]' = ListField(
459
+ length=lambda pkt: pkt['length'],
460
+ item_type=SchemaField(schema=CGAParameter),
461
+ )
462
+
463
+ if TYPE_CHECKING:
464
+ def __init__(self, type: 'Enum_Option', length: 'int', parameters: 'list[CGAParameter | bytes]') -> 'None': ...
465
+
466
+
467
+ @schema_final
468
+ class SignatureOption(Option, code=Enum_Option.Signature):
469
+ """Header schema for MH Signature options."""
470
+
471
+ #: Signature.
472
+ signature: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
473
+
474
+ if TYPE_CHECKING:
475
+ def __init__(self, type: 'Enum_Option', length: 'int', signature: 'bytes') -> 'None': ...
476
+
477
+
478
+ @schema_final
479
+ class PermanentHomeKeygenTokenOption(Option, code=Enum_Option.Permanent_Home_Keygen_Token):
480
+ """Header schema for Permanent Home Keygen Token options."""
481
+
482
+ #: Permanent home keygen token.
483
+ token: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
484
+
485
+ if TYPE_CHECKING:
486
+ def __init__(self, type: 'Enum_Option', length: 'int', token: 'bytes') -> 'None': ...
487
+
488
+
489
+ @schema_final
490
+ class CareofTestInitOption(Option, code=Enum_Option.Care_of_Test_Init):
491
+ """Header schema for MH Care-of Test Init options."""
492
+
493
+ if TYPE_CHECKING:
494
+ def __init__(self, type: 'Enum_Option', length: 'int') -> 'None': ...
495
+
496
+
497
+ @schema_final
498
+ class CareofTestOption(Option, code=Enum_Option.Care_of_Test):
499
+ """Header schema for MH Care-of Test options."""
500
+
501
+ #: Care-of keygen token.
502
+ token: 'bytes' = BytesField(length=8)
503
+
504
+ if TYPE_CHECKING:
505
+ def __init__(self, type: 'Enum_Option', length: 'int', token: 'bytes') -> 'None': ...
506
+
507
+
508
+ # TODO: Implement other options.
509
+
510
+
511
+ class Packet(EnumSchema[Enum_Packet]):
512
+ """Header schema for MH packet data."""
513
+
514
+ __default__ = lambda: UnknownMessage
515
+
516
+
517
+ @schema_final
518
+ class UnknownMessage(Packet):
519
+ """Header schema for MH unknown message type."""
520
+
521
+ #: Message data.
522
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
523
+
524
+ if TYPE_CHECKING:
525
+ def __init__(self, data: 'bytes') -> 'None': ...
526
+
527
+
528
+ @schema_final
529
+ class BindingRefreshRequestMessage(Packet, code=Enum_Packet.Binding_Refresh_Request):
530
+ """Header schema for MH Binding Refresh Request (BRR) message."""
531
+
532
+ #: Reserved.
533
+ reserved: 'bytes' = PaddingField(length=2)
534
+ #: Mobility options.
535
+ options: 'list[Option]' = OptionField(
536
+ length=lambda pkt: pkt['__length__'],
537
+ base_schema=Option,
538
+ type_name='type',
539
+ registry=Option.registry,
540
+ eool=None,
541
+ )
542
+
543
+ if TYPE_CHECKING:
544
+ def __init__(self, options: 'list[Option | bytes]') -> 'None': ...
545
+
546
+
547
+ @schema_final
548
+ class HomeTestInitMessage(Packet, code=Enum_Packet.Home_Test_Init):
549
+ """Header schema for MH Home Test Init (HoTI) message."""
550
+
551
+ #: Reserved.
552
+ reserved: 'bytes' = PaddingField(length=2)
553
+ #: Home init cookie.
554
+ cookie: 'bytes' = BytesField(length=8)
555
+ #: Mobility options.
556
+ options: 'list[Option]' = OptionField(
557
+ length=lambda pkt: pkt['__length__'],
558
+ base_schema=Option,
559
+ type_name='type',
560
+ registry=Option.registry,
561
+ eool=None,
562
+ )
563
+
564
+ if TYPE_CHECKING:
565
+ def __init__(self, cookie: 'bytes', options: 'list[Option | bytes]') -> 'None': ...
566
+
567
+
568
+ @schema_final
569
+ class CareofTestInitMessage(Packet, code=Enum_Packet.Care_of_Test_Init):
570
+ """Header schema for MH Care-of Test Init (CoTI) messages."""
571
+
572
+ #: Reserved.
573
+ reserved: 'bytes' = PaddingField(length=2)
574
+ #: Care-of init cookie.
575
+ cookie: 'bytes' = BytesField(length=8)
576
+ #: Mobility options.
577
+ options: 'list[Option]' = OptionField(
578
+ length=lambda pkt: pkt['__length__'],
579
+ base_schema=Option,
580
+ type_name='type',
581
+ registry=Option.registry,
582
+ eool=None,
583
+ )
584
+
585
+ if TYPE_CHECKING:
586
+ def __init__(self, cookie: 'bytes', options: 'list[Option | bytes]') -> 'None': ...
587
+
588
+
589
+ @schema_final
590
+ class HomeTestMessage(Packet, code=Enum_Packet.Home_Test):
591
+ """Header schema for MH Home Test (HoT) message."""
592
+
593
+ #: Home nonce index.
594
+ nonce_index: 'int' = UInt16Field()
595
+ #: Home init cookie.
596
+ cookie: 'bytes' = BytesField(length=8)
597
+ #: Home keygen token.
598
+ token: 'bytes' = BytesField(length=8)
599
+ #: Mobility options.
600
+ options: 'list[Option]' = OptionField(
601
+ length=lambda pkt: pkt['__length__'],
602
+ base_schema=Option,
603
+ type_name='type',
604
+ registry=Option.registry,
605
+ eool=None,
606
+ )
607
+
608
+ if TYPE_CHECKING:
609
+ def __init__(self, nonce_index: 'int', cookie: 'bytes', token: 'bytes',
610
+ options: 'list[Option | bytes]') -> 'None': ...
611
+
612
+
613
+ @schema_final
614
+ class CareofTestMessage(Packet, code=Enum_Packet.Care_of_Test):
615
+ """Header schema for MH Care-of Test (CoT) message."""
616
+
617
+ #: Care-of nonce index.
618
+ nonce_index: 'int' = UInt16Field()
619
+ #: Care-of init cookie.
620
+ cookie: 'bytes' = BytesField(length=8)
621
+ #: Care-of keygen token.
622
+ token: 'bytes' = BytesField(length=8)
623
+ #: Mobility options.
624
+ options: 'list[Option]' = OptionField(
625
+ length=lambda pkt: pkt['__length__'],
626
+ base_schema=Option,
627
+ type_name='type',
628
+ registry=Option.registry,
629
+ eool=None,
630
+ )
631
+
632
+ if TYPE_CHECKING:
633
+ def __init__(self, nonce_index: 'int', cookie: 'bytes', token: 'bytes',
634
+ options: 'list[Option | bytes]') -> 'None': ...
635
+
636
+
637
+ @schema_final
638
+ class BindingUpdateMessage(Packet, code=Enum_Packet.Binding_Update):
639
+ """Header schema for MH Binding Update (BU) messages."""
640
+
641
+ #: Sequence number.
642
+ seq: 'int' = UInt16Field()
643
+ #: Flags.
644
+ flags: 'BindingUpdateMessageFlags' = BitField(length=2, namespace={
645
+ 'A': (0, 1),
646
+ 'H': (1, 1),
647
+ 'L': (2, 1),
648
+ 'K': (3, 1),
649
+ })
650
+ #: Lifetime. One time unit is 4 seconds.
651
+ lifetime: 'int' = UInt16Field()
652
+ #: Mobility options.
653
+ options: 'list[Option]' = OptionField(
654
+ length=lambda pkt: pkt['__length__'],
655
+ base_schema=Option,
656
+ type_name='type',
657
+ registry=Option.registry,
658
+ eool=None,
659
+ )
660
+
661
+ if TYPE_CHECKING:
662
+ def __init__(self, seq: 'int', flags: 'BindingUpdateMessageFlags',
663
+ lifetime: 'int', options: 'list[Option | bytes]') -> 'None': ...
664
+
665
+
666
+ @schema_final
667
+ class BindingAcknowledgementMessage(Packet, code=Enum_Packet.Binding_Acknowledgement):
668
+ """Header schema for MH Binding Acknowledgement (BA) messages."""
669
+
670
+ #: Status.
671
+ status: 'Enum_StatusCode' = EnumField(length=1, namespace=Enum_StatusCode)
672
+ #: Flags.
673
+ flags: 'BindingAcknowledgementMessageFlags' = BitField(length=1, namespace={
674
+ 'K': (0, 1),
675
+ })
676
+ #: Sequence number.
677
+ seq: 'int' = UInt16Field()
678
+ #: Lifetime. One time unit is 4 seconds.
679
+ lifetime: 'int' = UInt16Field()
680
+ #: Mobility options.
681
+ options: 'list[Option]' = OptionField(
682
+ length=lambda pkt: pkt['__length__'],
683
+ base_schema=Option,
684
+ type_name='type',
685
+ registry=Option.registry,
686
+ eool=None,
687
+ )
688
+
689
+ if TYPE_CHECKING:
690
+ def __init__(self, status: 'Enum_StatusCode', flags: 'BindingAcknowledgementMessageFlags',
691
+ seq: 'int', lifetime: 'int', options: 'list[Option | bytes]') -> 'None': ...
692
+
693
+
694
+ @schema_final
695
+ class BindingErrorMessage(Packet, code=Enum_Packet.Binding_Error):
696
+ """Header schema for MH Binding Error (BE) messages."""
697
+
698
+ #: Status.
699
+ status: 'Enum_BindingError' = EnumField(length=1, namespace=Enum_BindingError)
700
+ #: Reserved.
701
+ reserved: 'bytes' = PaddingField(length=1)
702
+ #: Home address.
703
+ home: 'IPv6Address' = IPv6AddressField()
704
+ #: Mobility options.
705
+ options: 'list[Option]' = OptionField(
706
+ length=lambda pkt: pkt['__length__'],
707
+ base_schema=Option,
708
+ type_name='type',
709
+ registry=Option.registry,
710
+ eool=None,
711
+ )
712
+
713
+ if TYPE_CHECKING:
714
+ def __init__(self, status: 'Enum_BindingError', home: 'IPv6Address | str | int | bytes',
715
+ options: 'list[Option | bytes]') -> 'None': ...
716
+
717
+
718
+ # TODO: Implement other message types.