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,140 @@
1
+ # -*- coding: utf-8 -*-
2
+ # pylint: disable=unused-wildcard-import
3
+ """header schema for protocols"""
4
+
5
+ # Base Class for Header Schema
6
+ from pcapkit.protocols.schema.schema import *
7
+
8
+ # Link Layer Protocols
9
+ from pcapkit.protocols.schema.link import *
10
+
11
+ # Internet Layer Protocols
12
+ from pcapkit.protocols.schema.internet import *
13
+
14
+ # Transport Layer Protocols
15
+ from pcapkit.protocols.schema.transport import *
16
+
17
+ # Application Layer Protocols
18
+ from pcapkit.protocols.schema.application import *
19
+
20
+ # Utility Classes for Protocols
21
+ from pcapkit.protocols.schema.misc import *
22
+
23
+ __all__ = [
24
+ # Link Layer Protocols
25
+ 'ARP',
26
+ 'Ethernet',
27
+ 'L2TP',
28
+ 'OSPF', 'OSPF_CrytographicAuthentication',
29
+ 'VLAN', 'VLAN_TCI',
30
+
31
+ # Internet Layer Protocols
32
+ 'AH',
33
+ 'HIP',
34
+ 'HIP_LocatorData', 'HIP_Locator', 'HIP_ECDSACurveHostIdentity', 'HIP_ECDSALowCurveHostIdentity',
35
+ 'HIP_EdDSACurveHostIdentity', 'HIP_HostIdentity',
36
+ 'HIP_UnassignedParameter', 'HIP_ESPInfoParameter', 'HIP_R1CounterParameter',
37
+ 'HIP_LocatorSetParameter', 'HIP_PuzzleParameter', 'HIP_SolutionParameter',
38
+ 'HIP_SEQParameter', 'HIP_ACKParameter', 'HIP_DHGroupListParameter',
39
+ 'HIP_DiffieHellmanParameter', 'HIP_HIPTransformParameter', 'HIP_HIPCipherParameter',
40
+ 'HIP_NATTraversalModeParameter', 'HIP_TransactionPacingParameter', 'HIP_EncryptedParameter',
41
+ 'HIP_HostIDParameter', 'HIP_HITSuiteListParameter', 'HIP_CertParameter',
42
+ 'HIP_NotificationParameter', 'HIP_EchoRequestSignedParameter', 'HIP_RegInfoParameter',
43
+ 'HIP_RegRequestParameter', 'HIP_RegResponseParameter', 'HIP_RegFailedParameter',
44
+ 'HIP_RegFromParameter', 'HIP_EchoResponseSignedParameter', 'HIP_TransportFormatListParameter',
45
+ 'HIP_ESPTransformParameter', 'HIP_SeqDataParameter', 'HIP_AckDataParameter',
46
+ 'HIP_PayloadMICParameter', 'HIP_TransactionIDParameter', 'HIP_OverlayIDParameter',
47
+ 'HIP_RouteDstParameter', 'HIP_HIPTransportModeParameter', 'HIP_HIPMACParameter',
48
+ 'HIP_HIPMAC2Parameter', 'HIP_HIPSignature2Parameter', 'HIP_HIPSignatureParameter',
49
+ 'HIP_EchoRequestUnsignedParameter', 'HIP_EchoResponseUnsignedParameter', 'HIP_RelayFromParameter',
50
+ 'HIP_RelayToParameter', 'HIP_RouteViaParameter', 'HIP_FromParameter',
51
+ 'HIP_RVSHMACParameter', 'HIP_RelayHMACParameter',
52
+ 'IPv4',
53
+ 'IPv4_UnassignedOption', 'IPv4_EOOLOption', 'IPv4_NOPOption',
54
+ 'IPv4_SECOption', 'IPv4_LSROption', 'IPv4_TSOption',
55
+ 'IPv4_ESECOption', 'IPv4_RROption', 'IPv4_SIDOption',
56
+ 'IPv4_SSROption', 'IPv4_MTUPOption', 'IPv4_MTUROption',
57
+ 'IPv4_TROption', 'IPv4_RTRALTOption', 'IPv4_QSOption',
58
+ 'IPv4_QuickStartRequestOption', 'IPv4_QuickStartReportOption',
59
+ 'IPv6_Frag',
60
+ 'IPv6_Opts',
61
+ 'IPv6_Opts_UnassignedOption', 'IPv6_Opts_PadOption', 'IPv6_Opts_TunnelEncapsulationLimitOption',
62
+ 'IPv6_Opts_RouterAlertOption', 'IPv6_Opts_CALIPSOOption', 'IPv6_Opts_SMFIdentificationBasedDPDOption',
63
+ 'IPv6_Opts_SMFHashBasedDPDOption', 'IPv6_Opts_PDMOption', 'IPv6_Opts_QuickStartRequestOption',
64
+ 'IPv6_Opts_QuickStartReportOption', 'IPv6_Opts_RPLOption', 'IPv6_Opts_MPLOption', 'IPv6_Opts_ILNPOption',
65
+ 'IPv6_Opts_LineIdentificationOption', 'IPv6_Opts_JumboPayloadOption', 'IPv6_Opts_HomeAddressOption',
66
+ 'IPv6_Opts_IPDFFOption',
67
+ 'IPv6_Route',
68
+ 'IPv6_Route_UnknownType', 'IPv6_Route_SourceRoute', 'IPv6_Route_Type2', 'IPv6_Route_RPL',
69
+ 'IPv6',
70
+ 'IPX',
71
+ 'MH',
72
+ 'MH_Packet',
73
+ 'MH_UnknownMessage', 'MH_BindingRefreshRequestMessage', 'MH_HomeTestInitMessage', 'MH_CareofTestInitMessage',
74
+ 'MH_HomeTestMessage', 'MH_CareofTestMessage', 'MH_BindingUpdateMessage', 'MH_BindingAcknowledgementMessage',
75
+ 'MH_BindingErrorMessage',
76
+ 'MH_Option',
77
+ 'MH_UnassignedOption', 'MH_PadOption', 'MH_BindingRefreshAdviceOption', 'MH_AlternateCareofAddressOption',
78
+ 'MH_NonceIndicesOption', 'MH_AuthorizationDataOption', 'MH_MobileNetworkPrefixOption',
79
+ 'MH_LinkLayerAddressOption', 'MH_MNIDOption', 'MH_AuthOption', 'MH_MesgIDOption', 'MH_CGAParametersRequestOption',
80
+ 'MH_CGAParametersOption', 'MH_SignatureOption', 'MH_PermanentHomeKeygenTokenOption', 'MH_CareofTestInitOption',
81
+ 'MH_CareofTestOption',
82
+ 'MH_CGAParameter',
83
+ 'MH_CGAExtension',
84
+ 'MH_UnknownExtension', 'MH_MultiPrefixExtension',
85
+
86
+ # Transport Layer Protocols
87
+ 'TCP',
88
+ 'TCP_SACKBlock',
89
+ 'TCP_Option',
90
+ 'TCP_UnassignedOption', 'TCP_EndOfOptionList', 'TCP_NoOperation', 'TCP_MaximumSegmentSize', 'TCP_WindowScale',
91
+ 'TCP_SACKPermitted', 'TCP_SACK', 'TCP_Echo', 'TCP_EchoReply', 'TCP_Timestamps', 'TCP_PartialOrderConnectionPermitted', # pylint: disable=line-too-long
92
+ 'TCP_PartialOrderServiceProfile', 'TCP_CC', 'TCP_CCNew', 'TCP_CCEcho', 'TCP_AlternateChecksumRequest',
93
+ 'TCP_AlternateChecksumData', 'TCP_MD5Signature', 'TCP_QuickStartResponse', 'TCP_UserTimeout',
94
+ 'TCP_Authentication', 'TCP_FastOpenCookie',
95
+ 'TCP_MPTCP',
96
+ 'TCP_MPTCPUnknown', 'TCP_MPTCPCapable', 'TCP_MPTCPDSS', 'TCP_MPTCPAddAddress', 'TCP_MPTCPRemoveAddress',
97
+ 'TCP_MPTCPPriority', 'TCP_MPTCPFallback', 'TCP_MPTCPFastclose',
98
+ 'TCP_MPTCPJoin',
99
+ 'TCP_MPTCPJoinSYN', 'TCP_MPTCPJoinSYNACK', 'TCP_MPTCPJoinACK',
100
+ 'UDP',
101
+
102
+ # Application Layer Protocols
103
+ 'FTP',
104
+ 'HTTPv1',
105
+ 'HTTPv2',
106
+ 'HTTPv2_FrameType',
107
+ 'HTTPv2_UnassignedFrame', 'HTTPv2_DataFrame', 'HTTPv2_HeadersFrame', 'HTTPv2_PriorityFrame',
108
+ 'HTTPv2_RSTStreamFrame', 'HTTPv2_SettingsFrame', 'HTTPv2_PushPromiseFrame', 'HTTPv2_PingFrame',
109
+ 'HTTPv2_GoawayFrame', 'HTTPv2_WindowUpdateFrame', 'HTTPv2_ContinuationFrame',
110
+
111
+ # PCAP file format
112
+ 'Header',
113
+ 'Frame',
114
+
115
+ # PCAP-NG file format
116
+ 'PCAPNG',
117
+ 'PCAPNG_Option', 'PCAPNG_UnknownOption',
118
+ 'PCAPNG_EndOfOption', 'PCAPNG_CommentOption', 'PCAPNG_CustomOption',
119
+ 'PCAPNG_IF_NameOption', 'PCAPNG_IF_DescriptionOption', 'PCAPNG_IF_IPv4AddrOption', 'PCAPNG_IF_IPv6AddrOption',
120
+ 'PCAPNG_IF_MACAddrOption', 'PCAPNG_IF_EUIAddrOption', 'PCAPNG_IF_SpeedOption', 'PCAPNG_IF_TSResolOption',
121
+ 'PCAPNG_IF_TZoneOption', 'PCAPNG_IF_FilterOption', 'PCAPNG_IF_OSOption', 'PCAPNG_IF_FCSLenOption',
122
+ 'PCAPNG_IF_TSOffsetOption', 'PCAPNG_IF_HardwareOption', 'PCAPNG_IF_TxSpeedOption', 'PCAPNG_IF_RxSpeedOption',
123
+ 'PCAPNG_EPB_FlagsOption', 'PCAPNG_EPB_HashOption', 'PCAPNG_EPB_DropCountOption', 'PCAPNG_EPB_PacketIDOption',
124
+ 'PCAPNG_EPB_QueueOption', 'PCAPNG_EPB_VerdictOption',
125
+ 'PCAPNG_NS_DNSNameOption', 'PCAPNG_NS_DNSIP4AddrOption', 'PCAPNG_NS_DNSIP6AddrOption',
126
+ 'PCAPNG_ISB_StartTimeOption', 'PCAPNG_ISB_EndTimeOption', 'PCAPNG_ISB_IFRecvOption', 'PCAPNG_ISB_IFDropOption',
127
+ 'PCAPNG_ISB_FilterAcceptOption', 'PCAPNG_ISB_OSDropOption', 'PCAPNG_ISB_UsrDelivOption',
128
+ 'PCAPNG_NameResolutionRecord', 'PCAPNG_UnknownRecord', 'PCAPNG_EndRecord', 'PCAPNG_IPv4Record', 'PCAPNG_IPv6Record',
129
+ 'PCAPNG_DSBSecrets', 'PCAPNG_UnknownSecrets', 'PCAPNG_TLSKeyLog', 'PCAPNG_WireGuardKeyLog', 'PCAPNG_ZigBeeNWKKey',
130
+ 'PCAPNG_ZigBeeAPSKey',
131
+ 'PCAPNG_BlockType',
132
+ 'PCAPNG_UnknownBlock', 'PCAPNG_SectionHeaderBlock', 'PCAPNG_InterfaceDescriptionBlock',
133
+ 'PCAPNG_EnhancedPacketBlock', 'PCAPNG_SimplePacketBlock', 'PCAPNG_NameResolutionBlock',
134
+ 'PCAPNG_InterfaceStatisticsBlock', 'PCAPNG_SystemdJournalExportBlock', 'PCAPNG_DecryptionSecretsBlock',
135
+ 'PCAPNG_CustomBlock',
136
+
137
+ # misc protocols
138
+ 'NoPayload',
139
+ 'Raw',
140
+ ]
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ """header schema for application layer protocols"""
3
+
4
+ # File Transfer Protocol
5
+ from pcapkit.protocols.schema.application.ftp import FTP
6
+
7
+ # Hypertext Transfer Protocol (HTTP/1.*)
8
+ from pcapkit.protocols.schema.application.httpv1 import HTTP as HTTPv1
9
+
10
+ # Hypertext Transfer Protocol (HTTP/2)
11
+ from pcapkit.protocols.schema.application.httpv2 import HTTP as HTTPv2
12
+ from pcapkit.protocols.schema.application.httpv2 import \
13
+ ContinuationFrame as HTTPv2_ContinuationFrame
14
+ from pcapkit.protocols.schema.application.httpv2 import DataFrame as HTTPv2_DataFrame
15
+ from pcapkit.protocols.schema.application.httpv2 import FrameType as HTTPv2_FrameType
16
+ from pcapkit.protocols.schema.application.httpv2 import GoawayFrame as HTTPv2_GoawayFrame
17
+ from pcapkit.protocols.schema.application.httpv2 import HeadersFrame as HTTPv2_HeadersFrame
18
+ from pcapkit.protocols.schema.application.httpv2 import PingFrame as HTTPv2_PingFrame
19
+ from pcapkit.protocols.schema.application.httpv2 import PriorityFrame as HTTPv2_PriorityFrame
20
+ from pcapkit.protocols.schema.application.httpv2 import PushPromiseFrame as HTTPv2_PushPromiseFrame
21
+ from pcapkit.protocols.schema.application.httpv2 import RSTStreamFrame as HTTPv2_RSTStreamFrame
22
+ from pcapkit.protocols.schema.application.httpv2 import SettingsFrame as HTTPv2_SettingsFrame
23
+ from pcapkit.protocols.schema.application.httpv2 import UnassignedFrame as HTTPv2_UnassignedFrame
24
+ from pcapkit.protocols.schema.application.httpv2 import \
25
+ WindowUpdateFrame as HTTPv2_WindowUpdateFrame
26
+
27
+ __all__ = [
28
+ # File Transfer Protocol
29
+ 'FTP',
30
+
31
+ # Hypertext Transfer Protocol (HTTP/1.*)
32
+ 'HTTPv1',
33
+
34
+ # Hypertext Transfer Protocol (HTTP/2)
35
+ 'HTTPv2',
36
+ 'HTTPv2_FrameType',
37
+ 'HTTPv2_UnassignedFrame', 'HTTPv2_DataFrame', 'HTTPv2_HeadersFrame', 'HTTPv2_PriorityFrame',
38
+ 'HTTPv2_RSTStreamFrame', 'HTTPv2_SettingsFrame', 'HTTPv2_PushPromiseFrame', 'HTTPv2_PingFrame',
39
+ 'HTTPv2_GoawayFrame', 'HTTPv2_WindowUpdateFrame', 'HTTPv2_ContinuationFrame',
40
+ ]
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+ # mypy: disable-error-code=assignment
3
+ """header schema for file transfer protocol"""
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from pcapkit.corekit.fields.strings import BytesField
8
+ from pcapkit.protocols.schema.schema import Schema, schema_final
9
+
10
+ __all__ = ['FTP']
11
+
12
+
13
+ @schema_final
14
+ class FTP(Schema):
15
+ """Header schema for FTP packet."""
16
+
17
+ #: Packet data.
18
+ data: 'bytes' = BytesField(lambda pkt: pkt['__length__'])
19
+
20
+ if TYPE_CHECKING:
21
+ def __init__(self, data: 'bytes') -> 'None': ...
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+ # mypy: disable-error-code=assignment
3
+ """header schema for HTTP/1.* protocol"""
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from pcapkit.corekit.fields.strings import BytesField
8
+ from pcapkit.protocols.schema.schema import Schema, schema_final
9
+
10
+ __all__ = ['HTTP']
11
+
12
+
13
+ @schema_final
14
+ class HTTP(Schema):
15
+ r"""Header schema for HTTP/1.\* packet."""
16
+
17
+ #: Packet data.
18
+ data: 'bytes' = BytesField(lambda pkt: pkt['__length__'])
19
+
20
+ if TYPE_CHECKING:
21
+ def __init__(self, data: 'bytes') -> 'None': ...
@@ -0,0 +1,384 @@
1
+ # -*- coding: utf-8 -*-
2
+ # mypy: disable-error-code=assignment
3
+ """header schema for HTTP/2 protocol"""
4
+
5
+ import collections
6
+ import enum
7
+ from typing import TYPE_CHECKING, cast
8
+
9
+ from pcapkit.const.http.error_code import ErrorCode as Enum_ErrorCode
10
+ from pcapkit.const.http.frame import Frame as Enum_Frame
11
+ from pcapkit.const.http.setting import Setting as Enum_Setting
12
+ from pcapkit.corekit.fields.collections import ListField
13
+ from pcapkit.corekit.fields.misc import ConditionalField, SchemaField, SwitchField
14
+ from pcapkit.corekit.fields.numbers import EnumField, NumberField, UInt8Field, UInt32Field
15
+ from pcapkit.corekit.fields.strings import BitField, BytesField, PaddingField
16
+ from pcapkit.protocols.schema.schema import EnumSchema, Schema, schema_final
17
+ from pcapkit.utilities.logging import SPHINX_TYPE_CHECKING
18
+
19
+ __all__ = [
20
+ 'HTTP',
21
+
22
+ 'FrameType',
23
+ 'UnassignedFrame', 'DataFrame', 'HeadersFrame', 'PriorityFrame',
24
+ 'RSTStreamFrame', 'SettingsFrame', 'PushPromiseFrame', 'PingFrame',
25
+ 'GoawayFrame', 'WindowUpdateFrame', 'ContinuationFrame',
26
+ ]
27
+
28
+ if TYPE_CHECKING:
29
+ from typing import Any, Optional
30
+
31
+ from pcapkit.corekit.fields.field import FieldBase as Field
32
+
33
+ if SPHINX_TYPE_CHECKING:
34
+ from typing_extensions import TypedDict
35
+
36
+ class FrameFlags(TypedDict):
37
+ """HTTP frame specific flags."""
38
+
39
+ bit_7: int
40
+ bit_6: int
41
+ bit_5: int
42
+ bit_4: int
43
+ bit_3: int
44
+ bit_2: int
45
+ bit_1: int
46
+ bit_0: int
47
+
48
+ class StreamID(TypedDict):
49
+ """Stream identifier."""
50
+
51
+ #: Steam identifier.
52
+ sid: int
53
+
54
+ class StreamDependency(TypedDict):
55
+ """Stream dependency."""
56
+
57
+ #: Exclusive flag.
58
+ exclusive: int
59
+ #: Stream dependency identifier.
60
+ sid: int
61
+
62
+ class WindowSize(TypedDict):
63
+ """Window size increment."""
64
+
65
+ #: Window size increment.
66
+ incr: int
67
+
68
+
69
+ def http_frame_selector(pkt: 'dict[str, Any]') -> 'Field':
70
+ """Selector function for :attr:`HTTP.frame` field.
71
+
72
+ Args:
73
+ pkt: Packet data.
74
+
75
+ Returns:
76
+ Returns a :class:`~pcapkit.corekit.fields.misc.SchemaField` wrapped
77
+ :class:`~pcapkit.protocols.schema.application.httpv2.FrameType`
78
+ instance.
79
+
80
+ """
81
+ type = cast('Enum_Frame', pkt['type'])
82
+ schema = FrameType.registry[type]
83
+ return SchemaField(length=pkt['__length__'], schema=schema)
84
+
85
+
86
+ @schema_final
87
+ class HTTP(Schema):
88
+ """Header schema for HTTP/2 packet."""
89
+
90
+ #: Length.
91
+ length: 'int' = NumberField(length=3, signed=False)
92
+ #: Frame type.
93
+ type: 'Enum_Frame' = EnumField(length=1, namespace=Enum_Frame)
94
+ #: Frame specific flags.
95
+ flags: 'FrameFlags' = BitField(length=1, namespace={
96
+ 'bit_7': (0, 1),
97
+ 'bit_6': (1, 1),
98
+ 'bit_5': (2, 1),
99
+ 'bit_4': (3, 1),
100
+ 'bit_3': (4, 1),
101
+ 'bit_2': (5, 1),
102
+ 'bit_1': (6, 1),
103
+ 'bit_0': (7, 1),
104
+ })
105
+ #: Stream identifier.
106
+ stream: 'StreamID' = BitField(length=4, namespace={
107
+ 'sid': (1, 31),
108
+ })
109
+ #: Frame payload.
110
+ frame: 'FrameType' = SwitchField(
111
+ selector=http_frame_selector,
112
+ )
113
+
114
+ if TYPE_CHECKING:
115
+ def __init__(self, length: 'int', type: 'Enum_Frame', flags: 'FrameFlags', stream: 'StreamID', frame: 'FrameType | bytes') -> 'None': ...
116
+
117
+
118
+ class FrameType(EnumSchema[Enum_Frame]):
119
+ """Header schema for HTTP/2 frame payload."""
120
+
121
+ if TYPE_CHECKING:
122
+ __flags__: 'Flags'
123
+
124
+ __enum__ = collections.defaultdict(lambda: UnassignedFrame)
125
+
126
+ class Flags(enum.IntFlag):
127
+ """Flags enumeration for HTTP/2 frames."""
128
+
129
+ def post_process(self, packet: 'dict[str, Any]') -> 'Schema':
130
+ """Revise ``schema`` data after unpacking process.
131
+
132
+ Args:
133
+ schema: parsed schema
134
+ packet: Unpacked data.
135
+
136
+ Returns:
137
+ Revised schema.
138
+
139
+ """
140
+ flags = 0
141
+ for key, val in filter(lambda kv: kv[0].startswith('BIT_'),
142
+ self.Flags.__members__.items()):
143
+ name = key.lower()
144
+ if packet['flags'][name]:
145
+ flags |= val
146
+
147
+ self.__flags__ = flags
148
+ return self
149
+
150
+
151
+ @schema_final
152
+ class UnassignedFrame(FrameType):
153
+ """Header schema for unassigned HTTP/2 frame payload."""
154
+
155
+ #: Frame payload.
156
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
157
+
158
+ if TYPE_CHECKING:
159
+ def __init__(self, data: 'bytes') -> 'None': ...
160
+
161
+
162
+ @schema_final
163
+ class DataFrame(FrameType, code=Enum_Frame.DATA):
164
+ """Header schema for HTTP/2 ``DATA`` frames."""
165
+
166
+ class Flags(FrameType.Flags):
167
+ """Flags enumeration for HTTP/2 ``DATA`` frames."""
168
+
169
+ END_STREAM = BIT_0 = 0x1
170
+ PADDED = BIT_3 = 0x8
171
+
172
+ #: Padding length.
173
+ pad_len: 'int' = ConditionalField(
174
+ UInt8Field(),
175
+ lambda pkt: pkt['flags']['bit_3'], # PADDED
176
+ )
177
+ #: Data.
178
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'] - pkt['pad_len'] if pkt['flags']['bit_3'] else 0)
179
+ #: Padding.
180
+ padding: 'bytes' = ConditionalField(
181
+ PaddingField(length=lambda pkt: pkt['pad_len']),
182
+ lambda pkt: pkt['flags']['bit_3'], # PADDED
183
+ )
184
+
185
+ if TYPE_CHECKING:
186
+ def __init__(self, pad_len: 'Optional[int]', data: 'bytes') -> 'None': ...
187
+
188
+
189
+ @schema_final
190
+ class HeadersFrame(FrameType, code=Enum_Frame.HEADERS):
191
+ """Header schema for HTTP/2 ``HEADERS`` frames."""
192
+
193
+ class Flags(FrameType.Flags):
194
+ """Flags enumeration for HTTP/2 ``DATA`` frames."""
195
+
196
+ END_STREAM = BIT_0 = 0x1
197
+ END_HEADERS = BIT_2 = 0x4
198
+ PADDED = BIT_3 = 0x8
199
+ PRIORITY = BIT_5 = 0x20
200
+
201
+ #: Padding length.
202
+ pad_len: 'int' = ConditionalField(
203
+ UInt8Field(),
204
+ lambda pkt: pkt['flags']['bit_3'], # PADDED
205
+ )
206
+ #: Stream dependency.
207
+ stream_dep: 'StreamDependency' = ConditionalField(
208
+ BitField(length=4, namespace={
209
+ 'exclusive': (0, 1),
210
+ 'sid': (1, 31),
211
+ }),
212
+ lambda pkt: pkt['flags']['bit_5'], # PRIORITY
213
+ )
214
+ #: Weight.
215
+ weight: 'int' = ConditionalField(
216
+ UInt8Field(),
217
+ lambda pkt: pkt['flags']['bit_5'], # PRIORITY
218
+ )
219
+ #: Header block fragment.
220
+ fragment: 'bytes' = BytesField(length=lambda pkt: (
221
+ pkt['__length__'] - pkt['pad_len'] if pkt['flags']['bit_3'] else 0
222
+ ))
223
+ #: Padding.
224
+ padding: 'bytes' = ConditionalField(
225
+ PaddingField(length=lambda pkt: pkt['pad_len']),
226
+ lambda pkt: pkt['flags']['bit_3'], # PADDED
227
+ )
228
+
229
+ if TYPE_CHECKING:
230
+ def __init__(self, pad_len: 'Optional[int]', stream_dep: 'Optional[StreamDependency]', weight: 'Optional[int]', fragment: 'bytes') -> 'None': ...
231
+
232
+
233
+ @schema_final
234
+ class PriorityFrame(FrameType, code=Enum_Frame.PRIORITY):
235
+ """Header schema for HTTP/2 ``PRIORITY`` frames."""
236
+
237
+ #: Stream dependency (exclusive, stream ID).
238
+ stream: 'StreamDependency' = BitField(length=4, namespace={
239
+ 'exclusive': (0, 1),
240
+ 'sid': (1, 31),
241
+ })
242
+ #: Weight.
243
+ weight: 'int' = UInt8Field()
244
+
245
+ if TYPE_CHECKING:
246
+ def __init__(self, stream: 'StreamDependency', weight: 'int') -> 'None': ...
247
+
248
+
249
+ @schema_final
250
+ class RSTStreamFrame(FrameType, code=Enum_Frame.RST_STREAM):
251
+ """Header schema for HTTP/2 ``RST_STREAM`` frames."""
252
+
253
+ #: Error code.
254
+ error: 'Enum_ErrorCode' = EnumField(length=4, namespace=Enum_ErrorCode)
255
+
256
+ if TYPE_CHECKING:
257
+ def __init__(self, error: 'Enum_ErrorCode') -> 'None': ...
258
+
259
+
260
+ @schema_final
261
+ class SettingPair(Schema):
262
+ """Header schema for HTTP/2 ``SETTINGS`` frame setting pairs."""
263
+
264
+ #: Identifier.
265
+ id: 'Enum_Setting' = EnumField(length=2, namespace=Enum_Setting)
266
+ #: Value.
267
+ value: 'int' = UInt32Field()
268
+
269
+ if TYPE_CHECKING:
270
+ def __init__(self, id: 'Enum_Setting', value: 'int') -> 'None': ...
271
+
272
+
273
+ @schema_final
274
+ class SettingsFrame(FrameType, code=Enum_Frame.SETTINGS):
275
+ """Header schema for HTTP/2 ``SETTINGS`` frames."""
276
+
277
+ class Flags(FrameType.Flags):
278
+ """Flags enumeration for HTTP/2 ``SETTINGS`` frames."""
279
+
280
+ ACK = BIT_0 = 0x1
281
+
282
+ #: Settings.
283
+ settings: 'list[SettingPair]' = ListField(
284
+ length=lambda pkt: pkt['__length__'],
285
+ item_type=SettingPair, # type: ignore[arg-type]
286
+ )
287
+
288
+ if TYPE_CHECKING:
289
+ def __init__(self, settings: 'list[SettingPair] | bytes') -> 'None': ...
290
+
291
+
292
+ @schema_final
293
+ class PushPromiseFrame(FrameType, code=Enum_Frame.PUSH_PROMISE):
294
+ """Header schema for HTTP/2 ``PUSH_PROMISE`` frames."""
295
+
296
+ class Flags(FrameType.Flags):
297
+ """Flags enumeration for HTTP/2 ``PUSH_PROMISE`` frames."""
298
+
299
+ END_HEADERS = BIT_2 = 0x4
300
+ PADDED = BIT_3 = 0x8
301
+
302
+ #: Padding length.
303
+ pad_len: 'int' = ConditionalField(
304
+ UInt8Field(),
305
+ lambda pkt: pkt['flags']['bit_3'], # PADDED
306
+ )
307
+ #: Promised stream ID.
308
+ stream: 'StreamID' = BitField(length=4, namespace={
309
+ 'sid': (1, 31),
310
+ })
311
+ #: Header block fragment.
312
+ fragment: 'bytes' = BytesField(length=lambda pkt: (
313
+ pkt['__length__'] - pkt['pad_len'] if pkt['flags']['bit_3'] else 0
314
+ ))
315
+ #: Padding.
316
+ padding: 'bytes' = ConditionalField(
317
+ PaddingField(length=lambda pkt: pkt['pad_len']),
318
+ lambda pkt: pkt['flags']['bit_3'], # PADDED
319
+ )
320
+
321
+ if TYPE_CHECKING:
322
+ def __init__(self, pad_len: 'Optional[int]', stream: 'StreamID', fragment: 'bytes') -> 'None': ...
323
+
324
+
325
+ @schema_final
326
+ class PingFrame(FrameType, code=Enum_Frame.PING):
327
+ """Header schema for HTTP/2 ``PING`` frames."""
328
+
329
+ class Flags(FrameType.Flags):
330
+ """Flags enumeration for HTTP/2 ``PING`` frames."""
331
+
332
+ ACK = BIT_0 = 0x1
333
+
334
+ #: Opaque data.
335
+ data: 'bytes' = BytesField(length=8)
336
+
337
+ if TYPE_CHECKING:
338
+ def __init__(self, data: 'bytes') -> 'None': ...
339
+
340
+
341
+ @schema_final
342
+ class GoawayFrame(FrameType, code=Enum_Frame.GOAWAY):
343
+ """Header schema for HTTP/2 ``GOAWAY`` frames."""
344
+
345
+ #: Last stream ID.
346
+ stream: 'StreamID' = BitField(length=4, namespace={
347
+ 'sid': (1, 31),
348
+ })
349
+ #: Error code.
350
+ error: 'Enum_ErrorCode' = EnumField(length=4, namespace=Enum_ErrorCode)
351
+ #: Additional debug data.
352
+ debug: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
353
+
354
+ if TYPE_CHECKING:
355
+ def __init__(self, stream: 'StreamID', error: 'Enum_ErrorCode', debug: 'bytes') -> 'None': ...
356
+
357
+
358
+ @schema_final
359
+ class WindowUpdateFrame(FrameType, code=Enum_Frame.WINDOW_UPDATE):
360
+ """Header schema for HTTP/2 ``WINDOW_UPDATE`` frames."""
361
+
362
+ #: Window size increment.
363
+ size: 'WindowSize' = BitField(length=4, namespace={
364
+ 'incr': (1, 31),
365
+ })
366
+
367
+ if TYPE_CHECKING:
368
+ def __init__(self, size: 'WindowSize') -> 'None': ...
369
+
370
+
371
+ @schema_final
372
+ class ContinuationFrame(FrameType, code=Enum_Frame.CONTINUATION):
373
+ """Header schema for HTTP/2 ``CONTINUATION`` frames."""
374
+
375
+ class Flags(FrameType.Flags):
376
+ """Flags enumeration for HTTP/2 ``CONTINUATION`` frames."""
377
+
378
+ END_HEADERS = BIT_2 = 0x4
379
+
380
+ #: Header block fragment.
381
+ fragment: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
382
+
383
+ if TYPE_CHECKING:
384
+ def __init__(self, fragment: 'bytes') -> 'None': ...