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,95 @@
1
+ # -*- coding: utf-8 -*-
2
+ """ToS ECN Field
3
+ ===================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.tos_ecn
6
+
7
+ This module contains the vendor crawler for **ToS ECN Field**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.tos_ecn.ToSECN`.
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__ = ['ToSECN']
22
+
23
+ #: ToS registry.
24
+ DATA = {
25
+ 0b00: 'Not-ECT',
26
+ 0b01: 'ECT(1)',
27
+ 0b10: 'ECT(0)',
28
+ 0b11: 'CE',
29
+ } # type: dict[int, str]
30
+
31
+
32
+ class ToSECN(Vendor):
33
+ """ToS ECN Field"""
34
+
35
+ #: Value limit checker.
36
+ FLAG = 'isinstance(value, int) and 0b00 <= value <= 0b11'
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.ipv4.tos_ecn.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 rename(self, name: 'str', code: 'int') -> 'str': # type: ignore[override] # pylint: disable=arguments-differ
60
+ """Rename duplicated fields.
61
+
62
+ Args:
63
+ name: Field name.
64
+ code: Field code.
65
+
66
+ Returns:
67
+ Revised field name.
68
+
69
+ """
70
+ if self.record[self.safe_name(name)] > 1 or self.safe_name(name).upper() in ['UNASSIGNED', 'RESERVED']:
71
+ name = f'{name} [0b{bin(code)[2:].zfill(2)}]'
72
+ return self.safe_name(name)
73
+
74
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
75
+ """Process registry data.
76
+
77
+ Args:
78
+ data: Registry data.
79
+
80
+ Returns:
81
+ Enumeration fields and missing fields.
82
+
83
+ """
84
+ enum = [] # type: list[str]
85
+ miss = [
86
+ "return extend_enum(cls, 'Unassigned_0b%s' % bin(value)[2:].zfill(2), value)",
87
+ ]
88
+ for code, name in DATA.items():
89
+ renm = self.rename(name, code)
90
+ enum.append(f"{renm} = 0b{bin(code)[2:].zfill(2)}".ljust(76))
91
+ return enum, miss
92
+
93
+
94
+ if __name__ == '__main__':
95
+ sys.exit(ToSECN()) # type: ignore[arg-type]
@@ -0,0 +1,84 @@
1
+ # -*- coding: utf-8 -*-
2
+ """ToS (DS Field) Precedence
3
+ ===============================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.tos_pre
6
+
7
+ This module contains the vendor crawler for **ToS (DS Field) Precedence**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.tos_pre.ToSPrecedence`.
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__ = ['ToSPrecedence']
22
+
23
+ #: ToS registry.
24
+ DATA = {
25
+ 0b111: 'Network Control',
26
+ 0b110: 'Internetwork Control',
27
+ 0b101: 'CRITIC/ECP',
28
+ 0b100: 'Flash Override',
29
+ 0b011: 'Flash',
30
+ 0b010: 'Immediate',
31
+ 0b001: 'Priority',
32
+ 0b000: 'Routine',
33
+ } # type: dict[int, str]
34
+
35
+
36
+ class ToSPrecedence(Vendor):
37
+ """ToS (DS Field) Precedence"""
38
+
39
+ #: Value limit checker.
40
+ FLAG = 'isinstance(value, int) and 0b000 <= value <= 0b111'
41
+
42
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
43
+ """Fetch registry data.
44
+
45
+ Returns:
46
+ Registry data (:data:`~pcapkit.vendor.ipv4.tos_pre.DATA`).
47
+
48
+ """
49
+ return DATA
50
+
51
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
52
+ """Count field records.
53
+
54
+ Args:
55
+ data: Registry data.
56
+
57
+ Returns:
58
+ Field recordings.
59
+
60
+ """
61
+ return collections.Counter(map(self.safe_name, data.values()))
62
+
63
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
64
+ """Process registry data.
65
+
66
+ Args:
67
+ data: Registry data.
68
+
69
+ Returns:
70
+ Enumeration fields and missing fields.
71
+
72
+ """
73
+ enum = [] # type: list[str]
74
+ miss = [
75
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
76
+ ]
77
+ for code, name in DATA.items():
78
+ renm = self.rename(name, code) # type: ignore[arg-type]
79
+ enum.append(f"{renm} = {code}".ljust(76))
80
+ return enum, miss
81
+
82
+
83
+ if __name__ == '__main__':
84
+ sys.exit(ToSPrecedence()) # type: ignore[arg-type]
@@ -0,0 +1,78 @@
1
+ # -*- coding: utf-8 -*-
2
+ """ToS (DS Field) Reliability
3
+ ================================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.tos_rel
6
+
7
+ This module contains the vendor crawler for **ToS (DS Field) Reliability**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.tos_rel.ToSReliability`.
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__ = ['ToSReliability']
22
+
23
+ #: ToS registry.
24
+ DATA = {
25
+ 0: 'Normal',
26
+ 1: 'High',
27
+ } # type: dict[int, str]
28
+
29
+
30
+ class ToSReliability(Vendor):
31
+ """ToS (DS Field) Reliability"""
32
+
33
+ #: Value limit checker.
34
+ FLAG = 'isinstance(value, int) and 0 <= value <= 1'
35
+
36
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
37
+ """Fetch registry data.
38
+
39
+ Returns:
40
+ Registry data (:data:`~pcapkit.vendor.ipv4.tos_rel.DATA`).
41
+
42
+ """
43
+ return DATA
44
+
45
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
46
+ """Count field records.
47
+
48
+ Args:
49
+ data: Registry data.
50
+
51
+ Returns:
52
+ Field recordings.
53
+
54
+ """
55
+ return collections.Counter(map(self.safe_name, data.values()))
56
+
57
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
58
+ """Process registry data.
59
+
60
+ Args:
61
+ data: Registry data.
62
+
63
+ Returns:
64
+ Enumeration fields and missing fields.
65
+
66
+ """
67
+ enum = [] # type: list[str]
68
+ miss = [
69
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
70
+ ]
71
+ for code, name in DATA.items():
72
+ renm = self.rename(name, code).upper() # type: ignore[arg-type]
73
+ enum.append(f"{renm} = {code}".ljust(76))
74
+ return enum, miss
75
+
76
+
77
+ if __name__ == '__main__':
78
+ sys.exit(ToSReliability()) # type: ignore[arg-type]
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ """ToS (DS Field) Throughput
3
+ ===============================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.tos_thr
6
+
7
+ This module contains the vendor crawler for **ToS (DS Field) Throughput**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.tos_thr.ToSThroughput`.
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__ = ['ToSThroughput']
22
+
23
+ #: ToS registry.
24
+ DATA = {
25
+ 0: 'Normal',
26
+ 1: 'High',
27
+ } # type: dict[int, str]
28
+
29
+
30
+ class ToSThroughput(Vendor):
31
+ """ToS (DS Field) Throughput"""
32
+
33
+ FLAG = 'isinstance(value, int) and 0 <= value <= 1'
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.ipv4.tos_thr.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).upper() # 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(ToSThroughput()) # type: ignore[arg-type]
@@ -0,0 +1,79 @@
1
+ # -*- coding: utf-8 -*-
2
+ """TS Flag
3
+ =============
4
+
5
+ .. module:: pcapkit.vendor.ipv4.ts_flag
6
+
7
+ This module contains the vendor crawler for **TS Flag**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.ts_flag.TSFlag`.
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__ = ['TSFlag']
22
+
23
+ #: TS flag registry [:rfc:`719#section-3.1`].
24
+ DATA = {
25
+ 0: 'Timestamp Only',
26
+ 1: 'IP with Timestamp',
27
+ 3: 'Prespecified IP with Timestamp',
28
+ } # type: dict[int, str]
29
+
30
+
31
+ class TSFlag(Vendor):
32
+ """TS Flag"""
33
+
34
+ #: Value limit checker.
35
+ FLAG = 'isinstance(value, int) and 0b0000 <= value <= 0b1111'
36
+
37
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
38
+ """Fetch registry data.
39
+
40
+ Returns:
41
+ Registry data (:data:`~pcapkit.vendor.ipv4.tos_pre.DATA`).
42
+
43
+ """
44
+ return DATA
45
+
46
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
47
+ """Count field records.
48
+
49
+ Args:
50
+ data: Registry data.
51
+
52
+ Returns:
53
+ Field recordings.
54
+
55
+ """
56
+ return collections.Counter(map(self.safe_name, data.values()))
57
+
58
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
59
+ """Process registry data.
60
+
61
+ Args:
62
+ data: Registry data.
63
+
64
+ Returns:
65
+ Enumeration fields and missing fields.
66
+
67
+ """
68
+ enum = [] # type: list[str]
69
+ miss = [
70
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
71
+ ]
72
+ for code, name in DATA.items():
73
+ renm = self.rename(name, code) # type: ignore[arg-type]
74
+ enum.append(f"{renm} = {code}".ljust(76))
75
+ return enum, miss
76
+
77
+
78
+ if __name__ == '__main__':
79
+ sys.exit(TSFlag()) # type: ignore[arg-type]
@@ -0,0 +1,53 @@
1
+ # -*- coding: utf-8 -*-
2
+ # pylint: disable=unused-import
3
+ """:class:`~pcapkit.protocols.internet.ipv6.IPv6` Vendor Crawlers
4
+ ====================================================================
5
+
6
+ .. module:: pcapkit.vendor.ipv6
7
+
8
+ This module contains all vendor crawlers of
9
+ :class:`~pcapkit.protocols.internet.ipv6.IPv6` implementations. Available
10
+ crawlers include:
11
+
12
+ .. list-table::
13
+
14
+ * - :class:`IPv6_Extension_Header <pcapkit.vendor.ipv6.extension_header.ExtensionHeader>`
15
+ - IPv6 Extension Header Types [*]_
16
+ * - :class:`IPv6_Option <pcapkit.vendor.ipv6.option.Option>`
17
+ - Destination Options and Hop-by-Hop Options [*]_
18
+ * - :class:`IPv6_OptionAction <pcapkit.vendor.ipv6.option_action.OptionAction>`
19
+ - Option Actions [*]_
20
+ * - :class:`IPv6_QSFunction <pcapkit.vendor.ipv6.qs_function.QSFunction>`
21
+ - IPv6 QS Functions
22
+ * - :class:`IPv6_RouterAlert <pcapkit.vendor.ipv6.router_alert.RouterAlert>`
23
+ - IPv6 Router Alert Option Values [*]_
24
+ * - :class:`IPv6_Routing <pcapkit.vendor.ipv6.routing.Routing>`
25
+ - Routing Types [*]_
26
+ * - :class:`IPv6_SeedID <pcapkit.vendor.ipv6.seed_id.SeedID>`
27
+ - Seed-ID Types
28
+ * - :class:`IPv6_SMFDPDMode <pcapkit.vendor.ipv6.smf_dpd_mode.SMFDPDMode>`
29
+ - Simplified Multicast Forwarding Duplicate Packet Detection (``SMF_DPD``) Options
30
+ * - :class:`IPv6_TaggerID <pcapkit.vendor.ipv6.tagger_id.TaggerID>`
31
+ - Tagger-ID Types [*]_
32
+
33
+ .. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#extension-header
34
+ .. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-2
35
+ .. [*] https://www.rfc-editor.org/rfc/rfc8200#section-4.2
36
+ .. [*] https://www.iana.org/assignments/ipv6-routeralert-values/ipv6-routeralert-values.xhtml#ipv6-routeralert-values-1
37
+ .. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-3
38
+ .. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#taggerId-types
39
+
40
+ """
41
+
42
+ from pcapkit.vendor.ipv6.extension_header import ExtensionHeader as IPv6_ExtensionHeader
43
+ from pcapkit.vendor.ipv6.option import Option as IPv6_Option
44
+ from pcapkit.vendor.ipv6.option_action import OptionAction as IPv6_OptionAction
45
+ from pcapkit.vendor.ipv6.qs_function import QSFunction as IPv6_QSFunction
46
+ from pcapkit.vendor.ipv6.router_alert import RouterAlert as IPv6_RouterAlert
47
+ from pcapkit.vendor.ipv6.routing import Routing as IPv6_Routing
48
+ from pcapkit.vendor.ipv6.seed_id import SeedID as IPv6_SeedID
49
+ from pcapkit.vendor.ipv6.smf_dpd_mode import SMFDPDMode as IPv6_SMFDPDMode
50
+ from pcapkit.vendor.ipv6.tagger_id import TaggerID as IPv6_TaggerID
51
+
52
+ __all__ = ['IPv6_ExtensionHeader', 'IPv6_Option', 'IPv6_QSFunction', 'IPv6_RouterAlert', 'IPv6_Routing',
53
+ 'IPv6_SeedID', 'IPv6_SMFDPDMode', 'IPv6_TaggerID', 'IPv6_OptionAction']
@@ -0,0 +1,171 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IPv6 Extension Header Types
3
+ =================================
4
+
5
+ .. module:: pcapkit.vendor.ipv6.extension_header
6
+
7
+ This module contains the vendor crawler for **IPv6 Extension Header Types**,
8
+ which is automatically generating :class:`pcapkit.const.ipv6.extension_header.ExtensionHeader`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import csv
14
+ import re
15
+ import sys
16
+ from typing import TYPE_CHECKING
17
+
18
+ from pcapkit.vendor.default import Vendor
19
+
20
+ if TYPE_CHECKING:
21
+ from collections import Counter
22
+ from typing import Callable
23
+
24
+ __all__ = ['ExtensionHeader']
25
+
26
+ LINE = lambda NAME, DOCS, ENUM, MODL: f'''\
27
+ # -*- coding: utf-8 -*-
28
+ # pylint: disable=line-too-long,consider-using-f-string
29
+ """{(name := DOCS.split(' [', maxsplit=1)[0])}
30
+ {'=' * (len(name) + 6)}
31
+
32
+ .. module:: {MODL.replace('vendor', 'const')}
33
+
34
+ This module contains the constant enumeration for **{name}**,
35
+ which is automatically generated from :class:`{MODL}.{NAME}`.
36
+
37
+ """
38
+
39
+ from aenum import IntEnum, extend_enum
40
+
41
+ __all__ = ['{NAME}']
42
+
43
+
44
+ class {NAME}(IntEnum):
45
+ """[{NAME}] {DOCS}"""
46
+
47
+ {ENUM}
48
+
49
+ @staticmethod
50
+ def get(key: 'int | str', default: 'int' = -1) -> '{NAME}':
51
+ """Backport support for original codes.
52
+
53
+ Args:
54
+ key: Key to get enum item.
55
+ default: Default value if not found.
56
+
57
+ :meta private:
58
+ """
59
+ if isinstance(key, int):
60
+ return {NAME}(key)
61
+ return {NAME}[key] # type: ignore[misc]
62
+ ''' # type: Callable[[str, str, str, str], str]
63
+
64
+
65
+ class ExtensionHeader(Vendor):
66
+ """IPv6 Extension Header Types"""
67
+
68
+ #: Link to registry.
69
+ LINK = 'https://www.iana.org/assignments/protocol-numbers/protocol-numbers-1.csv'
70
+
71
+ def count(self, data: 'list[str]') -> 'Counter[str]':
72
+ """Count field records.
73
+
74
+ Args:
75
+ data: CSV data.
76
+
77
+ Returns:
78
+ Field recordings.
79
+
80
+ """
81
+ reader = csv.reader(data)
82
+ next(reader) # header
83
+ return collections.Counter(map(lambda item: self.safe_name(item[1] or item[2]),
84
+ filter(lambda item: len(item[0].split('-')) != 2, reader)))
85
+
86
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
87
+ """Process CSV data.
88
+
89
+ Args:
90
+ data: CSV data.
91
+
92
+ Returns:
93
+ Enumeration fields and missing fields.
94
+
95
+ """
96
+ reader = csv.reader(data)
97
+ next(reader) # header
98
+
99
+ enum = [] # type: list[str]
100
+ miss = [] # type: list[str]
101
+ for item in reader:
102
+ flag = item[3]
103
+ if flag != 'Y':
104
+ continue
105
+
106
+ name = item[1]
107
+ rfcs = item[4]
108
+
109
+ temp = [] # type: list[str]
110
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
111
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
112
+ #temp.append(f'[{rfc[:3]} {rfc[3:]}]')
113
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
114
+ else:
115
+ temp.append(f'[{rfc}]'.replace('_', ' '))
116
+ lrfc = re.sub(r'( )( )*', ' ', f" {''.join(temp)}".replace('\n', ' ')) if rfcs else ''
117
+
118
+ subd = re.sub(r'( )( )*', ' ', item[2].replace('\n', ' '))
119
+ tmp1 = f' {subd}' if item[2] else ''
120
+
121
+ split = name.split(' (', 1)
122
+ if len(split) == 2:
123
+ name, cmmt = split[0], f" ({split[1]}"
124
+ else:
125
+ name, cmmt = name, '' # pylint: disable=self-assigning-variable
126
+
127
+ if name:
128
+ tmp1 = f',{tmp1}' if tmp1 else ''
129
+ else:
130
+ name, tmp1 = item[2], ''
131
+ desc = self.wrap_comment(f'{name}{tmp1}{lrfc}{cmmt}')
132
+
133
+ try:
134
+ code, _ = item[0], int(item[0])
135
+ if not name:
136
+ name, desc = item[2], ''
137
+ renm = self.rename(name, code, original=item[1])
138
+
139
+ pres = f"{renm} = {code}"
140
+ sufs = f"#: {desc}"
141
+
142
+ #if len(pres) > 74:
143
+ # sufs = f"\n{' '*80}{sufs}"
144
+
145
+ #enum.append(f'{pres.ljust(76)}{sufs}')
146
+ enum.append(f'{sufs}\n {pres}')
147
+ except ValueError:
148
+ start, stop = item[0].split('-')
149
+
150
+ miss.append(f'if {start} <= value <= {stop}:')
151
+ miss.append(f' #: {desc}')
152
+ miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%d' % value, value)")
153
+ return enum, miss
154
+
155
+ def context(self, data: 'list[str]') -> 'str':
156
+ """Generate constant context.
157
+
158
+ Args:
159
+ data: CSV data.
160
+
161
+ Returns:
162
+ Constant context.
163
+
164
+ """
165
+ enum, _ = self.process(data)
166
+ ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum))
167
+ return LINE(self.NAME, self.DOCS, ENUM, self.__module__)
168
+
169
+
170
+ if __name__ == '__main__':
171
+ sys.exit(ExtensionHeader()) # type: ignore[arg-type]