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,147 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Binding Update Flags
3
+ ==========================
4
+
5
+ .. module:: pcapkit.vendor.mh.binding_update_flag
6
+
7
+ This module contains the vendor crawler for **Binding Update Flags**,
8
+ which is automatically generating :class:`pcapkit.const.mh.binding_update_flag.BindingUpdateFlag`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+ from typing import TYPE_CHECKING
16
+
17
+ from pcapkit.vendor.default import Vendor
18
+
19
+ __all__ = ['BindingUpdateFlag']
20
+
21
+ if TYPE_CHECKING:
22
+ from typing import Callable
23
+
24
+ LINE = lambda NAME, DOCS, FLAG, ENUM, MODL: f'''\
25
+ # -*- coding: utf-8 -*-
26
+ # pylint: disable=line-too-long,consider-using-f-string
27
+ """{(name := DOCS.split(' [', maxsplit=1)[0])}
28
+ {'=' * (len(name) + 6)}
29
+
30
+ .. module:: {MODL.replace('vendor', 'const')}
31
+
32
+ This module contains the constant enumeration for **{name}**,
33
+ which is automatically generated from :class:`{MODL}.{NAME}`.
34
+
35
+ """
36
+
37
+ from aenum import IntFlag
38
+
39
+ __all__ = ['{NAME}']
40
+
41
+
42
+ class {NAME}(IntFlag):
43
+ """[{NAME}] {DOCS}"""
44
+
45
+ {ENUM}
46
+
47
+ @staticmethod
48
+ def get(key: 'int | str', default: 'int' = -1) -> '{NAME}':
49
+ """Backport support for original codes.
50
+
51
+ Args:
52
+ key: Key to get enum item.
53
+ default: Default value if not found.
54
+
55
+ :meta private:
56
+ """
57
+ if isinstance(key, int):
58
+ return {NAME}(key)
59
+ return {NAME}[key] # type: ignore[misc]
60
+
61
+ @classmethod
62
+ def _missing_(cls, value: 'int') -> '{NAME}':
63
+ """Lookup function used when value is not found.
64
+
65
+ Args:
66
+ value: Value to get enum item.
67
+
68
+ """
69
+ if not ({FLAG}):
70
+ raise ValueError('%r is not a valid %s' % (value, cls.__name__))
71
+ return cls(value)
72
+ ''' # type: Callable[[str, str, str, str, str], str]
73
+
74
+
75
+ class BindingUpdateFlag(Vendor):
76
+ """Binding Update Flags"""
77
+
78
+ #: Value limit checker.
79
+ FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFF'
80
+ #: Link to registry.
81
+ LINK = 'https://www.iana.org/assignments/mobility-parameters/mobility-parameters-11.csv'
82
+
83
+ def process(self, data: 'list[str]') -> 'list[str]': # type: ignore[override] # pylint: disable=arguments-differ,arguments-renamed
84
+ """Process CSV data.
85
+
86
+ Args:
87
+ data: CSV data.
88
+
89
+ Returns:
90
+ Enumeration fields and missing fields.
91
+
92
+ """
93
+ reader = csv.reader(data)
94
+ next(reader) # header
95
+
96
+ enum = [] # type: list[str]
97
+ for item in reader:
98
+ long = item[0]
99
+ rfcs = item[2]
100
+
101
+ temp = [] # type: list[str]
102
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
103
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
104
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
105
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
106
+ else:
107
+ temp.append(f'[{rfc}]'.replace('_', ' '))
108
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
109
+
110
+ split = long.split(' (', 1)
111
+ if len(split) == 2:
112
+ name = split[0]
113
+ cmmt = f" ({split[1]}"
114
+ else:
115
+ name, cmmt = long, ''
116
+ desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
117
+
118
+ code, code_val = item[1], int(item[1], base=16)
119
+ renm = self.rename(name, code, original=long)
120
+
121
+ pres = f"{renm} = 0x{code_val:04x}"
122
+ sufs = f'#: {desc}'
123
+
124
+ # if len(pres) > 74:
125
+ # sufs = f"\n{' '*80}{sufs}"
126
+
127
+ # enum.append(f'{pres.ljust(76)}{sufs}')
128
+ enum.append(f'{sufs}\n {pres}')
129
+ return enum
130
+
131
+ def context(self, data: 'list[str]') -> 'str': # pylint: disable=arguments-differ,arguments-renamed
132
+ """Generate constant context.
133
+
134
+ Args:
135
+ soup: Parsed HTML source.
136
+
137
+ Returns:
138
+ Constant context.
139
+
140
+ """
141
+ enum = self.process(data)
142
+ ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum))
143
+ return LINE(self.NAME, self.DOCS, self.FLAG, ENUM, self.__module__)
144
+
145
+
146
+ if __name__ == '__main__':
147
+ sys.exit(BindingUpdateFlag()) # type: ignore[arg-type]
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ """CGA Extension Type Values
3
+ ===============================
4
+
5
+ .. module:: pcapkit.vendor.mh.cga_extension
6
+
7
+ This module contains the vendor crawler for **CGA Extension Type Values**,
8
+ which is automatically generating :class:`pcapkit.const.mh.cga_extension.CGAExtension`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['CGAExtension']
19
+
20
+
21
+ class CGAExtension(Vendor):
22
+ """CGA Extension Type Values"""
23
+
24
+ #: Value limit checker.
25
+ FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFF'
26
+ #: Link to registry.
27
+ LINK = 'https://www.iana.org/assignments/cga-message-types/cga-message-types-2.csv'
28
+
29
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
30
+ """Process CSV data.
31
+
32
+ Args:
33
+ data: CSV data.
34
+
35
+ Returns:
36
+ Enumeration fields and missing fields.
37
+
38
+ """
39
+ reader = csv.reader(data)
40
+ next(reader) # header
41
+
42
+ enum = [] # type: list[str]
43
+ miss = [] # type: list[str]
44
+ for item in reader:
45
+ long = item[1]
46
+ rfcs = item[2]
47
+
48
+ temp = [] # type: list[str]
49
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
50
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
51
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
52
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
53
+ else:
54
+ temp.append(f'[{rfc}]'.replace('_', ' '))
55
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
56
+
57
+ split = long.split(' (', 1)
58
+ if len(split) == 2:
59
+ name = split[0]
60
+ cmmt = f" ({split[1]}"
61
+ else:
62
+ name, cmmt = long, ''
63
+ desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
64
+
65
+ try:
66
+ code, _ = item[0], int(item[0], base=16)
67
+ renm = self.rename(name, code, original=long)
68
+
69
+ pres = f"{renm} = {code}"
70
+ sufs = f'#: {desc}'
71
+
72
+ # if len(pres) > 74:
73
+ # sufs = f"\n{' '*80}{sufs}"
74
+
75
+ # enum.append(f'{pres.ljust(76)}{sufs}')
76
+ enum.append(f'{sufs}\n {pres}')
77
+ except ValueError:
78
+ start, stop = item[0].split('-')
79
+
80
+ miss.append(f'if {start} <= value <= {stop}:')
81
+ miss.append(f' #: {desc}')
82
+ miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%04x' % value, value)")
83
+
84
+ # TODO: figure out how to handle this programmatically
85
+ miss.append('#: Unspecified in the IANA registry')
86
+ miss.append("return extend_enum(cls, 'Unassigned_%04x' % value, value)")
87
+ return enum, miss
88
+
89
+
90
+ if __name__ == '__main__':
91
+ sys.exit(CGAExtension()) # type: ignore[arg-type]
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ """CGA SEC
3
+ =============
4
+
5
+ .. module:: pcapkit.vendor.mh.cga_sec
6
+
7
+ This module contains the vendor crawler for **CGA SEC**,
8
+ which is automatically generating :class:`pcapkit.const.mh.cga_sec.CGASec`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['CGASec']
19
+
20
+
21
+ class CGASec(Vendor):
22
+ """CGA SEC"""
23
+
24
+ #: Value limit checker.
25
+ FLAG = 'isinstance(value, int) and 0 <= value <= 0b111'
26
+ #: Link to registry.
27
+ LINK = 'https://www.iana.org/assignments/cga-message-types/cga-message-types-3.csv'
28
+
29
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
30
+ """Process CSV data.
31
+
32
+ Args:
33
+ data: CSV data.
34
+
35
+ Returns:
36
+ Enumeration fields and missing fields.
37
+
38
+ """
39
+ reader = csv.reader(data)
40
+ next(reader) # header
41
+
42
+ enum = [] # type: list[str]
43
+ miss = [] # type: list[str]
44
+ for item in reader:
45
+ long = item[1]
46
+ rfcs = item[2]
47
+
48
+ temp = [] # type: list[str]
49
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
50
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
51
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
52
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
53
+ else:
54
+ temp.append(f'[{rfc}]'.replace('_', ' '))
55
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
56
+
57
+ split = long.split(' (', 1)
58
+ if len(split) == 2:
59
+ name = split[0]
60
+ cmmt = f" ({split[1]}"
61
+ else:
62
+ name, cmmt = long, ''
63
+ desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
64
+
65
+ try:
66
+ code, _ = item[0], int(item[0], base=2)
67
+ renm = self.rename(name, code, original=long)
68
+
69
+ pres = f"{renm} = 0b{code}"
70
+ sufs = f'#: {desc}'
71
+
72
+ # if len(pres) > 74:
73
+ # sufs = f"\n{' '*80}{sufs}"
74
+
75
+ # enum.append(f'{pres.ljust(76)}{sufs}')
76
+ enum.append(f'{sufs}\n {pres}')
77
+ except ValueError:
78
+ start, stop = item[0].split('-')
79
+
80
+ miss.append(f'if {start} <= value <= {stop}:')
81
+ miss.append(f' #: {desc}')
82
+ miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%s' % bin(value)[2:], value)")
83
+
84
+ # TODO: figure out how to handle this programmatically
85
+ miss.append('#: Unspecified in the IANA registry')
86
+ miss.append("return extend_enum(cls, 'Unassigned_%s' % bin(value)[2:], value)")
87
+ return enum, miss
88
+
89
+
90
+ if __name__ == '__main__':
91
+ sys.exit(CGASec()) # type: ignore[arg-type]
@@ -0,0 +1,74 @@
1
+ # -*- coding: utf-8 -*-
2
+ """CGA Extension Type Tags
3
+ =============================
4
+
5
+ .. module:: pcapkit.vendor.mh.cga_type
6
+
7
+ This module contains the vendor crawler for **CGA Extension Type Tags**,
8
+ which is automatically generating :class:`pcapkit.const.mh.cga_type.CGAType`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['CGAType']
19
+
20
+
21
+ class CGAType(Vendor):
22
+ """CGA Extension Type Tags"""
23
+
24
+ #: Value limit checker.
25
+ FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF'
26
+ #: Link to registry.
27
+ LINK = 'https://www.iana.org/assignments/cga-message-types/cga-message-types-1.csv'
28
+
29
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
30
+ """Process CSV data.
31
+
32
+ Args:
33
+ data: CSV data.
34
+
35
+ Returns:
36
+ Enumeration fields and missing fields.
37
+
38
+ """
39
+ reader = csv.reader(data)
40
+ next(reader) # header
41
+
42
+ enum = [] # type: list[str]
43
+ miss = [
44
+ "return extend_enum(cls, 'Tag_%s' % ('_'.join(__import__('textwrap').wrap('%032x' % value, 4))), value)",
45
+ ]
46
+ for item in reader:
47
+ long = item[0]
48
+ rfcs = item[1]
49
+
50
+ temp = [] # type: list[str]
51
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
52
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
53
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
54
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
55
+ else:
56
+ temp.append(f'[{rfc}]'.replace('_', ' '))
57
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
58
+
59
+ name = 'Tag_%s' % long[2:].replace(' ', '_')
60
+ desc = self.wrap_comment(f'{long}{tmp1}')
61
+
62
+ pres = f"{name} = {long.replace(' ', '_')}"
63
+ sufs = f'#: {desc}'
64
+
65
+ # if len(pres) > 74:
66
+ # sufs = f"\n{' '*80}{sufs}"
67
+
68
+ # enum.append(f'{pres.ljust(76)}{sufs}')
69
+ enum.append(f'{sufs}\n {pres}')
70
+ return enum, miss
71
+
72
+
73
+ if __name__ == '__main__':
74
+ sys.exit(CGAType()) # type: ignore[arg-type]
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IPv4 DHCP Support Mode Flags
3
+ ==================================
4
+
5
+ .. module:: pcapkit.vendor.mh.dhcp_support_mode
6
+
7
+ This module contains the vendor crawler for **IPv4 DHCP Support Mode Flags**,
8
+ which is automatically generating :class:`pcapkit.const.mh.dhcp_support_mode.DHCPSupportMode`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['DHCPSupportMode']
19
+
20
+
21
+ class DHCPSupportMode(Vendor):
22
+ """IPv4 DHCP Support Mode Flags"""
23
+
24
+ #: Value limit checker.
25
+ FLAG = 'isinstance(value, int) and 0 <= value <= 1'
26
+ #: Link to registry.
27
+ LINK = 'https://www.iana.org/assignments/mobility-parameters/dhcp-support-mode.csv'
28
+
29
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
30
+ """Process CSV data.
31
+
32
+ Args:
33
+ data: CSV data.
34
+
35
+ Returns:
36
+ Enumeration fields and missing fields.
37
+
38
+ """
39
+ reader = csv.reader(data)
40
+ next(reader) # header
41
+
42
+ enum = [] # type: list[str]
43
+ miss = [
44
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
45
+ ]
46
+ for item in reader:
47
+ long = item[1]
48
+ rfcs = item[2]
49
+
50
+ temp = [] # type: list[str]
51
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
52
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
53
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
54
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
55
+ else:
56
+ temp.append(f'[{rfc}]'.replace('_', ' '))
57
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
58
+
59
+ name = self.safe_name(re.sub(r'\((.+?)\)', r'\1', long))
60
+ desc = self.wrap_comment(f'{long}{tmp1}')
61
+
62
+ code, code_val = item[0], int(item[0], base=16)
63
+ renm = self.rename(name, code, original=long)
64
+
65
+ pres = f"{renm} = 0x{code_val:01x}"
66
+ sufs = f'#: {desc}'
67
+
68
+ # if len(pres) > 74:
69
+ # sufs = f"\n{' '*80}{sufs}"
70
+
71
+ # enum.append(f'{pres.ljust(76)}{sufs}')
72
+ enum.append(f'{sufs}\n {pres}')
73
+ return enum, miss
74
+
75
+
76
+ if __name__ == '__main__':
77
+ sys.exit(DHCPSupportMode()) # type: ignore[arg-type]
@@ -0,0 +1,87 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Status Codes (DNS Update Mobility Option)
3
+ ===============================================
4
+
5
+ .. module:: pcapkit.vendor.mh.dns_status_code
6
+
7
+ This module contains the vendor crawler for **Status Codes (DNS Update Mobility Option)**,
8
+ which is automatically generating :class:`pcapkit.const.mh.dns_status_code.DNSStatusCode`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['DNSStatusCode']
19
+
20
+
21
+ class DNSStatusCode(Vendor):
22
+ """Status Codes (DNS Update Mobility Option)"""
23
+
24
+ #: Value limit checker.
25
+ FLAG = 'isinstance(value, int) and 0 <= value <= 255'
26
+ #: Link to registry.
27
+ LINK = 'https://www.iana.org/assignments/mobility-parameters/mobility-parameters-3.csv'
28
+
29
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
30
+ """Process CSV data.
31
+
32
+ Args:
33
+ data: CSV data.
34
+
35
+ Returns:
36
+ Enumeration fields and missing fields.
37
+
38
+ """
39
+ reader = csv.reader(data)
40
+ next(reader) # header
41
+
42
+ enum = [] # type: list[str]
43
+ miss = [] # type: list[str]
44
+ for item in reader:
45
+ long = item[1]
46
+ rfcs = item[2]
47
+
48
+ temp = [] # type: list[str]
49
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
50
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
51
+ #temp.append(f'[{rfc[:3]} {rfc[3:]}]')
52
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
53
+ else:
54
+ temp.append(f'[{rfc}]'.replace('_', ' '))
55
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
56
+
57
+ split = long.split(' (', 1)
58
+ if len(split) == 2:
59
+ name = split[0]
60
+ cmmt = f" ({split[1]}"
61
+ else:
62
+ name, cmmt = long, ''
63
+ desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
64
+
65
+ try:
66
+ code, _ = item[0], int(item[0])
67
+ renm = self.rename(name, code, original=long)
68
+
69
+ pres = f"{renm} = {code}"
70
+ sufs = f'#: {desc}'
71
+
72
+ # if len(pres) > 74:
73
+ # sufs = f"\n{' '*80}{sufs}"
74
+
75
+ # enum.append(f'{pres.ljust(76)}{sufs}')
76
+ enum.append(f'{sufs}\n {pres}')
77
+ except ValueError:
78
+ start, stop = item[0].split('-')
79
+
80
+ miss.append(f'if {start} <= value <= {stop}:')
81
+ miss.append(f' #: {desc}')
82
+ miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%d' % value, value)")
83
+ return enum, miss
84
+
85
+
86
+ if __name__ == '__main__':
87
+ sys.exit(DNSStatusCode()) # type: ignore[arg-type]
@@ -0,0 +1,87 @@
1
+ # -*- coding: utf-8 -*-
2
+ """DSMIP6-TLS Packet Types Registry
3
+ ======================================
4
+
5
+ .. module:: pcapkit.vendor.mh.dsmip6_tls_packet
6
+
7
+ This module contains the vendor crawler for **DSMIP6-TLS Packet Types Registry**,
8
+ which is automatically generating :class:`pcapkit.const.mh.dsmip6_tls_packet.DSMIP6TLSPacket`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['DSMIP6TLSPacket']
19
+
20
+
21
+ class DSMIP6TLSPacket(Vendor):
22
+ """DSMIP6-TLS Packet Types Registry"""
23
+
24
+ #: Value limit checker.
25
+ FLAG = 'isinstance(value, int) and 0 <= value <= 15'
26
+ #: Link to registry.
27
+ LINK = 'https://www.iana.org/assignments/mobility-parameters/dsmip6-tls-packet-types.csv'
28
+
29
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
30
+ """Process CSV data.
31
+
32
+ Args:
33
+ data: CSV data.
34
+
35
+ Returns:
36
+ Enumeration fields and missing fields.
37
+
38
+ """
39
+ reader = csv.reader(data)
40
+ next(reader) # header
41
+
42
+ enum = [] # type: list[str]
43
+ miss = [] # type: list[str]
44
+ for item in reader:
45
+ long = item[1]
46
+ rfcs = item[2]
47
+
48
+ temp = [] # type: list[str]
49
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
50
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
51
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
52
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
53
+ else:
54
+ temp.append(f'[{rfc}]'.replace('_', ' '))
55
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
56
+
57
+ split = long.split(' (', 1)
58
+ if len(split) == 2:
59
+ name = split[0]
60
+ cmmt = f" ({split[1]}"
61
+ else:
62
+ name, cmmt = long, ''
63
+ desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
64
+
65
+ try:
66
+ code, _ = item[0], int(item[0])
67
+ renm = self.rename(name, code, original=long)
68
+
69
+ pres = f"{renm} = {code}"
70
+ sufs = f'#: {desc}'
71
+
72
+ # if len(pres) > 74:
73
+ # sufs = f"\n{' '*80}{sufs}"
74
+
75
+ # enum.append(f'{pres.ljust(76)}{sufs}')
76
+ enum.append(f'{sufs}\n {pres}')
77
+ except ValueError:
78
+ start, stop = item[0].split('-')
79
+
80
+ miss.append(f'if {start} <= value <= {stop}:')
81
+ miss.append(f' #: {desc}')
82
+ miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%d' % value, value)")
83
+ return enum, miss
84
+
85
+
86
+ if __name__ == '__main__':
87
+ sys.exit(DSMIP6TLSPacket()) # type: ignore[arg-type]