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,94 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Block Types
3
+ =================
4
+
5
+ .. module:: pcapkit.vendor.pcapng.block_type
6
+
7
+ This module contains the vendor crawler for **Block Types**,
8
+ which is automatically generating :class:`pcapkit.const.pcapng.block_type.BlockType`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import sys
14
+ from typing import TYPE_CHECKING
15
+
16
+ import bs4
17
+
18
+ from pcapkit.vendor.default import Vendor
19
+
20
+ __all__ = ['BlockType']
21
+
22
+ if TYPE_CHECKING:
23
+ from collections import Counter
24
+
25
+ from bs4.element import Tag
26
+
27
+
28
+ class BlockType(Vendor):
29
+ """Block Types"""
30
+
31
+ #: Value limit checker.
32
+ FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFFFFFF'
33
+ #: Link to registry.
34
+ LINK = 'https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html'
35
+
36
+ def count(self, data: 'list[str]') -> 'Counter[str]':
37
+ """Count field records."""
38
+ return collections.Counter()
39
+
40
+ def request(self, text: 'str') -> 'list[Tag]': # type: ignore[override] # pylint: disable=signature-differs
41
+ """Fetch registry table.
42
+
43
+ Args:
44
+ text: Context from :attr:`~LinkType.LINK`.
45
+
46
+ Returns:
47
+ Rows (``tr``) from registry table (``table``).
48
+
49
+ """
50
+ soup = bs4.BeautifulSoup(text, 'html5lib')
51
+ table = soup.select('table#table-9')[0]
52
+ return table.select('tr')[1:]
53
+
54
+ def process(self, data: 'list[Tag]') -> 'tuple[list[str], list[str]]':
55
+ """Process registry data.
56
+
57
+ Args:
58
+ data: Registry data.
59
+
60
+ Returns:
61
+ Enumeration fields and missing fields.
62
+
63
+ """
64
+ enum = [] # type: list[str]
65
+ miss = [] # type: list[str]
66
+ for content in data:
67
+ temp = content.select('td')[0].text.strip()
68
+ desc = ' '.join(content.select('td')[1].stripped_strings)
69
+
70
+ if 'Reserved' in desc:
71
+ name = 'Reserved'
72
+ else:
73
+ name = self.safe_name(desc.split('.', maxsplit=1)[0].split('(', maxsplit=1)[0].strip())
74
+
75
+ try:
76
+ code = int(temp, base=16)
77
+ if name == 'Reserved':
78
+ name = f'Reserved_0x{code:08x}'
79
+
80
+ pref = f'{name} = 0x{code:08x}'
81
+ sufs = self.wrap_comment(desc)
82
+
83
+ enum.append(f'#: {sufs}\n {pref}')
84
+ except ValueError:
85
+ start, stop = map(lambda x: int(x, base=16), temp.split('-'))
86
+
87
+ miss.append(f'if 0x{start:08x} <= value <= 0x{stop:08x}:')
88
+ miss.append(f' #: {desc}')
89
+ miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%08x' % value, value)")
90
+ return enum, miss
91
+
92
+
93
+ if __name__ == '__main__':
94
+ sys.exit(BlockType()) # type: ignore[arg-type]
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Filter Types
3
+ ==================
4
+
5
+ .. module:: pcapkit.vendor.pcapng.filter_type
6
+
7
+ This module contains the vendor crawler for **Filter Types**,
8
+ which is automatically generating :class:`pcapkit.const.pcapng.filter_type.FilterType`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import sys
14
+ from typing import TYPE_CHECKING
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ if TYPE_CHECKING:
19
+ from collections import Counter
20
+
21
+ __all__ = ['FilterType']
22
+
23
+ #: Filter type registry.
24
+ DATA = {
25
+ # TODO: https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html#section-4.2-28.2.1
26
+ } # type: dict[int, str]
27
+
28
+
29
+ class FilterType(Vendor):
30
+ """Filter Types"""
31
+
32
+ #: Value limit checker.
33
+ FLAG = 'isinstance(value, int) and 0x00<= value <= 0xFF'
34
+
35
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
36
+ """Fetch registry data.
37
+
38
+ Returns:
39
+ Registry data (:data:`~pcapkit.vendor.pcapng.filter_type.DATA`).
40
+
41
+ """
42
+ return DATA
43
+
44
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
45
+ """Count field records.
46
+
47
+ Args:
48
+ data: Registry data.
49
+
50
+ Returns:
51
+ Field recordings.
52
+
53
+ """
54
+ return collections.Counter(map(self.safe_name, data.values()))
55
+
56
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
57
+ """Process registry data.
58
+
59
+ Args:
60
+ data: Registry data.
61
+
62
+ Returns:
63
+ Enumeration fields and missing fields.
64
+
65
+ """
66
+ enum = [] # type: list[str]
67
+ miss = [
68
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
69
+ ]
70
+ for code, name in DATA.items():
71
+ renm = self.rename(name, code) # type: ignore[arg-type]
72
+ enum.append(f"{renm} = {code}".ljust(76))
73
+ return enum, miss
74
+
75
+
76
+ if __name__ == '__main__':
77
+ sys.exit(FilterType()) # type: ignore[arg-type]
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Hash Algorithms
3
+ =====================
4
+
5
+ .. module:: pcapkit.vendor.pcapng.hash_algorithm
6
+
7
+ This module contains the vendor crawler for **Hash Algorithms**,
8
+ which is automatically generating :class:`pcapkit.const.pcapng.hash_algorithm.HashAlgorithm`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import sys
14
+ from typing import TYPE_CHECKING
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ if TYPE_CHECKING:
19
+ from collections import Counter
20
+
21
+ __all__ = ['HashAlgorithm']
22
+
23
+ #: Hash algorithm registry.
24
+ DATA = {
25
+ 0: "two's complement",
26
+ 1: 'XOR',
27
+ 2: 'CRC32',
28
+ 3: 'MD-5',
29
+ 4: 'SHA-1',
30
+ 5: 'Toeplitz',
31
+ } # type: dict[int, str]
32
+
33
+
34
+ class HashAlgorithm(Vendor):
35
+ """Hash Algorithms"""
36
+
37
+ #: Value limit checker.
38
+ FLAG = 'isinstance(value, int) and 0x00 <= value <= 0xFF'
39
+
40
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
41
+ """Fetch registry data.
42
+
43
+ Returns:
44
+ Registry data (:data:`~pcapkit.vendor.pcapng.hash_algorithm.DATA`).
45
+
46
+ """
47
+ return DATA
48
+
49
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
50
+ """Count field records.
51
+
52
+ Args:
53
+ data: Registry data.
54
+
55
+ Returns:
56
+ Field recordings.
57
+
58
+ """
59
+ return collections.Counter(map(self.safe_name, data.values()))
60
+
61
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
62
+ """Process registry data.
63
+
64
+ Args:
65
+ data: Registry data.
66
+
67
+ Returns:
68
+ Enumeration fields and missing fields.
69
+
70
+ """
71
+ enum = [] # type: list[str]
72
+ miss = [
73
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
74
+ ]
75
+ for code, name in DATA.items():
76
+ renm = self.rename(name, code) # type: ignore[arg-type]
77
+ enum.append(f"{renm} = {code}".ljust(76))
78
+ return enum, miss
79
+
80
+
81
+ if __name__ == '__main__':
82
+ sys.exit(HashAlgorithm()) # type: ignore[arg-type]
@@ -0,0 +1,287 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Option Types
3
+ ==================
4
+
5
+ .. module:: pcapkit.vendor.pcapng.option_type
6
+
7
+ This module contains the vendor crawler for **Option Types**,
8
+ which is automatically generating :class:`pcapkit.const.pcapng.option_type.OptionType`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import sys
14
+ from typing import TYPE_CHECKING
15
+
16
+ import bs4
17
+
18
+ from pcapkit.vendor.default import Vendor
19
+
20
+ __all__ = ['OptionType']
21
+
22
+ if TYPE_CHECKING:
23
+ from collections import Counter
24
+ from typing import Callable
25
+
26
+ from bs4.element import Tag
27
+
28
+ LINE = lambda NAME, DOCS, FLAG, ENUM, MISS, MODL: f'''\
29
+ # -*- coding: utf-8 -*-
30
+ # mypy: disable-error-code=assignment
31
+ # pylint: disable=line-too-long,consider-using-f-string
32
+ """{(name := DOCS.split(' [', maxsplit=1)[0])}
33
+ {'=' * (len(name) + 6)}
34
+
35
+ .. module:: {MODL.replace('vendor', 'const')}
36
+
37
+ This module contains the constant enumeration for **{name}**,
38
+ which is automatically generated from :class:`{MODL}.{NAME}`.
39
+
40
+ """
41
+ from collections import defaultdict
42
+ from typing import TYPE_CHECKING
43
+
44
+ from aenum import StrEnum, extend_enum
45
+
46
+ __all__ = ['{NAME}']
47
+
48
+ if TYPE_CHECKING:
49
+ from typing import Any, DefaultDict, Optional, Type
50
+
51
+
52
+ class {NAME}(StrEnum):
53
+ """[{NAME}] {DOCS}"""
54
+
55
+ if TYPE_CHECKING:
56
+ #: Short name of the option type.
57
+ opt_name: 'str'
58
+ #: Numeric value of the option type.
59
+ opt_value: 'int'
60
+
61
+ #: Mapping of members based on namespace.
62
+ __members_ns__: 'DefaultDict[str, dict[int, {NAME}]]' = defaultdict(dict)
63
+
64
+ def __new__(cls, value: 'int', name: 'str' = 'opt_unknown') -> 'Type[{NAME}]':
65
+ temp = '%s [%d]' % (name, value)
66
+
67
+ obj = str.__new__(cls, temp)
68
+ obj._value_ = temp
69
+
70
+ obj.opt_name = name
71
+ obj.opt_value = value
72
+
73
+ namespace = name.split('_', maxsplit=1)[0]
74
+ cls.__members_ns__[namespace][value] = obj
75
+
76
+ return obj
77
+
78
+ def __repr__(self) -> 'str':
79
+ return "<%s.%s: %d>" % (self.__class__.__name__, self.opt_name, self.opt_value)
80
+
81
+ def __str__(self) -> 'str':
82
+ return '%s [%d]' % (self.opt_name, self.opt_value)
83
+
84
+ def __int__(self) -> 'int':
85
+ return self.opt_value
86
+
87
+ def __lt__(self, other: '{NAME}') -> 'bool':
88
+ return self.opt_value < other
89
+
90
+ def __gt__(self, other: '{NAME}') -> 'bool':
91
+ return self.opt_value > other
92
+
93
+ def __le__(self, other: '{NAME}') -> 'bool':
94
+ return self.opt_value <= other
95
+
96
+ def __ge__(self, other: '{NAME}') -> 'bool':
97
+ return self.opt_value >= other
98
+
99
+ def __eq__(self, other: 'Any') -> 'bool':
100
+ return self.opt_value == other
101
+
102
+ def __ne__(self, other: 'Any') -> 'bool':
103
+ return self.opt_value != other
104
+
105
+ def __hash__(self) -> 'int':
106
+ return hash(self.opt_value)
107
+
108
+ {ENUM}
109
+
110
+ @staticmethod
111
+ def get(key: 'int | str', default: 'int' = -1, *, namespace: 'str' = 'opt') -> '{NAME}':
112
+ """Backport support for original codes.
113
+
114
+ Args:
115
+ key: Key to get enum item.
116
+ default: Default value if not found.
117
+ namespace: Namespace of the enum item.
118
+
119
+ :meta private:
120
+ """
121
+ if isinstance(key, int):
122
+ temp_ns = {NAME}.__members_ns__.get('opt', {{}}).copy()
123
+ temp_ns.update({NAME}.__members_ns__.get(namespace, {{}}))
124
+ if key in temp_ns:
125
+ return temp_ns[key]
126
+ return extend_enum({NAME}, '%s_unknown_%d' % (namespace, key), key, '%s_unknown' % namespace)
127
+ if key in {NAME}.__members__:
128
+ return getattr({NAME}, key)
129
+ return extend_enum({NAME}, key, default, key)
130
+
131
+ @classmethod
132
+ def _missing_(cls, value: 'int') -> '{NAME}':
133
+ """Lookup function used when value is not found.
134
+
135
+ Args:
136
+ value: Value to get enum item.
137
+
138
+ """
139
+ if not ({FLAG}):
140
+ raise ValueError('%r is not a valid %s' % (value, cls.__name__))
141
+ if value in cls.__members_ns__.get('opt', {{}}):
142
+ return cls.__members_ns__['opt'][value]
143
+ {MISS}
144
+ {'' if ''.join(MISS.splitlines()[-1:]).startswith('return') else 'return super()._missing_(value)'}
145
+ '''.strip() # type: Callable[[str, str, str, str, str, str], str]
146
+
147
+
148
+ class OptionType(Vendor):
149
+ """Option Types"""
150
+
151
+ #: Value limit checker.
152
+ FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFF'
153
+ #: Link to registry.
154
+ LINK = 'https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html'
155
+
156
+ def count(self, data: 'list[str]') -> 'Counter[str]':
157
+ """Count field records."""
158
+ return collections.Counter()
159
+
160
+ def request(self, text: 'str') -> 'dict[str, list[Tag]]': # type: ignore[override] # pylint: disable=signature-differs
161
+ """Fetch registry table.
162
+
163
+ Args:
164
+ text: Context from :attr:`~LinkType.LINK`.
165
+
166
+ Returns:
167
+ Rows (``tr``) from registry table (``table``).
168
+
169
+ """
170
+ soup = bs4.BeautifulSoup(text, 'html5lib')
171
+ table_1 = soup.select('table#table-1')[0]
172
+ table_3 = soup.select('table#table-3')[0]
173
+ table_4 = soup.select('table#table-4')[0]
174
+ table_7 = soup.select('table#table-7')[0]
175
+ table_8 = soup.select('table#table-8')[0]
176
+ table_10 = soup.select('table#table-10')[0]
177
+ return {
178
+ 'table-1': table_1.select('tr')[1:],
179
+ 'table-3': table_3.select('tr')[1:],
180
+ 'table-4': table_4.select('tr')[1:],
181
+ 'table-7': table_7.select('tr')[1:],
182
+ 'table-8': table_8.select('tr')[1:],
183
+ 'table-10': table_10.select('tr')[1:],
184
+ }
185
+
186
+ def process(self, data: 'dict[str, list[Tag]]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
187
+ """Process registry data.
188
+
189
+ Args:
190
+ data: Registry data.
191
+
192
+ Returns:
193
+ Enumeration fields and missing fields.
194
+
195
+ """
196
+ enum = [] # type: list[str]
197
+ miss = [
198
+ "return extend_enum(cls, 'opt_unknown_%d' % value, value, 'opt_unknown')",
199
+ ] # type: list[str]
200
+
201
+ for content in data['table-1']:
202
+ name = content.select('td')[0].text.strip()
203
+ temp = content.select('td')[1].text.strip()
204
+
205
+ try:
206
+ code = int(temp)
207
+
208
+ pref = f"{name}: 'OptionType' = {code}, {name!r}"
209
+ sufs = self.wrap_comment(name)
210
+
211
+ enum.append(f'#: {sufs}\n {pref}')
212
+ except ValueError:
213
+ opts = tuple(map(lambda x: int(x), temp.split('/')))
214
+
215
+ for code in opts:
216
+ pref = f"{name}_{code}: 'OptionType' = {code}, {name!r}"
217
+ sufs = self.wrap_comment(name)
218
+
219
+ enum.append(f'#: {sufs}\n {pref}')
220
+
221
+ for content in data['table-3']:
222
+ name = content.select('td')[0].text.strip()
223
+ code = content.select('td')[1].text.strip()
224
+
225
+ pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
226
+ sufs = self.wrap_comment(name)
227
+
228
+ enum.append(f'#: {sufs}\n {pref}')
229
+
230
+ for content in data['table-4']:
231
+ name = content.select('td')[0].text.strip()
232
+ code = content.select('td')[1].text.strip()
233
+
234
+ pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
235
+ sufs = self.wrap_comment(name)
236
+
237
+ enum.append(f'#: {sufs}\n {pref}')
238
+
239
+ for content in data['table-7']:
240
+ name = content.select('td')[0].text.strip()
241
+ code = content.select('td')[1].text.strip()
242
+
243
+ pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
244
+ sufs = self.wrap_comment(name)
245
+
246
+ enum.append(f'#: {sufs}\n {pref}')
247
+
248
+ for content in data['table-8']:
249
+ name = content.select('td')[0].text.strip()
250
+ code = content.select('td')[1].text.strip()
251
+
252
+ pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
253
+ sufs = self.wrap_comment(name)
254
+
255
+ enum.append(f'#: {sufs}\n {pref}')
256
+
257
+ for content in data['table-10']:
258
+ name = content.select('td')[0].text.strip()
259
+ code = content.select('td')[1].text.strip()
260
+
261
+ pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
262
+ sufs = self.wrap_comment(name)
263
+
264
+ enum.append(f'#: {sufs}\n {pref}')
265
+
266
+ return enum, miss
267
+
268
+ def context(self, soup: 'dict[str, list[Tag]]') -> 'str': # type: ignore[override]
269
+ """Generate constant context.
270
+
271
+ Args:
272
+ data: CSV data.
273
+
274
+ Returns:
275
+ Constant context.
276
+
277
+ """
278
+ enum, miss = self.process(soup)
279
+
280
+ ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum)).strip()
281
+ MISS = '\n '.join(map(lambda s: s.rstrip(), miss)).strip()
282
+
283
+ return LINE(self.NAME, self.DOCS, self.FLAG, ENUM, MISS, self.__module__)
284
+
285
+
286
+ if __name__ == '__main__':
287
+ sys.exit(OptionType()) # type: ignore[arg-type]
@@ -0,0 +1,81 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Record Types
3
+ ==================
4
+
5
+ .. module:: pcapkit.vendor.pcapng.record_type
6
+
7
+ This module contains the vendor crawler for **Record Types**,
8
+ which is automatically generating :class:`pcapkit.const.pcapng.record_type.RecordType`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import sys
14
+ from typing import TYPE_CHECKING
15
+
16
+ import bs4
17
+
18
+ from pcapkit.vendor.default import Vendor
19
+
20
+ __all__ = ['RecordType']
21
+
22
+ if TYPE_CHECKING:
23
+ from collections import Counter
24
+
25
+ from bs4.element import Tag
26
+
27
+
28
+ class RecordType(Vendor):
29
+ """Record Types"""
30
+
31
+ #: Value limit checker.
32
+ FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFF'
33
+ #: Link to registry.
34
+ LINK = 'https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html'
35
+
36
+ def count(self, data: 'list[str]') -> 'Counter[str]':
37
+ """Count field records."""
38
+ return collections.Counter()
39
+
40
+ def request(self, text: 'str') -> 'list[Tag]': # type: ignore[override] # pylint: disable=signature-differs
41
+ """Fetch registry table.
42
+
43
+ Args:
44
+ text: Context from :attr:`~LinkType.LINK`.
45
+
46
+ Returns:
47
+ Rows (``tr``) from registry table (``table``).
48
+
49
+ """
50
+ soup = bs4.BeautifulSoup(text, 'html5lib')
51
+ table_1 = soup.select('table#table-6')[0]
52
+ return table_1.select('tr')[1:]
53
+
54
+ def process(self, data: 'list[Tag]') -> 'tuple[list[str], list[str]]':
55
+ """Process registry data.
56
+
57
+ Args:
58
+ data: Registry data.
59
+
60
+ Returns:
61
+ Enumeration fields and missing fields.
62
+
63
+ """
64
+ enum = [] # type: list[str]
65
+ miss = [
66
+ "extend_enum(cls, 'Unassigned_0x%04x' % value, value)",
67
+ 'return cls(value)'
68
+ ]
69
+ for content in data:
70
+ name = content.select('td')[0].text.strip()
71
+ temp = content.select('td')[1].text.strip()
72
+
73
+ pref = f'{name} = {temp}'
74
+ sufs = self.wrap_comment(name)
75
+
76
+ enum.append(f'#: {sufs}\n {pref}')
77
+ return enum, miss
78
+
79
+
80
+ if __name__ == '__main__':
81
+ sys.exit(RecordType()) # type: ignore[arg-type]
@@ -0,0 +1,81 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Secrets Types
3
+ ===================
4
+
5
+ .. module:: pcapkit.vendor.pcapng.secrets_type
6
+
7
+ This module contains the vendor crawler for **Secrets Types**,
8
+ which is automatically generating :class:`pcapkit.const.pcapng.secrets_type.SecretsType`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import sys
14
+ from typing import TYPE_CHECKING
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ if TYPE_CHECKING:
19
+ from collections import Counter
20
+
21
+ __all__ = ['SecretsType']
22
+
23
+ #: Secrets type registry.
24
+ DATA = {
25
+ 0x544c534b: 'TLS Key Log', # NSS Key Log Format
26
+ 0x57474b4c: 'WireGuard Key Log',
27
+ 0x5a4e574b: 'ZigBee NWK Key', # ZigBee Specification
28
+ 0x5a415053: 'ZigBee APS Key', # ZigBee Specification
29
+ } # type: dict[int, str]
30
+
31
+
32
+ class SecretsType(Vendor):
33
+ """Secrets Types"""
34
+
35
+ #: Value limit checker.
36
+ FLAG = 'isinstance(value, int) and 0x00000000 <= value <= 0xFFFFFFFF'
37
+
38
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
39
+ """Fetch registry data.
40
+
41
+ Returns:
42
+ Registry data (:data:`~pcapkit.vendor.pcapng.secrets_type.DATA`).
43
+
44
+ """
45
+ return DATA
46
+
47
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
48
+ """Count field records.
49
+
50
+ Args:
51
+ data: Registry data.
52
+
53
+ Returns:
54
+ Field recordings.
55
+
56
+ """
57
+ return collections.Counter(map(self.safe_name, data.values()))
58
+
59
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
60
+ """Process registry data.
61
+
62
+ Args:
63
+ data: Registry data.
64
+
65
+ Returns:
66
+ Enumeration fields and missing fields.
67
+
68
+ """
69
+ enum = [] # type: list[str]
70
+ miss = [
71
+ "extend_enum(cls, 'Unassigned_0x%08x' % value, value)",
72
+ 'return cls(value)'
73
+ ]
74
+ for code, name in DATA.items():
75
+ renm = self.rename(name, code) # type: ignore[arg-type]
76
+ enum.append(f"{renm} = 0x{code:08x}".ljust(76))
77
+ return enum, miss
78
+
79
+
80
+ if __name__ == '__main__':
81
+ sys.exit(SecretsType()) # type: ignore[arg-type]