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,394 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Info Class
3
+ ================
4
+
5
+ .. module:: pcapkit.corekit.infoclass
6
+
7
+ :mod:`pcapkit.corekit.infoclass` contains :obj:`dict` like class
8
+ :class:`~pcapkit.corekit.infoclass.Info` only, which is originally
9
+ designed to work alike :func:`dataclasses.dataclass` as introduced
10
+ in :pep:`557`.
11
+
12
+ """
13
+ import abc
14
+ import collections.abc
15
+ import enum
16
+ import itertools
17
+ from typing import TYPE_CHECKING, Generic, TypeVar, final
18
+
19
+ from pcapkit.utilities.compat import Mapping
20
+ from pcapkit.utilities.exceptions import UnsupportedCall, stacklevel
21
+ from pcapkit.utilities.warnings import InfoWarning, warn
22
+
23
+ if TYPE_CHECKING:
24
+ from typing import Any, Iterable, Iterator, NoReturn, Optional, Type
25
+
26
+ from typing_extensions import Self
27
+
28
+ __all__ = ['Info', 'info_final']
29
+
30
+ VT = TypeVar('VT')
31
+ ST = TypeVar('ST', bound='Type[Info]')
32
+
33
+
34
+ class FinalisedState(enum.IntEnum):
35
+ """Finalised state."""
36
+
37
+ #: Not finalised.
38
+ NONE = enum.auto()
39
+ #: Base class.
40
+ BASE = enum.auto()
41
+ #: Finalised.
42
+ FINAL = enum.auto()
43
+
44
+
45
+ def info_final(cls: 'ST', *, _finalised: 'bool' = True) -> 'ST':
46
+ """Finalise info class.
47
+
48
+ This decorator function is used to generate necessary
49
+ attributes and methods for the decorated :class:`Info`
50
+ class. It can be useful to reduce runtime generation
51
+ time as well as caching already generated attributes.
52
+
53
+ Notes:
54
+ The decorator should only be used on the *final*
55
+ class, otherwise, any subclasses derived from a
56
+ finalised info class will not be re-finalised.
57
+
58
+ Args:
59
+ cls: Info class.
60
+ _finalised: Whether to make the info class as finalised.
61
+
62
+ Returns:
63
+ Finalised info class.
64
+
65
+ :meta decorator:
66
+ """
67
+ if cls.__finalised__ == FinalisedState.FINAL:
68
+ warn(f'{cls.__name__}: info class has been finalised; now skipping',
69
+ InfoWarning, stacklevel=stacklevel())
70
+ return cls
71
+
72
+ temp = ['__map__', '__map_reverse__', '__builtin__', '__finalised__']
73
+ temp.extend(cls.__additional__)
74
+ for obj in cls.mro():
75
+ temp.extend(dir(obj))
76
+ cls.__builtin__ = set(temp)
77
+ cls.__excluded__.extend(cls.__builtin__)
78
+
79
+ # NOTE: We only generate ``__init__`` method for subclasses of the
80
+ # ``Info`` class, rather than itself, plus that such class does not
81
+ # override the ``__init__`` method of the meta class.
82
+ if '__init__' not in cls.__dict__ and cls is not Info:
83
+ args_ = [] # type: list[str]
84
+ dict_ = [] # type: list[str]
85
+
86
+ for cls_ in cls.mro():
87
+ # NOTE: We skip the ``Info`` class itself, to avoid superclass
88
+ # type annotations being considered.
89
+ if cls_ is Info:
90
+ break
91
+
92
+ # NOTE: We iterate in reversed order to ensure that the type
93
+ # annotations of the superclasses are considered first.
94
+ for key in reversed(cls_.__annotations__):
95
+ # NOTE: We skip duplicated annotations to avoid duplicate
96
+ # argument in function definition.
97
+ if key in args_:
98
+ continue
99
+
100
+ args_.append(key)
101
+ dict_.append(f'{key}={key}')
102
+
103
+ # NOTE: We reverse the two lists such that the order of the
104
+ # arguments is the same as the order of the type annotations, i.e.,
105
+ # from the most base class to the most derived class.
106
+ args_.reverse()
107
+ dict_.reverse()
108
+
109
+ # NOTE: We only generate typed ``__init__`` method if only the class
110
+ # has type annotations from any of itself and its base classes.
111
+ if args_:
112
+ # NOTE: The following code is to make the ``__init__`` method work.
113
+ # It is inspired from the :func:`dataclasses._create_fn` function.
114
+ init_ = (
115
+ f'def __create_fn__():\n'
116
+ f' def __init__(self, {", ".join(args_)}):\n'
117
+ f' self.__update__({", ".join(dict_)})\n'
118
+ f' self.__post_init__()\n'
119
+ f' return __init__\n'
120
+ )
121
+ else:
122
+ init_ = (
123
+ 'def __create_fn__():\n'
124
+ ' def __init__(self, dict_=None, **kwargs):\n'
125
+ ' self.__update__(dict_, **kwargs)\n'
126
+ ' self.__post_init__()\n'
127
+ ' return __init__\n'
128
+ )
129
+
130
+ ns = {} # type: dict[str, Any]
131
+ exec(init_, None, ns) # pylint: disable=exec-used # nosec
132
+
133
+ cls.__init__ = ns['__create_fn__']() # type: ignore[misc]
134
+ cls.__init__.__qualname__ = f'{cls.__name__}.__init__' # type: ignore[misc]
135
+
136
+ if not _finalised:
137
+ cls.__finalised__ = FinalisedState.BASE
138
+ return cls
139
+
140
+ cls.__finalised__ = FinalisedState.FINAL
141
+ return final(cls)
142
+
143
+
144
+ class InfoMeta(abc.ABCMeta):
145
+ """Meta class to add dynamic support to :class:`Info`.
146
+
147
+ This meta class is used to generate necessary attributes for the
148
+ :class:`Info` class. It can be useful to reduce runtime generation
149
+ cost as well as caching already generated attributes.
150
+
151
+ * :attr:`Info.__additional__` and :attr:`Info.__excluded__` are
152
+ lists of additional and excluded field names, which are used to
153
+ determine certain names to be included or excluded from the field
154
+ dictionary. They will be automatically populated from the class
155
+ attributes of the :class:`Info` class and its base classes.
156
+
157
+ .. note::
158
+
159
+ This is implemented thru the :meth:`__new__` method, which will
160
+ inherit the additional and excluded field names from the base
161
+ classes, as well as populating the additional and excluded field
162
+ from the subclass attributes.
163
+
164
+ .. code-block:: python
165
+
166
+ class A(Info):
167
+ __additional__ = ['a', 'b']
168
+
169
+ class B(A):
170
+ __additional__ = ['c', 'd']
171
+
172
+ class C(B):
173
+ __additional__ = ['e', 'f']
174
+
175
+ print(A.__additional__) # ['a', 'b']
176
+ print(B.__additional__) # ['a', 'b', 'c', 'd']
177
+ print(C.__additional__) # ['a', 'b', 'c', 'd', 'e', 'f']
178
+
179
+ """
180
+
181
+ def __new__(cls, name: 'str', bases: 'tuple[type, ...]', attrs: 'dict[str, Any]', **kwargs: 'Any') -> 'Type[Info]':
182
+ if '__additional__' not in attrs:
183
+ attrs['__additional__'] = []
184
+ if '__excluded__' not in attrs:
185
+ attrs['__excluded__'] = []
186
+
187
+ for base in bases:
188
+ if hasattr(base, '__additional__'):
189
+ attrs['__additional__'].extend(
190
+ name for name in base.__additional__ if name not in attrs['__additional__'])
191
+ if hasattr(base, '__excluded__'):
192
+ attrs['__excluded__'].extend(name for name in base.__excluded__ if name not in attrs['__excluded__'])
193
+ return super().__new__(cls, name, bases, attrs, **kwargs) # type: ignore[return-value]
194
+
195
+
196
+ class Info(Mapping[str, VT], Generic[VT], metaclass=InfoMeta):
197
+ """Turn dictionaries into :obj:`object` like instances.
198
+
199
+ * :class:`Info` objects inherit from :obj:`dict` type
200
+ * :class:`Info` objects are *iterable*, and support all functions as
201
+ :obj:`dict` type
202
+ * :class:`Info` objects are **immutable**, thus cannot set or delete
203
+ attributes after initialisation
204
+
205
+ Important:
206
+ :class:`Info` will attempt to rename keys with the same names as the
207
+ class's builtin methods, and store the mapping information in the
208
+ :attr:`__map__` and :attr:`__map_reverse__` attributes. However, when
209
+ accessing such renamed keys, the original key name should always be
210
+ used, i.e., such renaming is totally transparent to the user.
211
+
212
+ """
213
+
214
+ if TYPE_CHECKING:
215
+ #: Mapping of name conflicts with builtin methods (original names to
216
+ #: transformed names).
217
+ __map__: 'dict[str, str]'
218
+ #: Mapping of name conflicts with builtin methods (transformed names to
219
+ #: original names).
220
+ __map_reverse__: 'dict[str, str]'
221
+ #: List of builtin methods.
222
+ __builtin__: 'set[str]'
223
+
224
+ #: Flag for finalised class initialisation.
225
+ __finalised__: 'FinalisedState' = FinalisedState.NONE
226
+
227
+ #: List of additional built-in names.
228
+ __additional__: 'list[str]' = []
229
+ #: List of names to be excluded from :obj:`dict` conversion.
230
+ __excluded__: 'list[str]' = []
231
+
232
+ def __new__(cls, *args: 'VT', **kwargs: 'VT') -> 'Self': # pylint: disable=unused-argument
233
+ """Create a new instance.
234
+
235
+ The class will try to automatically generate ``__init__`` method with
236
+ the same signature as specified in class variables' type annotations,
237
+ which is inspired by :pep:`557` (:mod:`dataclasses`).
238
+
239
+ Args:
240
+ *args: Arbitrary positional arguments.
241
+ **kwargs: Arbitrary keyword arguments.
242
+
243
+ """
244
+ if cls.__finalised__ == FinalisedState.NONE:
245
+ cls = info_final(cls, _finalised=False)
246
+ self = super().__new__(cls)
247
+
248
+ # NOTE: We define the ``__map__`` and ``__map_reverse__`` attributes
249
+ # here under ``self`` to avoid them being considered as class variables
250
+ # and thus being shared by all instances.
251
+ super().__setattr__(self, '__map__', {})
252
+ super().__setattr__(self, '__map_reverse__', {})
253
+
254
+ return self
255
+
256
+ def __post_init__(self) -> 'None':
257
+ """Customisation method to be called after initialisation."""
258
+
259
+ def __update__(self, dict_: 'Optional[Mapping[str, VT] | Iterable[tuple[str, VT]]]' = None,
260
+ **kwargs: 'VT') -> 'None':
261
+ # NOTE: Keys with the same names as the class's builtin methods will be
262
+ # renamed with the class name prefixed as mangled class variables
263
+ # implicitly and internally. Such mapping information will be stored
264
+ # within: attr: `__map__` attribute.
265
+
266
+ __name__ = type(self).__name__ # pylint: disable=redefined-builtin
267
+
268
+ if dict_ is None:
269
+ data_iter = kwargs.items() # type: Iterable[tuple[str, Any]]
270
+ elif isinstance(dict_, (dict, collections.abc.Mapping)) or hasattr(dict_, 'items'):
271
+ data_iter = itertools.chain(dict_.items(), kwargs.items())
272
+ else:
273
+ data_iter = itertools.chain(dict_, kwargs.items())
274
+
275
+ for (key, value) in data_iter:
276
+ if key in self.__builtin__:
277
+ new_key = f'_{__name__}{key}'
278
+
279
+ # NOTE: We keep record of the mapping bidirectionally.
280
+ self.__map__[key] = new_key
281
+ self.__map_reverse__[new_key] = key
282
+
283
+ key = new_key
284
+
285
+ # if key in self.__dict__:
286
+ # raise KeyExists(f'{key!r} already exists')
287
+
288
+ # NOTE: We don't rewrite the key names here, just keep the
289
+ # original ones, even though they might break on the ``.``
290
+ # (:obj:`getattr`) operator.
291
+
292
+ # if isinstance(key, str):
293
+ # key = re.sub(r'\W', '_', key)
294
+ self.__dict__[key] = value
295
+
296
+ __init__ = __update__
297
+
298
+ def __str__(self) -> 'str':
299
+ temp = [] # type: list[str]
300
+ for (key, value) in self.__dict__.items():
301
+ if key in self.__excluded__:
302
+ continue
303
+
304
+ out_key = self.__map_reverse__.get(key, key)
305
+ temp.append(f'{out_key}={value}')
306
+ args = ', '.join(temp)
307
+ return f'{type(self).__name__}({args})'
308
+
309
+ def __repr__(self) -> 'str':
310
+ temp = [] # type: list[str]
311
+ for (key, value) in self.__dict__.items():
312
+ if key in self.__excluded__:
313
+ continue
314
+
315
+ out_key = self.__map_reverse__.get(key, key)
316
+ if isinstance(value, Info):
317
+ temp.append(f'{out_key}={type(value).__name__}(...)')
318
+ else:
319
+ temp.append(f'{out_key}={value!r}')
320
+ args = ', '.join(temp)
321
+ return f'<{type(self).__name__} {args}>'
322
+
323
+ def __len__(self) -> 'int':
324
+ return len(self.__dict__)
325
+
326
+ def __iter__(self) -> 'Iterator[str]':
327
+ for key in self.__dict__:
328
+ if key in self.__excluded__:
329
+ continue
330
+ yield self.__map_reverse__.get(key, key)
331
+
332
+ def __getitem__(self, name: 'str') -> 'VT':
333
+ key = self.__map__.get(name, name)
334
+ return self.__dict__[key]
335
+
336
+ def __setattr__(self, name: 'str', value: 'VT') -> 'NoReturn':
337
+ raise UnsupportedCall("can't set attribute")
338
+
339
+ def __delattr__(self, name: 'str') -> 'NoReturn':
340
+ raise UnsupportedCall("can't delete attribute")
341
+
342
+ @classmethod
343
+ def from_dict(cls, dict_: 'Optional[Mapping[str, VT] | Iterable[tuple[str, VT]]]' = None,
344
+ **kwargs: 'VT') -> 'Self':
345
+ r"""Create a new instance.
346
+
347
+ * If ``dict_`` is present and has a ``.keys()`` method, then does:
348
+ ``for k in dict_: self[k] = dict_[k]``.
349
+ * If ``dict_`` is present and has no ``.keys()`` method, then does:
350
+ ``for k, v in dict_: self[k] = v``.
351
+ * If ``dict_`` is not present, then does:
352
+ ``for k, v in kwargs.items(): self[k] = v``.
353
+
354
+ Args:
355
+ dict\_: Source data.
356
+ **kwargs: Arbitrary keyword arguments.
357
+
358
+ """
359
+ self = cls.__new__(cls)
360
+ self.__update__(dict_, **kwargs)
361
+ return self
362
+
363
+ def to_dict(self) -> 'dict[str, VT]':
364
+ """Convert :class:`Info` into :obj:`dict`.
365
+
366
+ Important:
367
+ We only convert nested :class:`Info` objects into :obj:`dict` if
368
+ they are the direct value of the :class:`Info` object's attribute.
369
+ Should such :class:`Info` objects be nested within other data,
370
+ types, such as :obj:`list`, :obj:`tuple`, :obj:`set`, etc., we
371
+ shall not convert them into :obj:`dict` and remain them intact.
372
+
373
+ """
374
+ dict_ = {} # type: dict[str, Any]
375
+ for (key, value) in self.__dict__.items():
376
+ if key in self.__excluded__:
377
+ continue
378
+
379
+ out_key = self.__map_reverse__.get(key, key)
380
+ if isinstance(value, Info):
381
+ dict_[out_key] = value.to_dict()
382
+
383
+ #elif isinstance(value, (tuple, list, set, frozenset)):
384
+ # temp = [] # type: list[Any]
385
+ # for item in value:
386
+ # if isinstance(item, Info):
387
+ # temp.append(item.to_dict())
388
+ # else:
389
+ # temp.append(item)
390
+ # dict_[out_key] = value.__class__(temp)
391
+
392
+ else:
393
+ dict_[out_key] = value
394
+ return dict_