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,111 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Transport Layer Protocol Numbers
3
+ ======================================
4
+
5
+ .. module:: pcapkit.vendor.reg.transtype
6
+
7
+ This module contains the vendor crawler for **Transport Layer Protocol Numbers**,
8
+ which is automatically generating :class:`pcapkit.const.reg.transtype.TransType`.
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
+
23
+ __all__ = ['TransType']
24
+
25
+
26
+ class TransType(Vendor):
27
+ """Transport Layer Protocol Numbers"""
28
+
29
+ #: Value limit checker.
30
+ FLAG = 'isinstance(value, int) and 0 <= value <= 255'
31
+ #: Link to registry.
32
+ LINK = 'https://www.iana.org/assignments/protocol-numbers/protocol-numbers-1.csv'
33
+
34
+ def count(self, data: 'list[str]') -> 'Counter[str]':
35
+ """Count field records.
36
+
37
+ Args:
38
+ data: CSV data.
39
+
40
+ Returns:
41
+ Field recordings.
42
+
43
+ """
44
+ reader = csv.reader(data)
45
+ next(reader) # header
46
+ return collections.Counter(map(lambda item: self.safe_name(item[1] or item[2]),
47
+ filter(lambda item: len(item[0].split('-')) != 2, reader)))
48
+
49
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
50
+ """Process CSV data.
51
+
52
+ Args:
53
+ data: CSV data.
54
+
55
+ Returns:
56
+ Enumeration fields and missing fields.
57
+
58
+ """
59
+ reader = csv.reader(data)
60
+ next(reader) # header
61
+
62
+ enum = [] # type: list[str]
63
+ miss = [] # type: list[str]
64
+ for item in reader:
65
+ long = item[1]
66
+ rfcs = item[4]
67
+
68
+ temp = [] # type: list[str]
69
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
70
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
71
+ #temp.append(f'[{rfc[:3]} {rfc[3:]}]')
72
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
73
+ else:
74
+ temp.append(f'[{rfc}]'.replace('_', ' '))
75
+ lrfc = re.sub(r'( )( )*', ' ', f" {''.join(temp)}".replace('\n', ' ')) if rfcs else ''
76
+
77
+ subd = re.sub(r'( )( )*', ' ', item[2].replace('\n', ' '))
78
+ tmp1 = subd if item[2] else ''
79
+
80
+ split = long.split(' (', 1)
81
+ if len(split) == 2:
82
+ name, cmmt = split[0], f" ({split[1]})"
83
+ else:
84
+ name, cmmt = long, ''
85
+ if not name:
86
+ name, desc = item[2], ''
87
+ desc = self.wrap_comment(f'{tmp1}{cmmt}{lrfc}')
88
+
89
+ try:
90
+ code, _ = item[0], int(item[0])
91
+ renm = self.rename(name, code, original=long)
92
+
93
+ pres = f"{renm} = {code}"
94
+ sufs = f"#: {desc}"
95
+
96
+ # if len(pres) > 74:
97
+ # sufs = f"\n{' '*80}{sufs}"
98
+
99
+ # enum.append(f'{pres.ljust(76)}{sufs}')
100
+ enum.append(f'{sufs}\n {pres}')
101
+ except ValueError:
102
+ start, stop = item[0].split('-')
103
+
104
+ miss.append(f'if {start} <= value <= {stop}:')
105
+ miss.append(f' #: {desc}')
106
+ miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
107
+ return enum, miss
108
+
109
+
110
+ if __name__ == '__main__':
111
+ sys.exit(TransType()) # type: ignore[arg-type]
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ # pylint: disable=unused-import
3
+ """:class:`~pcapkit.protocols.transport.tcp.TCP` Vendor Crawlers
4
+ ===================================================================
5
+
6
+ .. module:: pcapkit.vendor.tcp
7
+
8
+ This module contains all vendor crawlers of
9
+ :class:`~pcapkit.protocols.transport.tcp.TCP` implementations. Available
10
+ enumerations include:
11
+
12
+ .. list-table::
13
+
14
+ * - :class:`TCP_Checksum <pcapkit.vendor.tcp.checksum.Checksum>`
15
+ - TCP Checksum [*]_
16
+ * - :class:`TCP_MPTCPOption <pcapkit.vendor.tcp.mp_tcp_option.MPTCPOption>`
17
+ - Multipath TCP options [*]_
18
+ * - :class:`TCP_Option <pcapkit.vendor.tcp.option.Option>`
19
+ - TCP Option Kind Numbers [*]_
20
+ * - :class:`TCP_Flags <pcapkit.vendor.tcp.flags.Flags>`
21
+ - TCP Header Flags [*]_
22
+
23
+ .. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-2
24
+ .. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#mptcp-option-subtypes
25
+ .. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-1
26
+ .. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-header-flags
27
+
28
+ """
29
+
30
+ from pcapkit.vendor.tcp.checksum import Checksum as TCP_Checksum
31
+ from pcapkit.vendor.tcp.flags import Flags as TCP_Flags
32
+ from pcapkit.vendor.tcp.mp_tcp_option import MPTCPOption as TCP_MPTCPOption
33
+ from pcapkit.vendor.tcp.option import Option as TCP_Option
34
+
35
+ __all__ = ['TCP_Checksum', 'TCP_Option', 'TCP_MPTCPOption', 'TCP_Flags']
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+ """TCP Checksum
3
+ ==================
4
+
5
+ .. module:: pcapkit.vendor.tcp.checksum
6
+
7
+ This module contains the vendor crawler for **TCP Checksum**,
8
+ which is automatically generating :class:`pcapkit.const.tcp.checksum.Checksum`.
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__ = ['Checksum']
22
+
23
+ #: TCP checksum options.
24
+ DATA = {
25
+ 0: 'TCP checksum',
26
+ 1: "8-bit Fletcher's algorithm",
27
+ 2: "16-bit Fletcher's algorithm",
28
+ 3: 'Redundant Checksum Avoidance',
29
+ } # type: dict[int, str]
30
+
31
+
32
+ class Checksum(Vendor):
33
+ """TCP Checksum [:rfc:`1146`]"""
34
+
35
+ #: Value limit checker.
36
+ FLAG = 'isinstance(value, int) and 0 <= value <= 255'
37
+
38
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
39
+ """Fetch registry data.
40
+
41
+ Returns:
42
+ TCP checksum options, i.e. :data:`~pcapkit.vendor.tcp.checksum.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 CSV 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
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
72
+ ]
73
+ for code, name in data.items():
74
+ renm = self.rename(name, code) # type: ignore[arg-type]
75
+ enum.append(f"{renm} = {code}".ljust(76))
76
+ return enum, miss
77
+
78
+
79
+ if __name__ == '__main__':
80
+ sys.exit(Checksum()) # type: ignore[arg-type]
@@ -0,0 +1,149 @@
1
+ # -*- coding: utf-8 -*-
2
+ """TCP Header Flags
3
+ ======================
4
+
5
+ .. module:: pcapkit.vendor.tcp.flags
6
+
7
+ This module contains the vendor crawler for **TCP Header Flags**,
8
+ which is automatically generating :class:`pcapkit.const.tcp.flags.Flags`.
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
+ if TYPE_CHECKING:
20
+ from typing import Callable
21
+
22
+ __all__ = ['Flags']
23
+
24
+ #: TCP header flags' abbreviation.
25
+ DATA = {
26
+ 15: 'FIN',
27
+ 14: 'SYN',
28
+ 13: 'RST',
29
+ 12: 'PSH',
30
+ 11: 'ACK',
31
+ 10: 'URG',
32
+ 9: 'ECE',
33
+ 8: 'CWR',
34
+ }
35
+
36
+ #: Default constant template of enumerate registry from IANA CSV.
37
+ LINE = lambda NAME, DOCS, ENUM, MODL: f'''\
38
+ # -*- coding: utf-8 -*-
39
+ # pylint: disable=line-too-long,consider-using-f-string
40
+ """{(name := DOCS.split(' [', maxsplit=1)[0])}
41
+ {'=' * (len(name) + 6)}
42
+
43
+ .. module:: {MODL.replace('vendor', 'const')}
44
+
45
+ This module contains the constant enumeration for **{name}**,
46
+ which is automatically generated from :class:`{MODL}.{NAME}`.
47
+
48
+ """
49
+
50
+ from typing import TYPE_CHECKING
51
+
52
+ from aenum import IntFlag
53
+
54
+ if TYPE_CHECKING:
55
+ from typing import Optional
56
+
57
+ __all__ = ['{NAME}']
58
+
59
+ class {NAME}(IntFlag):
60
+ """[{NAME}] {DOCS}"""
61
+
62
+ {ENUM}
63
+
64
+ @staticmethod
65
+ def get(key: 'int | str', default: 'Optional[int]' = -1) -> '{NAME}':
66
+ """Backport support for original codes.
67
+
68
+ Args:
69
+ key: Key to get enum item.
70
+ default: Default value if not found.
71
+
72
+ :meta private:
73
+ """
74
+ if isinstance(key, int):
75
+ return Flags(key)
76
+ return {NAME}[key] # type: ignore[misc]
77
+ '''.strip() # type: Callable[[str, str, str, str], str]
78
+
79
+
80
+ class Flags(Vendor):
81
+ """TCP Header Flags"""
82
+
83
+ #: Value limit checker.
84
+ FLAG = 'isinstance(value, int) and 4 <= value <= 15'
85
+ #: Link to registry.
86
+ LINK = 'https://www.iana.org/assignments/tcp-parameters/tcp-header-flags.csv'
87
+
88
+ def process(self, data: 'list[str]') -> 'list[str]': # type: ignore[override]
89
+ """Process CSV data.
90
+
91
+ Args:
92
+ data: CSV data.
93
+
94
+ Returns:
95
+ Enumeration fields.
96
+
97
+ """
98
+ reader = csv.reader(data)
99
+ next(reader) # header
100
+
101
+ enum = [] # type: list[str]
102
+ for item in reader:
103
+ dscp = item[1]
104
+ rfcs = item[2]
105
+
106
+ temp = [] # type: list[str]
107
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
108
+ if re.match(r'\d+', rfc):
109
+ continue
110
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
111
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
112
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
113
+ else:
114
+ temp.append(f'[{rfc}]'.replace('_', ' '))
115
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
116
+ desc = self.wrap_comment(re.sub(r'\r*\n', ' ', f'{dscp}{tmp1}', re.MULTILINE))
117
+
118
+ code = item[0]
119
+ name = DATA.get(int(code), dscp.split(' (')[0]).replace('Reserved for future use', 'Reserved')
120
+ renm = self.rename(name or 'Unassigned', code, original=dscp)
121
+
122
+ pres = f"{renm} = 1 << {code}"
123
+ sufs = f'#: {desc}'
124
+
125
+ # if len(pres) > 74:
126
+ # sufs = f"\n{' '*80}{sufs}"
127
+
128
+ # enum.append(f'{pres.ljust(76)}{sufs}')
129
+ enum.append(f'{sufs}\n {pres}')
130
+ return enum
131
+
132
+ def context(self, data: 'list[str]') -> 'str':
133
+ """Generate constant context.
134
+
135
+ Args:
136
+ data: CSV data.
137
+
138
+ Returns:
139
+ Constant context.
140
+
141
+ """
142
+ enum = self.process(data)
143
+ ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum)).strip()
144
+
145
+ return LINE(self.NAME, self.DOCS, ENUM, self.__module__)
146
+
147
+
148
+ if __name__ == '__main__':
149
+ sys.exit(Flags()) # type: ignore[arg-type]
@@ -0,0 +1,90 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Multipath TCP options
3
+ ===========================
4
+
5
+ .. module:: pcapkit.vendor.tcp.mp_tcp_option
6
+
7
+ This module contains the vendor crawler for **Multipath TCP options**,
8
+ which is automatically generating :class:`pcapkit.const.tcp.mp_tcp_option.MPTCPOption`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['MPTCPOption']
19
+
20
+
21
+ class MPTCPOption(Vendor):
22
+ """Multipath TCP options [:rfc:`6824`]"""
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/tcp-parameters/mptcp-option-subtypes.csv'
28
+
29
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
30
+ """Process CSV data.
31
+
32
+ Args:
33
+ data: Registry 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
+ dscp = item[2]
46
+ rfcs = item[3]
47
+
48
+ temp = [] # type: list[str]
49
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
50
+ if re.match(r'\d+', rfc):
51
+ continue
52
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
53
+ # temp.append(f'[{rfc[:3]} {rfc[3:]}]')
54
+ match = re.fullmatch(r'RFC(?P<rfc>\d+)(, Section (?P<sec>.*?))?', rfc)
55
+ if match is None:
56
+ temp.append(f'[{rfc}]')
57
+ else:
58
+ if match.group('sec') is not None:
59
+ temp.append(f'[:rfc:`{match.group("rfc")}#{match.group("sec")}`]')
60
+ else:
61
+ temp.append(f'[:rfc:`{match.group("rfc")}`]')
62
+ else:
63
+ temp.append(f'[{rfc}]'.replace('_', ' '))
64
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
65
+ desc = self.wrap_comment(re.sub(r'\r*\n', ' ', f'{dscp}{tmp1}', re.MULTILINE))
66
+
67
+ name = item[1]
68
+ try:
69
+ code, _ = item[0], int(item[0], base=16)
70
+ renm = self.rename(name or 'Unassigned', code, original=dscp)
71
+
72
+ pres = f"{renm} = {code}"
73
+ sufs = f'#: {desc}'
74
+
75
+ # if len(pres) > 74:
76
+ # sufs = f"\n{' '*80}{sufs}"
77
+
78
+ # enum.append(f'{pres.ljust(76)}{sufs}')
79
+ enum.append(f'{sufs}\n {pres}')
80
+ except ValueError:
81
+ start, stop = item[0].split('-')
82
+
83
+ miss.append(f'if {start} <= value <= {stop}:')
84
+ miss.append(f' #: {desc}')
85
+ miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
86
+ return enum, miss
87
+
88
+
89
+ if __name__ == '__main__':
90
+ sys.exit(MPTCPOption()) # type: ignore[arg-type]
@@ -0,0 +1,103 @@
1
+ # -*- coding: utf-8 -*-
2
+ """TCP Option Kind Numbers
3
+ =============================
4
+
5
+ .. module:: pcapkit.vendor.tcp.option
6
+
7
+ This module contains the vendor crawler for **TCP Option Kind Numbers**,
8
+ which is automatically generating :class:`pcapkit.const.tcp.option.Option`.
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
+
23
+ __all__ = ['Option']
24
+
25
+
26
+ class Option(Vendor):
27
+ """TCP Option Kind Numbers"""
28
+
29
+ #: Value limit checker.
30
+ FLAG = 'isinstance(value, int) and 0 <= value <= 255'
31
+ #: Link to registry.
32
+ LINK = 'https://www.iana.org/assignments/tcp-parameters/tcp-parameters-1.csv'
33
+
34
+ def count(self, data: 'list[str]') -> 'Counter[str]':
35
+ """Count field records.
36
+
37
+ Args:
38
+ data: Registry data.
39
+
40
+ Returns:
41
+ Field recordings.
42
+
43
+ """
44
+ reader = csv.reader(data)
45
+ next(reader) # header
46
+ return collections.Counter(map(lambda item: self.safe_name(item[2]), reader))
47
+
48
+ def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
49
+ """Process CSV data.
50
+
51
+ Args:
52
+ data: CSV data.
53
+
54
+ Returns:
55
+ Enumeration fields and missing fields.
56
+
57
+ """
58
+ reader = csv.reader(data)
59
+ next(reader) # header
60
+
61
+ enum = [] # type: list[str]
62
+ miss = [] # type: list[str]
63
+ for item in reader:
64
+ dscp = item[2]
65
+ rfcs = item[3]
66
+
67
+ temp = [] # type: list[str]
68
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
69
+ if re.match(r'\d+', rfc):
70
+ continue
71
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
72
+ #temp.append(f'[{rfc[:3]} {rfc[3:]}]')
73
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
74
+ else:
75
+ temp.append(f'[{rfc}]'.replace('_', ' '))
76
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
77
+ desc = self.wrap_comment(re.sub(r'(\[(\*+)\])|(\[(\d+)\])', r'',
78
+ re.sub(r'\r*\n', ' ', f'{dscp}{tmp1}', re.MULTILINE)))
79
+
80
+ name = dscp.split(' (')[0]
81
+ try:
82
+ code, _ = item[0], int(item[0])
83
+ renm = self.rename(name or 'Unassigned', code, original=dscp)
84
+
85
+ pres = f"{renm} = {code}"
86
+ sufs = f'#: {desc}'
87
+
88
+ # if len(pres) > 74:
89
+ # sufs = f"\n{' '*80}{sufs}"
90
+
91
+ # enum.append(f'{pres.ljust(76)}{sufs}')
92
+ enum.append(f'{sufs}\n {pres}')
93
+ except ValueError:
94
+ start, stop = item[0].split('-')
95
+
96
+ miss.append(f'if {start} <= value <= {stop}:')
97
+ miss.append(f' #: {desc}')
98
+ miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
99
+ return enum, miss
100
+
101
+
102
+ if __name__ == '__main__':
103
+ sys.exit(Option()) # type: ignore[arg-type]
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+ # pylint: disable=unused-import
3
+ """:class:`~pcapkit.protocols.link.vlan.VLAN` Vendor Crawlers
4
+ ================================================================
5
+
6
+ .. module:: pcapkit.vendor.vlan
7
+
8
+ This module contains all vendor crawlers of
9
+ :class:`~pcapkit.protocols.link.vlan.VLAN` implementations. Available
10
+ enumerations include:
11
+
12
+ .. list-table::
13
+
14
+ * - :const:`VLAN_PriorityLevel <pcapkit.const.vlan.priority_level.PriorityLevel>`
15
+ - Priority Levels [*]_
16
+
17
+ .. [*] https://en.wikipedia.org/wiki/IEEE_P802.1p#Priority_levels
18
+
19
+ """
20
+
21
+ from pcapkit.vendor.vlan.priority_level import PriorityLevel as VLAN_PriorityLevel
22
+
23
+ __all__ = ['VLAN_PriorityLevel']
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Priority levels defined in IEEE 802.1p
3
+ ============================================
4
+
5
+ .. module:: pcapkit.vendor.vlan.priority_level
6
+
7
+ This module contains the vendor crawler for **Priority levels defined in IEEE 802.1p**,
8
+ which is automatically generating :class:`pcapkit.const.vlan.priority_level.PriorityLevel`.
9
+
10
+ """
11
+
12
+ import collections
13
+ import re
14
+ import sys
15
+ from typing import TYPE_CHECKING
16
+
17
+ import bs4
18
+
19
+ from pcapkit.vendor.default import Vendor
20
+
21
+ if TYPE_CHECKING:
22
+ from collections import Counter
23
+
24
+ from bs4 import BeautifulSoup
25
+
26
+ __all__ = ['PriorityLevel']
27
+
28
+
29
+ class PriorityLevel(Vendor):
30
+ """Priority levels defined in IEEE 802.1p"""
31
+
32
+ #: Value limit checker.
33
+ FLAG = 'isinstance(value, int) and 0b000 <= value <= 0b111'
34
+ #: Link to registry.
35
+ LINK = 'https://en.wikipedia.org/wiki/IEEE_P802.1p#Priority_levels'
36
+
37
+ def request(self, text: 'str') -> 'BeautifulSoup': # type: ignore[override] # pylint: disable=signature-differs,arguments-renamed
38
+ """Fetch registry table.
39
+
40
+ Args:
41
+ text: Context from :attr:`~LinkType.LINK`.
42
+
43
+ Returns:
44
+ Parsed HTML source.
45
+
46
+ """
47
+ return bs4.BeautifulSoup(text, 'html5lib')
48
+
49
+ def count(self, soup: 'BeautifulSoup') -> 'Counter[str]': # pylint: disable=signature-differs,arguments-renamed,unused-argument
50
+ """Count field records."""
51
+ return collections.Counter()
52
+
53
+ def process(self, soup: 'BeautifulSoup') -> 'tuple[list[str], list[str]]': # pylint: disable=arguments-differ,arguments-renamed,unused-argument
54
+ """Process HTML data.
55
+
56
+ Args:
57
+ data: Parsed HTML source.
58
+
59
+ Returns:
60
+ Enumeration fields and missing fields.
61
+
62
+ """
63
+ table = soup.find_all('table', class_='wikitable')[0]
64
+ content = filter(lambda item: isinstance(item, bs4.element.Tag), table.tbody)
65
+ next(content) # header
66
+
67
+ enum = [] # type: list[str]
68
+ miss = [
69
+ "return extend_enum(cls, 'Unassigned [0b%s]' % bin(value)[2:].zfill(3), value)",
70
+ ]
71
+ for item in content:
72
+ line = item.find_all('td')
73
+
74
+ pval = ' '.join(line[0].stripped_strings)
75
+ prio = ' '.join(line[1].stripped_strings)
76
+ abbr = ' '.join(line[2].stripped_strings)
77
+ desc = ' '.join(line[3].stripped_strings)
78
+
79
+ match = re.match(r'(\d) *(\(.*\))*', prio)
80
+ group = match.groups() # type: ignore[union-attr]
81
+
82
+ code = f'0b{bin(int(pval))[2:].zfill(3)}'
83
+ tmp1 = self.wrap_comment(f"{desc} {group[1] or ''}")
84
+
85
+ pres = f"{abbr} = {code}"
86
+ sufs = f"#: {tmp1}"
87
+
88
+ # if len(pres) > 74:
89
+ # sufs = f"\n{' '*80}{sufs}"
90
+
91
+ # enum.append(f'{pres.ljust(76)}{sufs}')
92
+ enum.append(f'{sufs}\n {pres}')
93
+ return enum, miss
94
+
95
+
96
+ if __name__ == '__main__':
97
+ sys.exit(PriorityLevel()) # type: ignore[arg-type]