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,342 @@
1
+ # -*- coding: utf-8 -*-
2
+ """OSPF - Open Shortest Path First
3
+ =====================================
4
+
5
+ .. module:: pcapkit.protocols.link.ospf
6
+
7
+ :mod:`pcapkit.protocols.link.ospf` contains
8
+ :class:`~pcapkit.protocols.link.ospf.OSPF` only,
9
+ which implements extractor for Open Shortest Path
10
+ First (OSPF) [*]_, whose structure is described
11
+ as below:
12
+
13
+ .. table::
14
+
15
+ ====== ===== ================== ===============================
16
+ Octets Bits Name Description
17
+ ====== ===== ================== ===============================
18
+ 0 0 ``ospf.version`` Version Number
19
+ ------ ----- ------------------ -------------------------------
20
+ 0 0 ``ospf.type`` Type
21
+ ------ ----- ------------------ -------------------------------
22
+ 0 1 ``ospf.len`` Packet Length (header included)
23
+ ------ ----- ------------------ -------------------------------
24
+ 0 2 ``ospf.router_id`` Router ID
25
+ ------ ----- ------------------ -------------------------------
26
+ 0 4 ``ospf.area_id`` Area ID
27
+ ------ ----- ------------------ -------------------------------
28
+ 0 6 ``ospf.chksum`` Checksum
29
+ ------ ----- ------------------ -------------------------------
30
+ 0 7 ``ospf.autype`` Authentication Type
31
+ ------ ----- ------------------ -------------------------------
32
+ 1 8 ``ospf.auth`` Authentication
33
+ ====== ===== ================== ===============================
34
+
35
+ .. [*] https://en.wikipedia.org/wiki/Open_Shortest_Path_First
36
+
37
+ """
38
+ import ipaddress
39
+ import re
40
+ from typing import TYPE_CHECKING, cast
41
+
42
+ from pcapkit.const.ospf.authentication import Authentication as Enum_Authentication
43
+ from pcapkit.const.ospf.packet import Packet as Enum_Packet
44
+ from pcapkit.protocols.data.link.ospf import OSPF as Data_OSPF
45
+ from pcapkit.protocols.data.link.ospf import \
46
+ CrytographicAuthentication as Data_CrytographicAuthentication
47
+ from pcapkit.protocols.link.link import Link
48
+ from pcapkit.protocols.schema.link.ospf import OSPF as Schema_OSPF
49
+ from pcapkit.protocols.schema.link.ospf import \
50
+ CrytographicAuthentication as Schema_CrytographicAuthentication
51
+ from pcapkit.utilities.exceptions import ProtocolError, UnsupportedCall
52
+
53
+ if TYPE_CHECKING:
54
+ from enum import IntEnum as StdlibEnum
55
+ from ipaddress import IPv4Address
56
+ from typing import Any, NoReturn, Optional, Type
57
+
58
+ from aenum import IntEnum as AenumEnum
59
+ from typing_extensions import Literal
60
+
61
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
62
+ from pcapkit.protocols.schema.schema import Schema
63
+
64
+ __all__ = ['OSPF']
65
+
66
+ # Ethernet address pattern
67
+ PAT_MAC_ADDR = re.compile(rb'(?i)(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}')
68
+
69
+
70
+ class OSPF(Link[Data_OSPF, Schema_OSPF],
71
+ schema=Schema_OSPF, data=Data_OSPF):
72
+ """This class implements Open Shortest Path First."""
73
+
74
+ ##########################################################################
75
+ # Properties.
76
+ ##########################################################################
77
+
78
+ @property
79
+ def name(self) -> 'str':
80
+ """Name of current protocol."""
81
+ return f'Open Shortest Path First version {self._info.version}'
82
+
83
+ @property
84
+ def alias(self) -> 'str':
85
+ """Acronym of current protocol."""
86
+ return f'OSPFv{self._info.version}'
87
+
88
+ @property
89
+ def length(self) -> 'Literal[24]':
90
+ """Header length of current protocol."""
91
+ return 24
92
+
93
+ @property
94
+ def type(self) -> 'Enum_Packet':
95
+ """OSPF packet type."""
96
+ return self._info.type
97
+
98
+ ##########################################################################
99
+ # Methods.
100
+ ##########################################################################
101
+
102
+ def read(self, length: 'Optional[int]' = None, **kwargs: 'Any') -> 'Data_OSPF':
103
+ """Read Open Shortest Path First.
104
+
105
+ Structure of OSPF header [:rfc:`2328`]:
106
+
107
+ .. code-block:: text
108
+
109
+ 0 1 2 3
110
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
111
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
112
+ | Version # | Type | Packet length |
113
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
114
+ | Router ID |
115
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
116
+ | Area ID |
117
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
118
+ | Checksum | AuType |
119
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
120
+ | Authentication |
121
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
122
+ | Authentication |
123
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
124
+
125
+ Args:
126
+ length: Length of packet data.
127
+ **kwargs: Arbitrary keyword arguments.
128
+
129
+ Returns:
130
+ Parsed packet data.
131
+
132
+ """
133
+ schema = self.__schema__
134
+
135
+ ospf = Data_OSPF(
136
+ version=schema.version,
137
+ type=schema.type,
138
+ len=schema.length,
139
+ router_id=schema.router_id,
140
+ area_id=schema.area_id,
141
+ chksum=schema.checksum,
142
+ autype=schema.auth_type,
143
+ )
144
+ length = schema.length if schema.length else (length or len(self))
145
+
146
+ if ospf.autype == Enum_Authentication.Cryptographic_authentication:
147
+ ospf.__update__([
148
+ ('auth', self._read_encrypt_auth(
149
+ cast('Schema_CrytographicAuthentication', schema.auth_data),
150
+ )),
151
+ ])
152
+ else:
153
+ ospf.__update__([
154
+ ('auth', cast('bytes', schema.auth_data)),
155
+ ])
156
+ return self._decode_next_layer(ospf, length - self.length)
157
+
158
+ def make(self,
159
+ version: 'int' = 2,
160
+ type: 'Enum_Packet | StdlibEnum | AenumEnum | str | int' = Enum_Packet.Hello,
161
+ type_default: 'Optional[int]' = None,
162
+ type_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
163
+ type_reversed: 'bool' = False,
164
+ router_id: 'IPv4Address | str | bytes | bytearray' = '0.0.0.0', # nosec: B104
165
+ area_id: 'IPv4Address | str | bytes | bytearray' = '0.0.0.0', # nosec: B104
166
+ checksum: 'bytes' = b'\x00\x00',
167
+ auth_type: 'Enum_Authentication | StdlibEnum | AenumEnum | str | int' = Enum_Authentication.No_Authentication,
168
+ auth_type_default: 'Optional[int]' = None,
169
+ auth_type_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
170
+ auth_type_reversed: 'bool' = False,
171
+ auth_data: 'bytes | Schema_CrytographicAuthentication | Data_CrytographicAuthentication' = b'\x00\x00\x00\x00\x00\x00\x00\x00',
172
+ payload: 'bytes | Protocol | Schema' = b'',
173
+ **kwargs: 'Any') -> 'Schema_OSPF':
174
+ """Make (construct) packet data.
175
+
176
+ Args:
177
+ version: OSPF version number.
178
+ type: OSPF packet type.
179
+ type_default: Default value for ``type`` if not specified.
180
+ type_namespace: Namespace for ``type``.
181
+ type_reversed: Reverse namespace for ``type``.
182
+ router_id: Router ID.
183
+ area_id: Area ID.
184
+ checksum: Checksum.
185
+ auth_type: Authentication type.
186
+ auth_type_default: Default value for ``auth_type`` if not specified.
187
+ auth_type_namespace: Namespace for ``auth_type``.
188
+ auth_type_reversed: Reverse namespace for ``auth_type``.
189
+ auth_data: Authentication data.
190
+ payload: Payload data.
191
+ **kwargs: Arbitrary keyword arguments.
192
+
193
+ Returns:
194
+ Constructed packet data.
195
+
196
+ """
197
+ type_ = self._make_index(type, type_default, namespace=type_namespace,
198
+ reversed=type_reversed, pack=False)
199
+ auth_type_ = self._make_index(auth_type, auth_type_default, namespace=auth_type_namespace,
200
+ reversed=auth_type_reversed, pack=False)
201
+
202
+ if auth_type_ == Enum_Authentication.Cryptographic_authentication:
203
+ data = self._make_encrypt_auth(auth_data)
204
+ else:
205
+ if not isinstance(auth_data, bytes):
206
+ raise ProtocolError(f'OSPF: invalid type for authentication data: {auth_data!r}')
207
+ data = auth_data
208
+
209
+ return Schema_OSPF(
210
+ version=version,
211
+ type=type_, # type: ignore[arg-type]
212
+ length=24 + len(payload),
213
+ router_id=router_id,
214
+ area_id=area_id,
215
+ checksum=checksum,
216
+ auth_type=auth_type_, # type: ignore[arg-type]
217
+ auth_data=data,
218
+ payload=payload,
219
+ )
220
+
221
+ ##########################################################################
222
+ # Data models.
223
+ ##########################################################################
224
+
225
+ def __length_hint__(self) -> 'Literal[24]':
226
+ """Return an estimated length for the object."""
227
+ return 24
228
+
229
+ @classmethod
230
+ def __index__(cls) -> 'NoReturn': # pylint: disable=invalid-index-returned
231
+ """Numeral registry index of the protocol.
232
+
233
+ Raises:
234
+ UnsupportedCall: This protocol has no registry entry.
235
+
236
+ """
237
+ raise UnsupportedCall(f'{cls.__name__!r} object cannot be interpreted as an integer')
238
+
239
+ ##########################################################################
240
+ # Utilities.
241
+ ##########################################################################
242
+
243
+ @classmethod
244
+ def _make_data(cls, data: 'Data_OSPF') -> 'dict[str, Any]': # type: ignore[override]
245
+ """Create key-value pairs from ``data`` for protocol construction.
246
+
247
+ Args:
248
+ data: protocol data
249
+
250
+ Returns:
251
+ Key-value pairs for protocol construction.
252
+
253
+ """
254
+ return {
255
+ 'version': data.version,
256
+ 'type': data.type,
257
+ 'router_id': data.router_id,
258
+ 'area_id': data.area_id,
259
+ 'checksum': data.chksum,
260
+ 'auth_type': data.autype,
261
+ 'auth_data': data.auth,
262
+ 'payload': cls._make_payload(data)
263
+ }
264
+
265
+ def _read_id_numbers(self, id: 'bytes') -> 'IPv4Address':
266
+ """Read router and area IDs.
267
+
268
+ Args:
269
+ id: ID bytes.
270
+
271
+ Returns:
272
+ Parsed IDs as an IPv4 address.
273
+
274
+ """
275
+ #_byte = self._read_fileng(4)
276
+ #_addr = '.'.join(str(_) for _ in _byte)
277
+ return ipaddress.ip_address(id) # type: ignore[return-value]
278
+
279
+ def _make_id_numbers(self, id: 'IPv4Address | str | bytes | bytearray') -> 'bytes':
280
+ """Make router and area IDs.
281
+
282
+ Args:
283
+ id: ID.
284
+
285
+ Returns:
286
+ ID bytes.
287
+
288
+ """
289
+ return ipaddress.ip_address(id).packed
290
+
291
+ def _read_encrypt_auth(self, schema: 'Schema_CrytographicAuthentication') -> 'Data_CrytographicAuthentication':
292
+ """Read Authentication field when Cryptographic Authentication is employed,
293
+ i.e. :attr:`~OSPF.autype` is ``2``.
294
+
295
+ Structure of Cryptographic Authentication [:rfc:`2328`]:
296
+
297
+ .. code-block:: text
298
+
299
+ 0 1 2 3
300
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
301
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
302
+ | 0 | Key ID | Auth Data Len |
303
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
304
+ | Cryptographic sequence number |
305
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
306
+
307
+ Args:
308
+ schema: parsed authentication data
309
+
310
+ Returns:
311
+ Parsed packet data.
312
+
313
+ """
314
+ auth = Data_CrytographicAuthentication(
315
+ key_id=schema.key_id,
316
+ len=schema.len,
317
+ seq=schema.seq,
318
+ )
319
+ return auth
320
+
321
+ def _make_encrypt_auth(self,
322
+ auth_data: 'bytes | Schema_CrytographicAuthentication | Data_CrytographicAuthentication' # pylint: disable=line-too-long
323
+ ) -> 'bytes | Schema_CrytographicAuthentication':
324
+ """Make Authentication field when Cryptographic Authentication is employed.
325
+
326
+ Args:
327
+ auth_type: Authentication type.
328
+ auth_data: Authentication data.
329
+
330
+ Returns:
331
+ Authentication bytes.
332
+
333
+ """
334
+ if isinstance(auth_data, (Schema_CrytographicAuthentication, bytes)):
335
+ return auth_data
336
+ if isinstance(auth_data, Data_CrytographicAuthentication):
337
+ return Schema_CrytographicAuthentication(
338
+ key_id=auth_data.key_id,
339
+ len=auth_data.len,
340
+ seq=auth_data.seq,
341
+ )
342
+ raise ProtocolError(f'OSPF: invalid type for auth_data: {auth_data!r}')
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ """RARP/DRARP - (Dynamic) Reverse Address Resolution Protocol
3
+ ================================================================
4
+
5
+ .. module:: pcapkit.protocols.link.rarp
6
+
7
+ :mod:`pcapkit.protocols.link.rarp` contains
8
+ :class:`~pcapkit.protocols.link.rarp.RARP` only,
9
+ which implements extractor for (Dynamic) Reverse
10
+ Address Resolution Protocol (RARP/DRARP) [*]_,
11
+ whose structure is described as below:
12
+
13
+ ====== ========= ========================= =========================
14
+ Octets Bits Name Description
15
+ ====== ========= ========================= =========================
16
+ 0 0 ``rarp.htype`` Hardware Type
17
+ 2 16 ``rarp.ptype`` Protocol Type
18
+ 4 32 ``rarp.hlen`` Hardware Address Length
19
+ 5 40 ``rarp.plen`` Protocol Address Length
20
+ 6 48 ``rarp.oper`` Operation
21
+ 8 64 ``rarp.sha`` Sender Hardware Address
22
+ 14 112 ``rarp.spa`` Sender Protocol Address
23
+ 18 144 ``rarp.tha`` Target Hardware Address
24
+ 24 192 ``rarp.tpa`` Target Protocol Address
25
+ ====== ========= ========================= =========================
26
+
27
+ .. [*] http://en.wikipedia.org/wiki/Address_Resolution_Protocol
28
+
29
+ """
30
+ from typing import TYPE_CHECKING
31
+
32
+ from pcapkit.const.reg.ethertype import EtherType as Enum_EtherType
33
+ from pcapkit.protocols.data.link.arp import ARP as Data_ARP
34
+ from pcapkit.protocols.link.arp import ARP
35
+ from pcapkit.protocols.schema.link.arp import ARP as Schema_ARP
36
+
37
+ if TYPE_CHECKING:
38
+ from typing_extensions import Literal
39
+
40
+ __all__ = ['RARP', 'DRARP']
41
+
42
+
43
+ class RARP(ARP, schema=Schema_ARP, data=Data_ARP): # pylint: disable=abstract-method
44
+ """This class implements Reverse Address Resolution Protocol."""
45
+
46
+ ##########################################################################
47
+ # Methods.
48
+ ##########################################################################
49
+
50
+ @classmethod
51
+ def id(cls) -> 'tuple[Literal["RARP"], Literal["DRARP"]]': # type: ignore[override]
52
+ """Index ID of the protocol."""
53
+ return ('RARP', 'DRARP')
54
+
55
+ ##########################################################################
56
+ # Data models.
57
+ ##########################################################################
58
+
59
+ @classmethod
60
+ def __index__(cls) -> 'Enum_EtherType': # pylint: disable=invalid-index-returned
61
+ """Numeral registry index of the protocol.
62
+
63
+ Returns:
64
+ Numeral registry index of the protocol in `IANA`_.
65
+
66
+ .. _IANA: https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml
67
+
68
+ """
69
+ return Enum_EtherType.Reverse_Address_Resolution_Protocol # type: ignore[return-value]
70
+
71
+
72
+ class DRARP(RARP):
73
+ """This class implements Dynamic Reverse Address Resolution Protocol."""
74
+
75
+ ##########################################################################
76
+ # Methods.
77
+ ##########################################################################
78
+
79
+ @classmethod
80
+ def id(cls) -> 'tuple[Literal["DRARP"]]': # type: ignore[override]
81
+ """Index ID of the protocol."""
82
+ return ('DRARP',)
@@ -0,0 +1,225 @@
1
+ # -*- coding: utf-8 -*-
2
+ """VLAN - 802.1Q Customer VLAN Tag Type
3
+ ==========================================
4
+
5
+ .. module:: pcapkit.protocols.link.vlan
6
+
7
+ :mod:`pcapkit.protocols.link.vlan` contains
8
+ :class:`~pcapkit.protocols.link.vlan.VLAN`
9
+ only, which implements extractor for 802.1Q
10
+ Customer VLAN Tag Type [*]_, whose structure is
11
+ described as below:
12
+
13
+ ======= ========= ====================== =============================
14
+ Octets Bits Name Description
15
+ ======= ========= ====================== =============================
16
+ 1 0 ``vlan.tci`` Tag Control Information
17
+ 1 0 ``vlan.tci.pcp`` Priority Code Point
18
+ 1 3 ``vlan.tci.dei`` Drop Eligible Indicator
19
+ 1 4 ``vlan.tci.vid`` VLAN Identifier
20
+ 3 24 ``vlan.type`` Protocol (Internet Layer)
21
+ ======= ========= ====================== =============================
22
+
23
+ .. [*] https://en.wikipedia.org/wiki/IEEE_802.1Q
24
+
25
+ """
26
+ from typing import TYPE_CHECKING
27
+
28
+ from pcapkit.const.reg.ethertype import EtherType as Enum_EtherType
29
+ from pcapkit.const.vlan.priority_level import PriorityLevel as Enum_PriorityLevel
30
+ from pcapkit.protocols.data.link.vlan import TCI as Data_TCI
31
+ from pcapkit.protocols.data.link.vlan import VLAN as Data_VLAN
32
+ from pcapkit.protocols.link.link import Link
33
+ from pcapkit.protocols.schema.link.vlan import TCI as Schema_TCI
34
+ from pcapkit.protocols.schema.link.vlan import VLAN as Schema_VLAN
35
+ from pcapkit.utilities.exceptions import UnsupportedCall
36
+
37
+ if TYPE_CHECKING:
38
+ from enum import IntEnum as StdlibEnum
39
+ from typing import Any, NoReturn, Optional, Type
40
+
41
+ from aenum import IntEnum as AenumEnum
42
+ from typing_extensions import Literal
43
+
44
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
45
+ from pcapkit.protocols.schema.link.vlan import TCIType
46
+ from pcapkit.protocols.schema.schema import Schema
47
+
48
+ __all__ = ['VLAN']
49
+
50
+
51
+ class VLAN(Link[Data_VLAN, Schema_VLAN],
52
+ schema=Schema_VLAN, data=Data_VLAN):
53
+ """This class implements 802.1Q Customer VLAN Tag Type."""
54
+
55
+ ##########################################################################
56
+ # Properties.
57
+ ##########################################################################
58
+
59
+ @property
60
+ def name(self) -> 'Literal["802.1Q Customer VLAN Tag Type"]':
61
+ """Name of current protocol."""
62
+ return '802.1Q Customer VLAN Tag Type'
63
+
64
+ @property
65
+ def alias(self) -> 'Literal["802.1Q"]':
66
+ """Acronym of corresponding protocol."""
67
+ return '802.1Q'
68
+
69
+ @property
70
+ def info_name(self) -> 'Literal["c_tag"]':
71
+ """Key name of the :attr:`info` dict."""
72
+ return 'c_tag'
73
+
74
+ @property
75
+ def length(self) -> 'Literal[4]':
76
+ """Header length of current protocol."""
77
+ return 4
78
+
79
+ @property
80
+ def protocol(self) -> 'Enum_EtherType':
81
+ """Name of next layer protocol."""
82
+ return self._info.type
83
+
84
+ ##########################################################################
85
+ # Methods.
86
+ ##########################################################################
87
+
88
+ def read(self, length: 'Optional[int]' = None, **kwargs: 'Any') -> 'Data_VLAN': # pylint: disable=unused-argument
89
+ """Read 802.1Q Customer VLAN Tag Type.
90
+
91
+ Structure of 802.1Q Customer VLAN Tag Type [`IEEE 802.1Q <https://standards.ieee.org/ieee/802.1Q/6844/>`__]:
92
+
93
+ .. code-block:: text
94
+
95
+ 0 1 2 3
96
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
97
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
98
+ | TCI | |
99
+ |-------------------------------| |
100
+ | P |D| | Type |
101
+ | C |E| VID | |
102
+ | P |I| | |
103
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
104
+
105
+ Args:
106
+ length: Length of packet data.
107
+ **kwargs: Arbitrary keyword arguments.
108
+
109
+ Returns:
110
+ Parsed packet data.
111
+
112
+ """
113
+ if length is None:
114
+ length = len(self)
115
+ schema = self.__header__
116
+
117
+ tci = schema.tci
118
+ vlan = Data_VLAN(
119
+ tci=Data_TCI(
120
+ pcp=Enum_PriorityLevel.get(tci['pcp']),
121
+ dei=bool(tci['pcp']),
122
+ vid=int(tci['vid']),
123
+ ),
124
+ type=schema.type,
125
+ )
126
+ return self._decode_next_layer(vlan, schema.type, length - self.length)
127
+
128
+ def make(self,
129
+ tci: 'Optional[Schema_TCI | TCIType]' = None,
130
+ pcp: 'Enum_PriorityLevel | StdlibEnum | AenumEnum | str | int' = Enum_PriorityLevel.BE,
131
+ pcp_default: 'Optional[int]' = None,
132
+ pcp_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
133
+ pcp_reversed: 'bool' = False,
134
+ dei: 'bool' = False,
135
+ vid: 'int' = 0,
136
+ type: 'Enum_EtherType | StdlibEnum | AenumEnum | str | int' = Enum_EtherType.Internet_Protocol_version_4,
137
+ type_default: 'Optional[int]' = None,
138
+ type_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
139
+ type_reversed: 'bool' = False,
140
+ payload: 'bytes | Protocol | Schema' = b'',
141
+ **kwargs: 'Any') -> 'Schema_VLAN':
142
+ """Make (construct) packet data.
143
+
144
+ Args:
145
+ tci: TCI field.
146
+ pcp: Priority Code Point (PCP) field.
147
+ pcp_default: Default value of PCP field.
148
+ pcp_namespace: Namespace of PCP field.
149
+ pcp_reversed: Reversed flag of PCP field.
150
+ dei: Drop Eligible Indicator (DEI) field.
151
+ vid: VLAN Identifier (VID) field.
152
+ type: EtherType field.
153
+ type_default: Default value of EtherType field.
154
+ type_namespace: Namespace of EtherType field.
155
+ type_reversed: Reversed flag of EtherType field.
156
+ payload: Payload field.
157
+ **kwargs: Arbitrary keyword arguments.
158
+
159
+ Returns:
160
+ Constructed packet data.
161
+
162
+ """
163
+ if tci is not None:
164
+ pcp_value = tci['pcp']
165
+ dei = tci['dei'] # type: ignore[assignment]
166
+ vid = tci['vid']
167
+ else:
168
+ pcp_value = self._make_index(pcp, pcp_default, namespace=pcp_namespace,
169
+ reversed=pcp_reversed, pack=False)
170
+
171
+ type_value = self._make_index(type, type_default, namespace=type_namespace,
172
+ reversed=type_reversed, pack=False)
173
+
174
+ return Schema_VLAN(
175
+ tci={
176
+ 'pcp': pcp_value,
177
+ 'dei': dei,
178
+ 'vid': vid,
179
+ },
180
+ type=type_value, # type: ignore[arg-type]
181
+ payload=payload,
182
+ )
183
+
184
+ ##########################################################################
185
+ # Data models.
186
+ ##########################################################################
187
+
188
+ def __length_hint__(self) -> 'Literal[4]':
189
+ """Return an estimated length for the object."""
190
+ return 4
191
+
192
+ @classmethod
193
+ def __index__(cls) -> 'NoReturn': # pylint: disable=invalid-index-returned
194
+ """Numeral registry index of the protocol.
195
+
196
+ Raises:
197
+ UnsupportedCall: This protocol has no registry entry.
198
+
199
+ """
200
+ raise UnsupportedCall(f'{cls.__name__!r} object cannot be interpreted as an integer')
201
+
202
+ ##########################################################################
203
+ # Utilities.
204
+ ##########################################################################
205
+
206
+ @classmethod
207
+ def _make_data(cls, data: 'Data_VLAN') -> 'dict[str, Any]': # type: ignore[override]
208
+ """Create key-value pairs from ``data`` for protocol construction.
209
+
210
+ Args:
211
+ data: protocol data
212
+
213
+ Returns:
214
+ Key-value pairs for protocol construction.
215
+
216
+ """
217
+ return {
218
+ 'tci': {
219
+ 'pcp': data.tci.pcp,
220
+ 'dei': data.tci.dei,
221
+ 'vid': data.tci.vid,
222
+ },
223
+ 'type': data.type,
224
+ 'payload': cls._make_payload(data),
225
+ }
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ # pylint: disable=unused-wildcard-import
3
+ """Auxiliary Protocols
4
+ =========================
5
+
6
+ .. module:: pcapkit.protocols.misc
7
+
8
+ :mod:`pcapkit.protocols.misc` contains the auxiliary protocol implementations.
9
+ Such includes the :class:`~pcapkit.protocols.misc.raw.Raw` class for not-supported
10
+ protocols, the :class:`~pcapkit.protocols.misc.null.NoPayload` class for
11
+ indication of empty payload, and PCAP header classes.
12
+
13
+ """
14
+
15
+ # PCAP Headers
16
+ from pcapkit.protocols.misc.pcap import *
17
+
18
+ # PCAPNG Format
19
+ from pcapkit.protocols.misc.pcapng import *
20
+
21
+ # Miscellaneous Classes for Protocols
22
+ from pcapkit.protocols.misc.raw import Raw
23
+ from pcapkit.protocols.misc.null import NoPayload
24
+
25
+ __all__ = [
26
+ # PCAP Headers
27
+ 'Header', 'Frame',
28
+
29
+ # PCAPNG Format
30
+ 'PCAPNG',
31
+
32
+ # No Payload
33
+ 'NoPayload',
34
+
35
+ # Raw Packet
36
+ 'Raw',
37
+ ]