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,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ # pylint: disable=unused-import
3
+ """:class:`~pcapkit.protocols.internet.ipv4.IPv4` Vendor Crawlers
4
+ ====================================================================
5
+
6
+ .. module:: pcapkit.vendor.ipv4
7
+
8
+ This module contains all vendor crawlers of
9
+ :class:`~pcapkit.protocols.internet.ipv4.IPv4` implementations. Available
10
+ crawlers include:
11
+
12
+ .. list-table::
13
+
14
+ * - :class:`IPv4_ClassificationLevel <pcapkit.vendor.ipv4.classification_level.ClassificationLevel>`
15
+ - Classification Level Encodings
16
+ * - :class:`IPv4_OptionClass <pcapkit.vendor.ipv4.option_class.OptionClass>`
17
+ - Option Classes
18
+ * - :class:`IPv4_OptionNumber <pcapkit.vendor.ipv4.option_number.OptionNumber>`
19
+ - IP Option Numbers [*]_
20
+ * - :class:`IPv4_ProtectionAuthority <pcapkit.vendor.ipv4.protection_authority.ProtectionAuthority>`
21
+ - Protection Authority Bit Assignments
22
+ * - :class:`IPv4_QSFunction <pcapkit.vendor.ipv4.qs_function.QSFunction>`
23
+ - QS Functions
24
+ * - :class:`IPv4_RouterAlert <pcapkit.vendor.ipv4.router_alert.RouterAlert>`
25
+ - IPv4 Router Alert Option Values [*]_
26
+ * - :class:`IPv4_ToSDelay <pcapkit.vendor.ipv4.tos_del.ToSDelay>`
27
+ - ToS (DS Field) Delay
28
+ * - :class:`IPv4_ToSECN <pcapkit.vendor.ipv4.tos_ecn.ToSECN>`
29
+ - ToS ECN Field
30
+ * - :class:`IPv4_ToSPrecedence <pcapkit.vendor.ipv4.tos_pre.TOSPrecedence>`
31
+ - ToS (DS Field) Precedence
32
+ * - :class:`IPv4_ToSReliability <pcapkit.vendor.ipv4.tos_rel.TOSReliability>`
33
+ - ToS (DS Field) Reliability
34
+ * - :class:`IPv4_ToSThroughput <pcapkit.vendor.ipv4.tos_thr.TOSThroughput>`
35
+ - ToS (DS Field) Throughput
36
+
37
+ .. [*] https://www.iana.org/assignments/ip-parameters/ip-parameters.xhtml#ip-parameters-1
38
+ .. [*] https://www.iana.org/assignments/ip-parameters/ip-parameters.xhtml#ipv4-router-alert-option-values
39
+
40
+ """
41
+
42
+ from pcapkit.vendor.ipv4.classification_level import ClassificationLevel as IPv4_ClassificationLevel
43
+ from pcapkit.vendor.ipv4.option_class import OptionClass as IPv4_OptionClass
44
+ from pcapkit.vendor.ipv4.option_number import OptionNumber as IPv4_OptionNumber
45
+ from pcapkit.vendor.ipv4.protection_authority import ProtectionAuthority as IPv4_ProtectionAuthority
46
+ from pcapkit.vendor.ipv4.qs_function import QSFunction as IPv4_QSFunction
47
+ from pcapkit.vendor.ipv4.router_alert import RouterAlert as IPv4_RouterAlert
48
+ from pcapkit.vendor.ipv4.tos_del import ToSDelay as IPv4_ToSDelay
49
+ from pcapkit.vendor.ipv4.tos_ecn import ToSECN as IPv4_ToSECN
50
+ from pcapkit.vendor.ipv4.tos_pre import ToSPrecedence as IPv4_ToSPrecedence
51
+ from pcapkit.vendor.ipv4.tos_rel import ToSReliability as IPv4_ToSReliability
52
+ from pcapkit.vendor.ipv4.tos_thr import ToSThroughput as IPv4_ToSThroughput
53
+ from pcapkit.vendor.ipv4.ts_flag import TSFlag as IPv4_TSFlag
54
+
55
+ __all__ = ['IPv4_ClassificationLevel', 'IPv4_OptionClass', 'IPv4_OptionNumber', 'IPv4_ProtectionAuthority',
56
+ 'IPv4_QSFunction', 'IPv4_RouterAlert', 'IPv4_ToSDelay', 'IPv4_ToSECN', 'IPv4_ToSPrecedence',
57
+ 'IPv4_ToSReliability', 'IPv4_ToSThroughput', 'IPv4_TSFlag']
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Classification Level Encodings
3
+ ====================================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.classification_level
6
+
7
+ This module contains the vendor crawler for **Classification Level Encodings**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.classification_level.ClassificationLevel`.
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__ = ['ClassificationLevel']
22
+
23
+ #: Encoding registry.
24
+ DATA = {
25
+ 0b0000_0001: 'Reserved [4]',
26
+ 0b0011_1101: 'Top Secret',
27
+ 0b0101_1010: 'Secret',
28
+ 0b1001_0110: 'Confidential',
29
+ 0b0110_0110: 'Reserved [3]',
30
+ 0b1100_1100: 'Reserved [2]',
31
+ 0b1010_1011: 'Unclassified',
32
+ 0b1111_0001: 'Reserved [1]',
33
+ } # type: dict[int, str]
34
+
35
+
36
+ def binary(code: 'int') -> 'str':
37
+ """Convert code to binary form."""
38
+ return f'0b{bin(code)[2:].upper().zfill(8)}'
39
+
40
+
41
+ class ClassificationLevel(Vendor):
42
+ """Classification Level Encodings"""
43
+
44
+ #: Value limit checker.
45
+ FLAG = 'isinstance(value, int) and 0b00000000 <= value <= 0b11111111'
46
+
47
+ def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
48
+ """Fetch registry data.
49
+
50
+ Returns:
51
+ Registry data (:data:`~pcapkit.vendor.ipv4.classification_level.DATA`).
52
+
53
+ """
54
+ return DATA
55
+
56
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
57
+ """Count field records.
58
+
59
+ Args:
60
+ data: Registry data.
61
+
62
+ Returns:
63
+ Field recordings.
64
+
65
+ """
66
+ return collections.Counter(map(self.safe_name, data.values()))
67
+
68
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
69
+ """Process registry data.
70
+
71
+ Args:
72
+ data: Registry data.
73
+
74
+ Returns:
75
+ Enumeration fields and missing fields.
76
+
77
+ """
78
+ enum = [] # type: list[str]
79
+ miss = [
80
+ 'temp = bin(value)[2:].upper().zfill(8)',
81
+ "return extend_enum(cls, 'Unassigned_0b%s' % (temp[:4]+'_'+temp[4:]), value)",
82
+ ]
83
+ for code, name in data.items():
84
+ bncd = binary(code)
85
+ renm = self.rename(name, bncd)
86
+ enum.append(f"{renm} = {bncd}".ljust(76))
87
+ return enum, miss
88
+
89
+
90
+ if __name__ == '__main__':
91
+ sys.exit(ClassificationLevel()) # type: ignore[arg-type]
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Option Classes
3
+ ====================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.option_class
6
+
7
+ This module contains the vendor crawler for **Option Classes**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.option_class.OptionClass`.
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__ = ['OptionClass']
22
+
23
+ #: Option class registry.
24
+ DATA = {
25
+ 0: 'control',
26
+ 1: 'reserved for future use',
27
+ 2: 'debugging and measurement',
28
+ 3: 'reserved for future use',
29
+ } # type: dict[int, str]
30
+
31
+
32
+ class OptionClass(Vendor):
33
+ """Option Classes"""
34
+
35
+ #: Value limit checker.s
36
+ FLAG = 'isinstance(value, int) and 0 <= value <= 3'
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.option_class.DATA`).
43
+
44
+ """
45
+ return DATA
46
+
47
+ def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
48
+ """Count field records.
49
+
50
+ Args:
51
+ data: Registry data.
52
+
53
+ Returns:
54
+ Field recordings.
55
+
56
+ """
57
+ return collections.Counter(map(self.safe_name, data.values()))
58
+
59
+ def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
60
+ """Process registry data.
61
+
62
+ Args:
63
+ data: Registry data.
64
+
65
+ Returns:
66
+ Enumeration fields and missing fields.
67
+
68
+ """
69
+ enum = [] # type: list[str]
70
+ miss = [
71
+ "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(OptionClass()) # type: ignore[arg-type]
@@ -0,0 +1,105 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IP Option Numbers
3
+ =======================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.option_number
6
+
7
+ This module contains the vendor crawler for **IP Option Numbers**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.option_number.OptionNumber`.
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__ = ['OptionNumber']
24
+
25
+
26
+ class OptionNumber(Vendor):
27
+ """IP Option 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/ip-parameters/ip-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[4]),
47
+ filter(lambda item: len(item[3].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 = [
64
+ "return extend_enum(cls, 'Unassigned_%d' % value, value)",
65
+ ]
66
+ for item in reader:
67
+ code = item[3]
68
+ dscp = item[4]
69
+ rfcs = item[5]
70
+
71
+ temp = [] # type: list[str]
72
+ for rfc in filter(None, re.split(r'\[|\]', rfcs)):
73
+ if re.match(r'\d+', rfc):
74
+ continue
75
+ if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
76
+ #temp.append(f'[{rfc[:3]} {rfc[3:]}]')
77
+ temp.append(f'[:rfc:`{rfc[3:]}`]')
78
+ else:
79
+ temp.append(f'[{rfc}]'.replace('_', ' '))
80
+ tmp1 = f" {''.join(temp)}" if rfcs else ''
81
+
82
+ abbr, name = [s.strip() for s in dscp.split('- ')]
83
+ tmp2 = re.sub(r'\[\d+\]', '', name).strip()
84
+
85
+ if abbr:
86
+ name = f', {tmp2}' if tmp2 else ''
87
+ desc = self.wrap_comment(f'``{abbr}``{name}{tmp1}')
88
+ else:
89
+ name = tmp2 or ''
90
+ desc = self.wrap_comment(f'{name}{tmp1}')
91
+
92
+ renm = self.rename(abbr or 'Unassigned', code, original=dscp)
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
+ return enum, miss
102
+
103
+
104
+ if __name__ == '__main__':
105
+ sys.exit(OptionNumber()) # type: ignore[arg-type]
@@ -0,0 +1,84 @@
1
+ # -*- coding: utf-8 -*-
2
+ """Protection Authority Bit Assignments
3
+ ==========================================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.protection_authority
6
+
7
+ This module contains the vendor crawler for **Protection Authority Bit Assignments**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.protection_authority.ProtectionAuthority`.
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__ = ['ProtectionAuthority']
22
+
23
+ #: Protection authority registry.
24
+ DATA = {
25
+ 0: 'GENSER',
26
+ 1: 'SIOP-ESI',
27
+ 2: 'SCI',
28
+ 3: 'NSA',
29
+ 4: 'DOE',
30
+ 5: 'Unassigned',
31
+ 6: 'Unassigned',
32
+ 7: 'Field Termination Indicator',
33
+ } # type: dict[int, str]
34
+
35
+
36
+ class ProtectionAuthority(Vendor):
37
+ """Protection Authority Bit Assignments"""
38
+
39
+ #: Value limit checker.
40
+ FLAG = 'isinstance(value, int) and value >= 0'
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.protection_authority.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(ProtectionAuthority()) # type: ignore[arg-type]
@@ -0,0 +1,78 @@
1
+ # -*- coding: utf-8 -*-
2
+ """QS Functions
3
+ ==================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.qs_function
6
+
7
+ This module contains the vendor crawler for **QS Functions**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.qs_function.QSFunction`.
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__ = ['QSFunction']
22
+
23
+ #: QS function registry.
24
+ DATA = {
25
+ 0: 'Quick-Start Request',
26
+ 8: 'Report of Approved Rate',
27
+ } # type: dict[int, str]
28
+
29
+
30
+ class QSFunction(Vendor):
31
+ """QS Functions"""
32
+
33
+ #: Value limit checker.
34
+ FLAG = 'isinstance(value, int) and 0 <= value <= 8'
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.qs_function.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) # 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(QSFunction()) # type: ignore[arg-type]
@@ -0,0 +1,93 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IPv4 Router Alert Option Values
3
+ =====================================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.router_alert
6
+
7
+ This module contains the vendor crawler for **IPv4 Router Alert Option Values**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.router_alert.RouterAlert`.
9
+
10
+ """
11
+
12
+ import csv
13
+ import re
14
+ import sys
15
+
16
+ from pcapkit.vendor.default import Vendor
17
+
18
+ __all__ = ['RouterAlert']
19
+
20
+
21
+ class RouterAlert(Vendor):
22
+ """IPv4 Router Alert Option Values"""
23
+
24
+ #: Value limit checker.
25
+ FLAG = 'isinstance(value, int) and 0 <= value <= 65535'
26
+ #: Link to registry.
27
+ LINK = 'https://www.iana.org/assignments/ip-parameters/ipv4-router-alert-option-values.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
+ name = 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
+ desc = self.wrap_comment(re.sub(r'\r*\n', ' ', '%s %s' % ( # pylint: disable=consider-using-f-string
56
+ name, ''.join(temp) if rfcs else '',
57
+ ), re.MULTILINE))
58
+
59
+ try:
60
+ code, _ = item[0], int(item[0])
61
+ renm = self.rename(name, code)
62
+
63
+ pres = f"{renm} = {code}"
64
+ sufs = f'#: {desc}'
65
+
66
+ #if len(pres) > 74:
67
+ # sufs = f"\n{' '*80}{sufs}"
68
+
69
+ #enum.append(f'{pres.ljust(76)}{sufs}')
70
+ enum.append(f'{sufs}\n {pres}')
71
+ except ValueError:
72
+ start, stop = map(int, item[0].split('-'))
73
+
74
+ if 'Level' in name:
75
+ base = name.rstrip('s 0-31')
76
+ for tmp_code in range(start, stop+1):
77
+ renm = self.safe_name(f'{base}_{tmp_code-start}')
78
+ pres = f"{renm} = {tmp_code}"
79
+
80
+ #if len(pres) > 74:
81
+ # sufs = f"\n{' '*80}{sufs}"
82
+
83
+ #enum.append(f'{pres.ljust(76)}{sufs}')
84
+ enum.append(f'#: {desc}\n {pres}')
85
+ else:
86
+ miss.append(f'if {start} <= value <= {stop}:')
87
+ miss.append(f' #: {desc}')
88
+ miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
89
+ return enum, miss
90
+
91
+
92
+ if __name__ == '__main__':
93
+ sys.exit(RouterAlert()) # type: ignore[arg-type]
@@ -0,0 +1,78 @@
1
+ # -*- coding: utf-8 -*-
2
+ """ToS (DS Field) Delay
3
+ ==========================
4
+
5
+ .. module:: pcapkit.vendor.ipv4.tos_del
6
+
7
+ This module contains the vendor crawler for **ToS (DS Field) Delay**,
8
+ which is automatically generating :class:`pcapkit.const.ipv4.tos_del.ToSDelay`.
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__ = ['ToSDelay']
22
+
23
+ #: ToS registry.
24
+ DATA = {
25
+ 0: 'Normal',
26
+ 1: 'Low',
27
+ } # type: dict[int, str]
28
+
29
+
30
+ class ToSDelay(Vendor):
31
+ """ToS (DS Field) Delay"""
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_del.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(ToSDelay()) # type: ignore[arg-type]