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,361 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IPv6 - Internet Protocol version 6
3
+ ========================================
4
+
5
+ .. module:: pcapkit.protocols.internet.ipv6
6
+
7
+ :mod:`pcapkit.protocols.internet.ipv6` contains
8
+ :class:`~pcapkit.protocols.internet.ipv6.IPv6` only,
9
+ which implements extractor for Internet Protocol
10
+ version 6 (IPv6) [*]_, whose structure is described
11
+ as below:
12
+
13
+ ======= ========= ===================== =======================================
14
+ Octets Bits Name Description
15
+ ======= ========= ===================== =======================================
16
+ 0 0 ``ip.version`` Version (``6``)
17
+ 0 4 ``ip.class`` Traffic Class
18
+ 1 12 ``ip.label`` Flow Label
19
+ 4 32 ``ip.payload`` Payload Length (header excludes)
20
+ 6 48 ``ip.next`` Next Header
21
+ 7 56 ``ip.limit`` Hop Limit
22
+ 8 64 ``ip.src`` Source Address
23
+ 24 192 ``ip.dst`` Destination Address
24
+ ======= ========= ===================== =======================================
25
+
26
+ .. [*] https://en.wikipedia.org/wiki/IPv6_packet
27
+
28
+ """
29
+ import ipaddress
30
+ from typing import TYPE_CHECKING
31
+
32
+ from pcapkit.const.ipv6.extension_header import ExtensionHeader as Enum_ExtensionHeader
33
+ from pcapkit.const.reg.transtype import TransType as Enum_TransType
34
+ from pcapkit.corekit.multidict import OrderedMultiDict
35
+ from pcapkit.corekit.protochain import ProtoChain
36
+ from pcapkit.protocols.data.internet.ipv6 import IPv6 as Data_IPv6
37
+ from pcapkit.protocols.internet.ip import IP
38
+ from pcapkit.protocols.schema.internet.ipv6 import IPv6 as Schema_IPv6
39
+
40
+ if TYPE_CHECKING:
41
+ from enum import IntEnum as StdlibEnum
42
+ from ipaddress import IPv6Address
43
+ from typing import Any, Optional, Type
44
+
45
+ from aenum import IntEnum as AenumEnum
46
+ from typing_extensions import Literal
47
+
48
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
49
+ from pcapkit.protocols.schema.schema import Schema
50
+
51
+ __all__ = ['IPv6']
52
+
53
+
54
+ class IPv6(IP[Data_IPv6, Schema_IPv6],
55
+ schema=Schema_IPv6, data=Data_IPv6):
56
+ """This class implements Internet Protocol version 6."""
57
+
58
+ ##########################################################################
59
+ # Properties.
60
+ ##########################################################################
61
+
62
+ @property
63
+ def name(self) -> 'Literal["Internet Protocol version 6"]':
64
+ """Name of corresponding protocol."""
65
+ return 'Internet Protocol version 6'
66
+
67
+ @property
68
+ def length(self) -> 'Literal[40]':
69
+ """Header length of corresponding protocol."""
70
+ return 40
71
+
72
+ @property
73
+ def protocol(self) -> 'Enum_TransType':
74
+ """Name of next layer protocol."""
75
+ return self._info.protocol
76
+
77
+ # source IP address
78
+ @property
79
+ def src(self) -> 'IPv6Address':
80
+ """Source IP address."""
81
+ return self._info.src
82
+
83
+ # destination IP address
84
+ @property
85
+ def dst(self) -> 'IPv6Address':
86
+ """Destination IP address."""
87
+ return self._info.dst
88
+
89
+ @property
90
+ def extension_headers(self) -> 'OrderedMultiDict[Enum_ExtensionHeader, Protocol]':
91
+ """IPv6 extension header records."""
92
+ return self._exthdr
93
+
94
+ ##########################################################################
95
+ # Methods.
96
+ ##########################################################################
97
+
98
+ def read(self, length: 'Optional[int]' = None, *,
99
+ __packet__: 'Optional[dict[str, Any]]' = None, **kwargs: 'Any') -> 'Data_IPv6': # pylint: disable=unused-argument
100
+ """Read Internet Protocol version 6 (IPv6).
101
+
102
+ Structure of IPv6 header [:rfc:`2460`]:
103
+
104
+ .. code-block:: text
105
+
106
+ 0 1 2 3
107
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
108
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
109
+ |Version| Traffic Class | Flow Label |
110
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
111
+ | Payload Length | Next Header | Hop Limit |
112
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
113
+ | |
114
+ + +
115
+ | |
116
+ + Source Address +
117
+ | |
118
+ + +
119
+ | |
120
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
121
+ | |
122
+ + +
123
+ | |
124
+ + Destination Address +
125
+ | |
126
+ + +
127
+ | |
128
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
129
+
130
+ Args:
131
+ length: Length of packet data.
132
+ __packet__: Optional packet data.
133
+ **kwargs: Arbitrary keyword arguments.
134
+
135
+ Returns:
136
+ Parsed packet data.
137
+
138
+ """
139
+ if length is None:
140
+ length = len(self)
141
+ schema = self.__header__
142
+
143
+ ipv6 = Data_IPv6.from_dict({
144
+ 'version': schema.hextet['version'],
145
+ 'class': schema.hextet['class'],
146
+ 'label': schema.hextet['label'],
147
+ 'payload': schema.length,
148
+ 'next': schema.next,
149
+ 'limit': schema.limit,
150
+ 'src': schema.src,
151
+ 'dst': schema.dst,
152
+ }) # type: Data_IPv6
153
+
154
+ # update packet info
155
+ if __packet__ is None:
156
+ __packet__ = {}
157
+ __packet__.update({
158
+ 'src': ipv6.src,
159
+ 'dst': ipv6.dst,
160
+ })
161
+
162
+ return self._decode_next_layer(ipv6, schema.next, ipv6.payload, packet=__packet__) # pylint: disable=no-member
163
+
164
+ def make(self,
165
+ traffic_class: 'int' = 0,
166
+ flow_label: 'int' = 0,
167
+ next: 'Enum_TransType | StdlibEnum | AenumEnum | str | int' = Enum_TransType.UDP,
168
+ next_default: 'Optional[int]' = None,
169
+ next_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
170
+ next_reversed: 'bool' = False,
171
+ hop_limit: 'int' = 64, # reasonable default
172
+ src: 'IPv6Address | str | bytes | int' = '::1',
173
+ dst: 'IPv6Address | str | bytes | int' = '::',
174
+ payload: 'bytes | Protocol | Schema' = b'',
175
+ **kwargs: 'Any') -> 'Schema_IPv6':
176
+ """Make (construct) packet data.
177
+
178
+ Args:
179
+ traffic_class: Traffic class.
180
+ flow_label: Flow label.
181
+ next: Next header.
182
+ next_default: Default value of next header.
183
+ next_namespace: Namespace of next header.
184
+ next_reversed: Whether to reverse the namespace of next header.
185
+ hop_limit: Hop limit.
186
+ src: Source IP address.
187
+ dst: Destination IP address.
188
+ payload: Payload data.
189
+ **kwargs: Arbitrary keyword arguments.
190
+
191
+ Returns:
192
+ Constructed packet data.
193
+
194
+ """
195
+ next_val = self._make_index(next, next_default, namespace=next_namespace,
196
+ reversed=next_reversed, pack=False)
197
+
198
+ return Schema_IPv6(
199
+ hextet={
200
+ 'version': 6,
201
+ 'class': traffic_class,
202
+ 'label': flow_label,
203
+ },
204
+ length=len(payload),
205
+ next=next_val, # type: ignore[arg-type]
206
+ limit=hop_limit,
207
+ src=src,
208
+ dst=dst,
209
+ payload=payload,
210
+ )
211
+
212
+ @classmethod
213
+ def id(cls) -> 'tuple[Literal["IPv6"]]': # type: ignore[override]
214
+ """Index ID of the protocol.
215
+
216
+ Returns:
217
+ Index ID of the protocol.
218
+
219
+ """
220
+ return ('IPv6',)
221
+
222
+ ##########################################################################
223
+ # Data models.
224
+ ##########################################################################
225
+
226
+ def __length_hint__(self) -> 'Literal[40]':
227
+ """Return an estimated length for the object."""
228
+ return 40
229
+
230
+ @classmethod
231
+ def __index__(cls) -> 'Enum_TransType': # pylint: disable=invalid-index-returned
232
+ """Numeral registry index of the protocol.
233
+
234
+ Returns:
235
+ Numeral registry index of the protocol in `IANA`_.
236
+
237
+ .. _IANA: https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
238
+
239
+ """
240
+ return Enum_TransType.IPv6 # type: ignore[return-value]
241
+
242
+ ##########################################################################
243
+ # Utilities.
244
+ ##########################################################################
245
+
246
+ @classmethod
247
+ def _make_data(cls, data: 'Data_IPv6') -> 'dict[str, Any]': # type: ignore[override]
248
+ """Create key-value pairs from ``data`` for protocol construction.
249
+
250
+ Args:
251
+ data: protocol data
252
+
253
+ Returns:
254
+ Key-value pairs for protocol construction.
255
+
256
+ """
257
+ return {
258
+ 'traffic_class': data['class'],
259
+ 'flow_label': data.label,
260
+ 'next': data.next,
261
+ 'hop_limit': data.limit,
262
+ 'src': data.src,
263
+ 'dst': data.dst,
264
+ 'payload': cls._make_payload(data)
265
+ }
266
+
267
+ def _read_ip_hextet(self) -> 'tuple[int, int, int]':
268
+ """Read first four hextets of IPv6.
269
+
270
+ Returns:
271
+ Parsed hextets data, including version number, traffic class and
272
+ flow label.
273
+
274
+ """
275
+ _htet = self._read_fileng(4).hex()
276
+ _vers = int(_htet[0], base=16) # version number (6)
277
+ _tcls = int(_htet[0:2], base=16) # traffic class
278
+ _flow = int(_htet[2:], base=16) # flow label
279
+
280
+ return (_vers, _tcls, _flow)
281
+
282
+ def _read_ip_addr(self) -> 'IPv6Address':
283
+ """Read IP address.
284
+
285
+ Returns:
286
+ Parsed IP address.
287
+
288
+ """
289
+ return ipaddress.ip_address(self._read_fileng(16)) # type: ignore[return-value]
290
+
291
+ def _decode_next_layer(self, ipv6: 'Data_IPv6', proto: 'Optional[int]' = None, # type: ignore[override] # pylint: disable=arguments-differ,arguments-renamed
292
+ length: 'Optional[int]' = None, *, packet: 'Optional[dict[str, Any]]' = None) -> 'Data_IPv6': # pylint: disable=arguments-differ
293
+ """Decode next layer extractor.
294
+
295
+ Arguments:
296
+ ipv6: info buffer
297
+ proto: next layer protocol name
298
+ length: valid (*not padding*) length
299
+ packet: packet info (passed from :meth:`self.unpack <pcapkit.protocols.protocol.Protocol.unpack>`)
300
+
301
+ Returns:
302
+ Current protocol with next layer extracted.
303
+
304
+ """
305
+ #: Extension headers.
306
+ self._exthdr = OrderedMultiDict() # type: OrderedMultiDict[Enum_ExtensionHeader, Protocol] # pylint: disable=attribute-defined-outside-init
307
+
308
+ hdr_len = self.length # header length
309
+ raw_len = ipv6.payload # payload length
310
+ _protos = [] # ProtoChain buffer
311
+
312
+ # traverse if next header is an extensive header
313
+ while True:
314
+ try:
315
+ ex_proto = Enum_ExtensionHeader(proto)
316
+ except ValueError:
317
+ break
318
+
319
+ # # directly break when No Next Header occurs
320
+ # if proto.name == 'IPv6-NoNxt':
321
+ # proto = None
322
+ # break
323
+
324
+ # make protocol name
325
+ next_ = self._import_next_layer(proto, packet=packet, version=6, extension=True) # type: ignore[misc,call-arg,arg-type]
326
+ info = next_.info
327
+ name = next_.alias.lstrip('IPv6-').lower()
328
+ ipv6.__update__({
329
+ name: info,
330
+ })
331
+
332
+ # record protocol name
333
+ # self._protos = ProtoChain(name, chain, alias)
334
+ _protos.append(next_)
335
+ proto = info.next
336
+
337
+ # update header & payload length
338
+ hdr_len += next_.length # type: ignore[assignment]
339
+ raw_len -= next_.length
340
+
341
+ # keep record of extension headers
342
+ self._exthdr.add(ex_proto, next_)
343
+
344
+ # keep original data after fragment header
345
+ if ex_proto == Enum_ExtensionHeader.IPv6_Frag:
346
+ ipv6.__update__({
347
+ 'fragment': self._read_packet(header=hdr_len, payload=raw_len),
348
+ })
349
+ break
350
+
351
+ # record real header & payload length (headers exclude)
352
+ ipv6.__update__({
353
+ 'hdr_len': hdr_len,
354
+ 'raw_len': raw_len,
355
+
356
+ # update next header
357
+ 'protocol': proto,
358
+ })
359
+
360
+ ipv6_exthdr = ProtoChain.from_list(_protos) # type: ignore[arg-type]
361
+ return super()._decode_next_layer(ipv6, proto, raw_len, packet=packet, ipv6_exthdr=ipv6_exthdr)
@@ -0,0 +1,258 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IPv6-Frag - Fragment Header for IPv6
3
+ ==========================================
4
+
5
+ .. module:: pcapkit.protocols.internet.ipv6_frag
6
+
7
+ :mod:`pcapkit.protocols.internet.ipv6_frag` contains
8
+ :class:`~pcapkit.protocols.internet.ipv6_frag.IPv6_Frag`
9
+ only, which implements extractor for Fragment Header for
10
+ IPv6 (IPv6-Frag) [*]_, whose structure is described as
11
+ below:
12
+
13
+ ======= ========= ==================== =======================
14
+ Octets Bits Name Description
15
+ ======= ========= ==================== =======================
16
+ 0 0 ``frag.next`` Next Header
17
+ 1 8 Reserved
18
+ 2 16 ``frag.offset`` Fragment Offset
19
+ 3 29 Reserved
20
+ 3 31 ``frag.mf`` More Flag
21
+ 4 32 ``frag.id`` Identification
22
+ ======= ========= ==================== =======================
23
+
24
+ .. [*] https://en.wikipedia.org/wiki/IPv6_packet#Fragment
25
+
26
+ """
27
+ from typing import TYPE_CHECKING, overload
28
+
29
+ from pcapkit.const.reg.transtype import TransType as Enum_TransType
30
+ from pcapkit.protocols.data.internet.ipv6_frag import IPv6_Frag as Data_IPv6_Frag
31
+ from pcapkit.protocols.internet.internet import Internet
32
+ from pcapkit.protocols.schema.internet.ipv6_frag import IPv6_Frag as Schema_IPv6_Frag
33
+ from pcapkit.utilities.exceptions import UnsupportedCall
34
+
35
+ if TYPE_CHECKING:
36
+ from enum import IntEnum as StdlibEnum
37
+ from typing import IO, Any, NoReturn, Optional, Type
38
+
39
+ from aenum import IntEnum as AenumEnum
40
+ from typing_extensions import Literal
41
+
42
+ from pcapkit.corekit.protochain import ProtoChain
43
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
44
+ from pcapkit.protocols.schema.schema import Schema
45
+
46
+ __all__ = ['IPv6_Frag']
47
+
48
+
49
+ class IPv6_Frag(Internet[Data_IPv6_Frag, Schema_IPv6_Frag],
50
+ schema=Schema_IPv6_Frag, data=Data_IPv6_Frag):
51
+ """This class implements Fragment Header for IPv6."""
52
+
53
+ ##########################################################################
54
+ # Properties.
55
+ ##########################################################################
56
+
57
+ @property
58
+ def name(self) -> 'Literal["Fragment Header for IPv6"]':
59
+ """Name of current protocol."""
60
+ return 'Fragment Header for IPv6'
61
+
62
+ @property
63
+ def alias(self) -> 'Literal["IPv6-Frag"]':
64
+ """Acronym of corresponding protocol."""
65
+ return 'IPv6-Frag'
66
+
67
+ @property
68
+ def length(self) -> 'Literal[8]':
69
+ """Header length of current protocol."""
70
+ return 8
71
+
72
+ @property
73
+ def payload(self) -> 'Protocol | NoReturn':
74
+ """Payload of current instance.
75
+
76
+ Raises:
77
+ UnsupportedCall: if the protocol is used as an IPv6 extension header
78
+
79
+ """
80
+ if self._extf:
81
+ raise UnsupportedCall(f"'{self.__class__.__name__}' object has no attribute 'payload'")
82
+ return self._next
83
+
84
+ @property
85
+ def protocol(self) -> 'Optional[str] | NoReturn':
86
+ """Name of next layer protocol (if any).
87
+
88
+ Raises:
89
+ UnsupportedCall: if the protocol is used as an IPv6 extension header
90
+
91
+ """
92
+ if self._extf:
93
+ raise UnsupportedCall(f"'{self.__class__.__name__}' object has no attribute 'protocol'")
94
+ return super().protocol
95
+
96
+ @property
97
+ def protochain(self) -> 'ProtoChain | NoReturn':
98
+ """Protocol chain of current instance.
99
+
100
+ Raises:
101
+ UnsupportedCall: if the protocol is used as an IPv6 extension header
102
+
103
+ """
104
+ if self._extf:
105
+ raise UnsupportedCall(f"'{self.__class__.__name__}' object has no attribute 'protochain'")
106
+ return super().protochain
107
+
108
+ ##########################################################################
109
+ # Methods.
110
+ ##########################################################################
111
+
112
+ def read(self, length: 'Optional[int]' = None, *, extension: 'bool' = False, # pylint: disable=arguments-differ
113
+ **kwargs: 'Any') -> 'Data_IPv6_Frag': # pylint: disable=unused-argument
114
+ """Read Fragment Header for IPv6.
115
+
116
+ Structure of IPv6-Frag header [:rfc:`8200`]:
117
+
118
+ .. code-block:: text
119
+
120
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
121
+ | Next Header | Reserved | Fragment Offset |Res|M|
122
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
123
+ | Identification |
124
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
125
+
126
+ Args:
127
+ length: Length of packet data.
128
+ extension: If the packet is used as an IPv6 extension header.
129
+ **kwargs: Arbitrary keyword arguments.
130
+
131
+ Returns:
132
+ Parsed packet data.
133
+
134
+ """
135
+ if length is None:
136
+ length = len(self)
137
+ schema = self.__header__
138
+
139
+ ipv6_frag = Data_IPv6_Frag(
140
+ next=schema.next,
141
+ offset=schema.flags['offset'],
142
+ mf=bool(schema.flags['mf']),
143
+ id=schema.id,
144
+ )
145
+
146
+ if extension:
147
+ return ipv6_frag
148
+ return self._decode_next_layer(ipv6_frag, schema.next, length - self.length)
149
+
150
+ def make(self,
151
+ next: 'Enum_TransType | StdlibEnum | AenumEnum | str | int' = Enum_TransType.UDP,
152
+ next_default: 'Optional[int]' = None,
153
+ next_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
154
+ next_reversed: 'bool' = False,
155
+ offset: 'int' = 0,
156
+ mf: 'bool' = False,
157
+ id: 'int' = 0,
158
+ payload: 'bytes | Protocol | Schema' = b'',
159
+ **kwargs: 'Any') -> 'Schema_IPv6_Frag':
160
+ """Make (construct) packet data.
161
+
162
+ Args:
163
+ next: Next header.
164
+ next_default: Default value of next header.
165
+ next_namespace: Namespace of next header.
166
+ next_reversed: If the namespace of next header is reversed.
167
+ offset: Fragment offset.
168
+ mf: More fragments flag.
169
+ id: Identification.
170
+ payload: Payload of current instance.
171
+ **kwargs: Arbitrary keyword arguments.
172
+
173
+ Returns:
174
+ Constructed packet data.
175
+
176
+ """
177
+ next_val = self._make_index(next, next_default, namespace=next_namespace,
178
+ reversed=next_reversed, pack=False)
179
+
180
+ return Schema_IPv6_Frag(
181
+ next=next_val, # type: ignore[arg-type]
182
+ flags={
183
+ 'offset': offset,
184
+ 'mf': mf,
185
+ },
186
+ id=id,
187
+ payload=payload,
188
+ )
189
+
190
+ ##########################################################################
191
+ # Data models.
192
+ ##########################################################################
193
+
194
+ @overload
195
+ def __post_init__(self, file: 'IO[bytes] | bytes', length: 'Optional[int]' = ..., *, # pylint: disable=arguments-differ
196
+ extension: 'bool' = ..., **kwargs: 'Any') -> 'None': ...
197
+
198
+ @overload
199
+ def __post_init__(self, **kwargs: 'Any') -> 'None': ... # pylint: disable=arguments-differ
200
+
201
+ def __post_init__(self, file: 'Optional[IO[bytes] | bytes]' = None, length: 'Optional[int]' = None, *, # pylint: disable=arguments-differ
202
+ extension: 'bool' = False, **kwargs: 'Any') -> 'None':
203
+ """Post initialisation hook.
204
+
205
+ Args:
206
+ file: Source packet stream.
207
+ length: Length of packet data.
208
+ extension: If the protocol is used as an IPv6 extension header.
209
+ **kwargs: Arbitrary keyword arguments.
210
+
211
+ See Also:
212
+ For construction argument, please refer to :meth:`self.make <IPv6_Frag.make>`.
213
+
214
+ """
215
+ #: bool: If the protocol is used as an IPv6 extension header.
216
+ self._extf = extension
217
+
218
+ # call super __post_init__
219
+ super().__post_init__(file, length, extension=extension, **kwargs) # type: ignore[arg-type]
220
+
221
+ def __length_hint__(self) -> 'Literal[8]':
222
+ """Return an estimated length for the object."""
223
+ return 8
224
+
225
+ @classmethod
226
+ def __index__(cls) -> 'Enum_TransType': # pylint: disable=invalid-index-returned
227
+ """Numeral registry index of the protocol.
228
+
229
+ Returns:
230
+ Numeral registry index of the protocol in `IANA`_.
231
+
232
+ .. _IANA: https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
233
+
234
+ """
235
+ return Enum_TransType.IPv6_Frag # type: ignore[return-value]
236
+
237
+ ##########################################################################
238
+ # Utilities.
239
+ ##########################################################################
240
+
241
+ @classmethod
242
+ def _make_data(cls, data: 'Data_IPv6_Frag') -> 'dict[str, Any]': # type: ignore[override]
243
+ """Create key-value pairs from ``data`` for protocol construction.
244
+
245
+ Args:
246
+ data: protocol data
247
+
248
+ Returns:
249
+ Key-value pairs for protocol construction.
250
+
251
+ """
252
+ return {
253
+ 'next': data.next,
254
+ 'offset': data.offset,
255
+ 'mf': data.mf,
256
+ 'id': data.id,
257
+ 'payload': cls._make_payload(data),
258
+ }