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,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ # pylint: disable=unused-import
3
+ """Fragmented Packets Reassembly
4
+ ===================================
5
+
6
+ .. module:: pcapkit.foundation.reassembly
7
+
8
+ :mod:`pcapkit.foundation.reassembly` bases on algorithms described
9
+ in :rfc:`791` and :rfc:`815`, implements datagram reassembly
10
+ of IP and TCP packets.
11
+
12
+ """
13
+ # Base Class for Reassembly
14
+ from pcapkit.foundation.reassembly.reassembly import Reassembly
15
+ from pcapkit.foundation.reassembly.ip import IP as IP_Reassembly
16
+
17
+ # Reassembly for IP
18
+ from pcapkit.foundation.reassembly.ipv4 import IPv4 as IPv4_Reassembly
19
+ from pcapkit.foundation.reassembly.ipv6 import IPv6 as IPv6_Reassembly
20
+
21
+ # Reassembly for TCP
22
+ from pcapkit.foundation.reassembly.tcp import TCP as TCP_Reassembly
23
+
24
+ __all__ = [
25
+ 'IPv4_Reassembly', 'IPv6_Reassembly', # IP Reassembly
26
+ 'TCP_Reassembly', # TCP Reassembly
27
+ ]
28
+
29
+ from typing import TYPE_CHECKING
30
+
31
+ from pcapkit.corekit.infoclass import Info, info_final
32
+
33
+ if TYPE_CHECKING:
34
+ from typing import Optional
35
+
36
+
37
+ @info_final
38
+ class ReassemblyManager(Info):
39
+ """Reassembly Manager."""
40
+
41
+ #: IPv4 reassembly.
42
+ ipv4: 'IPv4_Reassembly'
43
+ #: IPv6 reassembly.
44
+ ipv6: 'IPv6_Reassembly'
45
+ #: TCP reassembly.
46
+ tcp: 'TCP_Reassembly'
47
+
48
+ if TYPE_CHECKING:
49
+ def __init__(self, ipv4: 'Optional[IPv4_Reassembly]', ipv6: 'Optional[IPv6_Reassembly]', tcp: 'Optional[TCP_Reassembly]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long
@@ -0,0 +1,48 @@
1
+ # -*- coding: utf-8 -*-
2
+ """data models for reassembly"""
3
+
4
+ # IP reassembly
5
+ from pcapkit.foundation.reassembly.data.ip import Buffer as IP_Buffer
6
+ from pcapkit.foundation.reassembly.data.ip import BufferID as IP_BufferID
7
+ from pcapkit.foundation.reassembly.data.ip import Datagram as IP_Datagram
8
+ from pcapkit.foundation.reassembly.data.ip import DatagramID as IP_DatagramID
9
+ from pcapkit.foundation.reassembly.data.ip import Packet as IP_Packet
10
+
11
+ # TCP reassembly
12
+ from pcapkit.foundation.reassembly.data.tcp import Buffer as TCP_Buffer
13
+ from pcapkit.foundation.reassembly.data.tcp import BufferID as TCP_BufferID
14
+ from pcapkit.foundation.reassembly.data.tcp import Datagram as TCP_Datagram
15
+ from pcapkit.foundation.reassembly.data.tcp import DatagramID as TCP_DatagramID
16
+ from pcapkit.foundation.reassembly.data.tcp import Fragment as TCP_Fragment
17
+ from pcapkit.foundation.reassembly.data.tcp import HoleDiscriptor as TCP_HoleDiscriptor
18
+ from pcapkit.foundation.reassembly.data.tcp import Packet as TCP_Packet
19
+
20
+ __all__ = [
21
+ 'IP_Packet', 'IP_DatagramID', 'IP_Datagram', 'IP_Buffer',
22
+ 'IP_BufferID',
23
+
24
+ 'TCP_Packet', 'TCP_DatagramID', 'TCP_Datagram', 'TCP_Buffer',
25
+ 'TCP_Fragment', 'TCP_HoleDiscriptor', 'TCP_BufferID',
26
+ ]
27
+
28
+ from typing import TYPE_CHECKING
29
+
30
+ from pcapkit.corekit.infoclass import Info, info_final
31
+
32
+ if TYPE_CHECKING:
33
+ from typing import Optional
34
+
35
+
36
+ @info_final
37
+ class ReassemblyData(Info):
38
+ """Data storage for reassembly."""
39
+
40
+ #: IPv4 reassembled data.
41
+ ipv4: 'tuple[IP_Datagram, ...]'
42
+ #: IPv6 reassembled data.
43
+ ipv6: 'tuple[IP_Datagram, ...]'
44
+ #: TCP reassembled data.
45
+ tcp: 'tuple[TCP_Datagram, ...]'
46
+
47
+ if TYPE_CHECKING:
48
+ def __init__(self, ipv4: 'Optional[tuple[IP_Datagram, ...]]', ipv6: 'Optional[tuple[IP_Datagram, ...]]', tcp: 'Optional[tuple[TCP_Datagram, ...]]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long
@@ -0,0 +1,117 @@
1
+ # -*- coding: utf-8 -*-
2
+ """data models for IP reassembly"""
3
+
4
+ from typing import TYPE_CHECKING, Generic, TypeVar
5
+
6
+ from pcapkit.corekit.infoclass import Info, info_final
7
+ from pcapkit.utilities.compat import Tuple
8
+
9
+ __all__ = [
10
+ 'Packet', 'DatagramID', 'Datagram', 'Buffer', 'BufferID',
11
+ ]
12
+
13
+ if TYPE_CHECKING:
14
+ from ipaddress import IPv4Address, IPv6Address
15
+ from typing import Optional, overload
16
+
17
+ from typing_extensions import Literal, TypeAlias
18
+
19
+ from pcapkit.const.reg.transtype import TransType
20
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
21
+
22
+ _AT = TypeVar('_AT', 'IPv4Address', 'IPv6Address')
23
+
24
+ #: Buffer ID.
25
+ BufferID: 'TypeAlias' = Tuple[_AT, _AT, int, 'TransType']
26
+
27
+
28
+ @info_final
29
+ class Packet(Info, Generic[_AT]):
30
+ """Data model for :term:`IPv4 <reasm.ipv4.packet>` and/or
31
+ :term:`IPv6 <reasm.ipv6.packet>` packet representation.."""
32
+
33
+ #: Buffer ID.
34
+ bufid: 'BufferID'
35
+ #: Original packet range number.
36
+ num: 'int'
37
+ #: Fragment offset.
38
+ fo: 'int'
39
+ #: Internet header length.
40
+ ihl: 'int'
41
+ #: More fragments flag.
42
+ mf: 'bool'
43
+ #: Total length, header included.
44
+ tl: 'int'
45
+ #: Raw :obj:`bytes` type header.
46
+ header: 'bytes'
47
+ #: Raw :obj:`bytearray` type payload.
48
+ payload: 'bytearray'
49
+
50
+ if TYPE_CHECKING:
51
+ def __init__(self, bufid: 'tuple[_AT, _AT, int, TransType]', num: 'int', fo: 'int', ihl: 'int', mf: 'bool', tl: 'int', header: 'bytes', payload: 'bytearray') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
52
+
53
+
54
+ @info_final
55
+ class DatagramID(Info, Generic[_AT]):
56
+ """Data model for :term:`IPv4 <reasm.ipv4.datagram>` and/or
57
+ :term:`IPv6 <reasm.ipv6.datagram>` original packet identifier."""
58
+
59
+ #: Source address.
60
+ src: '_AT'
61
+ #: Destination address.
62
+ dst: '_AT'
63
+ #: IP protocol identifier.
64
+ id: 'int'
65
+ #: Payload protocol type.
66
+ proto: 'TransType'
67
+
68
+ if TYPE_CHECKING:
69
+ def __init__(self, src: '_AT', dst: '_AT', id: 'int', proto: 'TransType') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
70
+
71
+
72
+ @info_final
73
+ class Datagram(Info, Generic[_AT]):
74
+ """Data model for :term:`IPv4 <reasm.ipv4.datagram>` and/or
75
+ :term:`IPv6 <reasm.ipv6.datagram>` reassembled datagram."""
76
+
77
+ #: Completed flag.
78
+ completed: 'bool'
79
+ #: Original packet identifier.
80
+ id: 'DatagramID[_AT]'
81
+ #: Packet numbers.
82
+ index: 'tuple[int, ...]'
83
+ #: Initial IP header.
84
+ header: 'bytes'
85
+ #: Reassembled IP payload.
86
+ payload: 'bytes | tuple[bytes, ...]'
87
+ #: Parsed IP payload.
88
+ packet: 'Optional[Protocol]'
89
+
90
+ if TYPE_CHECKING:
91
+ @overload #pylint: disable=used-before-assignment
92
+ def __init__(self, completed: 'Literal[True]', id: 'DatagramID[_AT]', index: 'tuple[int, ...]', header: 'bytes', payload: 'bytes', packet: 'Protocol') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
93
+
94
+ @overload
95
+ def __init__(self, completed: 'Literal[False]', id: 'DatagramID[_AT]', index: 'tuple[int, ...]', header: 'bytes', payload: 'tuple[bytes, ...]', packet: 'None') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
96
+
97
+ def __init__(self, completed: 'bool', id: 'DatagramID[_AT]', index: 'tuple[int, ...]', header: 'bytes', payload: 'bytes | tuple[bytes, ...]', packet: 'Optional[Protocol]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
98
+
99
+
100
+ @info_final
101
+ class Buffer(Info, Generic[_AT]):
102
+ """Data model for :term:`IPv4 <reasm.ipv4.buffer>` and/or
103
+ :term:`IPv6 <reasm.ipv6.buffer>` reassembly buffer entry."""
104
+
105
+ #: Total data length.
106
+ TDL: 'int'
107
+ #: Fragment received bit table.
108
+ RCVBT: 'bytearray'
109
+ #: List of reassembled packets.
110
+ index: 'list[int]'
111
+ #: Header buffer.
112
+ header: 'bytes'
113
+ #: Data buffer, holes set to ``b'\x00'``.
114
+ datagram: 'bytearray'
115
+
116
+ if TYPE_CHECKING:
117
+ def __init__(self, TDL: 'int', RCVBT: 'bytearray', index: 'list[int]', header: 'bytes', datagram: 'bytearray') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
@@ -0,0 +1,145 @@
1
+ # -*- coding: utf-8 -*-
2
+ """data models for TCP reassembly"""
3
+
4
+ from typing import TYPE_CHECKING, Generic, TypeVar
5
+
6
+ from pcapkit.corekit.infoclass import Info, info_final
7
+ from pcapkit.utilities.compat import Tuple
8
+
9
+ __all__ = [
10
+ 'Packet', 'DatagramID', 'Datagram', 'HoleDiscriptor',
11
+ 'Fragment', 'Buffer', 'BufferID',
12
+ ]
13
+
14
+ if TYPE_CHECKING:
15
+ from ipaddress import IPv4Address, IPv6Address
16
+ from typing import Optional, overload
17
+
18
+ from typing_extensions import Literal, TypeAlias
19
+
20
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
21
+
22
+ _AT = TypeVar('_AT', 'IPv4Address', 'IPv6Address')
23
+
24
+ #: Buffer ID.
25
+ BufferID: 'TypeAlias' = Tuple[_AT, int, _AT, int]
26
+
27
+
28
+ @info_final
29
+ class Packet(Info):
30
+ """Data model for :term:`TCP <reasm.tcp.packet>` packet representation."""
31
+
32
+ #: Buffer ID.
33
+ bufid: 'BufferID'
34
+ #: Data sequence number.
35
+ dsn: 'int'
36
+ #: Acknowledgment number.
37
+ ack: 'int'
38
+ #: Original packet range number.
39
+ num: 'int'
40
+ #: Synchronise flag.
41
+ syn: 'bool'
42
+ #: Finish flag.
43
+ fin: 'bool'
44
+ #: Reset connection flag.
45
+ rst: 'bool'
46
+ #: Payload length, header excluded.
47
+ len: 'int'
48
+ #: This sequence number.
49
+ first: 'int'
50
+ #: Next (wanted) sequence number.
51
+ last: 'int'
52
+ #: Raw :obj:`bytes` type header.
53
+ header: 'bytes'
54
+ #: Raw :obj:`bytearray` type payload.
55
+ payload: 'bytearray'
56
+
57
+ if TYPE_CHECKING:
58
+ def __init__(self, bufid: 'BufferID', dsn: 'int', ack: 'int', num: 'int', syn: 'bool', fin: 'bool', rst: 'bool', len: 'int', first: 'int', last: 'int', header: 'bytes', payload: 'bytearray') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
59
+
60
+
61
+ @info_final
62
+ class DatagramID(Info, Generic[_AT]):
63
+ """Data model for :term:`TCP <reasm.tcp.datagram>` original packet identifier."""
64
+
65
+ #: Source address.
66
+ src: 'tuple[_AT, int]'
67
+ #: Destination address.
68
+ dst: 'tuple[_AT, int]'
69
+ #: Original packet ACK number.
70
+ ack: 'int'
71
+
72
+ if TYPE_CHECKING:
73
+ def __init__(self, src: 'tuple[_AT, int]', dst: 'tuple[_AT, int]', ack: 'int') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
74
+
75
+
76
+ @info_final
77
+ class Datagram(Info, Generic[_AT]):
78
+ """Data model for :term:`TCP <reasm.tcp.datagram>`."""
79
+
80
+ #: Completed flag.
81
+ completed: 'bool'
82
+ #: Original packet identifier.
83
+ id: 'DatagramID[_AT]'
84
+ #: Packet numbers.
85
+ index: 'tuple[int, ...]'
86
+ #: Initial TCP header.
87
+ header: 'bytes'
88
+ #: Reassembled payload (application layer data).
89
+ payload: 'bytes | tuple[bytes, ...]'
90
+ #: Parsed reassembled payload.
91
+ packet: 'Optional[Protocol]'
92
+
93
+ if TYPE_CHECKING:
94
+ @overload # pylint: disable=used-before-assignment
95
+ def __init__(self, completed: 'Literal[True]', id: 'DatagramID[_AT]', index: 'tuple[int, ...]', header: 'bytes', payload: 'bytes', packet: 'Protocol') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
96
+
97
+ @overload
98
+ def __init__(self, completed: 'Literal[False]', id: 'DatagramID[_AT]', index: 'tuple[int, ...]', header: 'bytes', payload: 'tuple[bytes, ...]', packet: 'None') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
99
+
100
+ def __init__(self, completed: 'bool', id: 'DatagramID[_AT]', index: 'tuple[int, ...]', header: 'bytes', payload: 'bytes | tuple[bytes, ...]', packet: 'Optional[Protocol]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
101
+
102
+
103
+ @info_final
104
+ class HoleDiscriptor(Info):
105
+ """Data model for :term:`TCP <reasm.tcp.buffer>` hole descriptor."""
106
+
107
+ #: Start of hole.
108
+ first: 'int'
109
+ #: Stop of hole.
110
+ last: 'int'
111
+
112
+ if TYPE_CHECKING:
113
+ def __init__(self, first: 'int', last: 'int') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
114
+
115
+
116
+ @info_final
117
+ class Fragment(Info):
118
+ """Data model for :term:`TCP <reasm.tcp.buffer>` ACK list fragment item."""
119
+
120
+ #: List of reassembled packets.
121
+ ind: 'list[int]'
122
+ #: ISN of payload buffer.
123
+ isn: 'int'
124
+ #: Length of payload buffer.
125
+ len: 'int'
126
+ #: Reassembled payload holes set to b'\x00'.
127
+ raw: 'bytearray'
128
+
129
+ if TYPE_CHECKING:
130
+ def __init__(self, ind: 'list[int]', isn: 'int', len: 'int', raw: 'bytearray') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
131
+
132
+
133
+ @info_final
134
+ class Buffer(Info):
135
+ """Data model for :term:`TCP <reasm.tcp.buffer>` buffer entry."""
136
+
137
+ #: Hole descriptor list.
138
+ hdl: 'list[HoleDiscriptor]'
139
+ #: Initial TCP header.
140
+ hdr: 'bytes'
141
+ #: ACK list.
142
+ ack: 'dict[int, Fragment]'
143
+
144
+ if TYPE_CHECKING:
145
+ def __init__(self, hdl: 'list[HoleDiscriptor]', hdr: 'bytes', ack: 'dict[int, Fragment]') -> 'None': ... # pylint: disable=unused-argument,super-init-not-called,multiple-statements,line-too-long,redefined-builtin
@@ -0,0 +1,192 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IP Datagram Reassembly
3
+ ============================
4
+
5
+ .. module:: pcapkit.foundation.reassembly.ip
6
+
7
+ :mod:`pcapkit.foundation.reassembly.ip` contains
8
+ :class:`~pcapkit.foundation.reassembly.ip.IP`
9
+ only, which reconstructs fragmented IP packets back to
10
+ origin. The following algorithm implement is based on IP
11
+ reassembly procedure introduced in :rfc:`791`, using
12
+ ``RCVBT`` (fragment receivedbit table). Though another
13
+ algorithm is explained in :rfc:`815`, replacing ``RCVBT``,
14
+ however, this implement still used the elder one.
15
+
16
+ """
17
+ from typing import TYPE_CHECKING, Generic
18
+
19
+ from pcapkit.foundation.reassembly.data.ip import (_AT, Buffer, BufferID, Datagram, DatagramID,
20
+ Packet)
21
+ from pcapkit.foundation.reassembly.reassembly import ReassemblyBase as Reassembly
22
+
23
+ if TYPE_CHECKING:
24
+ from typing import Type
25
+
26
+ from pcapkit.const.reg.transtype import TransType
27
+ from pcapkit.protocols.internet.ip import IP as IP_Protocol
28
+
29
+ __all__ = ['IP']
30
+
31
+
32
+ class IP(Reassembly[Packet[_AT], Datagram[_AT], BufferID, Buffer[_AT]], Generic[_AT]): # pylint: disable=abstract-method
33
+ """Reassembly for IP payload.
34
+
35
+ Args:
36
+ strict: if return all datagrams (including those not
37
+ implemented) when submit
38
+ store: if store reassembled datagram in memory, i.e.,
39
+ :attr:`self._dtgram <pcapkit.foundation.reassembly.reassembly.Reassembly._dtgram>`
40
+ (if not, datagram will be discarded after callback)
41
+
42
+ Important:
43
+ This class is not intended to be instantiated directly,
44
+ but rather used as a base class for the protocol-aware
45
+ reassembly classes.
46
+
47
+ """
48
+ if TYPE_CHECKING:
49
+ protocol: 'Type[IP_Protocol]'
50
+
51
+ ##########################################################################
52
+ # Methods.
53
+ ##########################################################################
54
+
55
+ def reassembly(self, info: 'Packet[_AT]') -> 'None':
56
+ """Reassembly procedure.
57
+
58
+ Arguments:
59
+ info: info dict of packets to be reassembled
60
+
61
+ """
62
+ # clear cache
63
+ self._flag_n = False
64
+ self.__cached__.clear()
65
+
66
+ BUFID = info.bufid # Buffer Identifier
67
+ FO = info.fo # Fragment Offset
68
+ IHL = info.ihl # Internet Header Length
69
+ MF = info.mf # More Fragments flag
70
+ TL = info.tl # Total Length
71
+
72
+ # when non-fragmented (possibly discarded) packet received
73
+ if not FO and not MF:
74
+ if BUFID in self._buffer:
75
+ self._dtgram.extend(
76
+ self.submit(self._buffer.pop(BUFID), bufid=BUFID)
77
+ )
78
+ return
79
+
80
+ # initialise buffer with BUFID
81
+ if BUFID not in self._buffer:
82
+ self._buffer[BUFID] = Buffer(
83
+ TDL=-1, # Total Data Length
84
+ RCVBT=bytearray(8191), # Fragment Received Bit Table
85
+ index=[], # index record
86
+ header=b'' if FO else info.header, # header buffer
87
+ datagram=bytearray(65535), # data buffer
88
+ )
89
+ else:
90
+ # put header into header buffer
91
+ if not FO: # pylint: disable=else-if-used
92
+ self._buffer[BUFID].__update__(header=info.header)
93
+
94
+ # append packet index
95
+ self._buffer[BUFID].index.append(info.num)
96
+
97
+ # put data into data buffer
98
+ start = FO
99
+ stop = TL - IHL + FO
100
+ self._buffer[BUFID].datagram[start:stop] = info.payload
101
+
102
+ # set RCVBT bits (in 8 octets)
103
+ start = FO // 8
104
+ stop = FO // 8 + (TL - IHL + 7) // 8
105
+ self._buffer[BUFID].RCVBT[start:stop] = b'\x01' * (stop - start + 1)
106
+
107
+ # get total data length (header excludes)
108
+ TDL = 0
109
+ if not MF:
110
+ TDL = TL - IHL + FO
111
+ self._buffer[BUFID].__update__(TDL=TDL)
112
+
113
+ # when datagram is reassembled in whole
114
+ start = 0
115
+ stop = (TDL + 7) // 8
116
+ if TDL and all(self._buffer[BUFID].RCVBT[start:stop]):
117
+ self._dtgram.extend(
118
+ self.submit(self._buffer.pop(BUFID), bufid=BUFID, checked=True)
119
+ )
120
+
121
+ def submit(self, buf: 'Buffer[_AT]', *, bufid: 'tuple[_AT, _AT, int, TransType]', # type: ignore[override] # pylint: disable=arguments-differ
122
+ checked: 'bool' = False) -> 'list[Datagram[_AT]]':
123
+ """Submit reassembled payload.
124
+
125
+ Arguments:
126
+ buf: buffer dict of reassembled packets
127
+ bufid: buffer identifier
128
+ checked: buffer consistency checked flag
129
+
130
+ Returns:
131
+ Reassembled packets.
132
+
133
+ """
134
+ TDL = buf.TDL
135
+ RCVBT = buf.RCVBT
136
+ index = buf.index
137
+ header = buf.header
138
+ datagram = buf.datagram
139
+
140
+ start = 0
141
+ stop = (TDL + 7) // 8
142
+ flag = checked or (TDL and all(RCVBT[start:stop]))
143
+ # if datagram is not implemented
144
+ if not flag and self._flag_s:
145
+ data = [] # type: list[bytes]
146
+ byte = bytearray()
147
+ # extract received payload
148
+ for (bctr, bit) in enumerate(RCVBT):
149
+ if bit: # received bit
150
+ this = bctr * 8
151
+ that = this + 8
152
+ byte += datagram[this:that]
153
+ else: # missing bit
154
+ if byte: # strip empty payload
155
+ data.append(bytes(byte))
156
+ byte = bytearray()
157
+ # strip empty packets
158
+ if data or header:
159
+ packet = Datagram(
160
+ completed=False,
161
+ id=DatagramID(
162
+ src=bufid[0],
163
+ dst=bufid[1],
164
+ id=bufid[2],
165
+ proto=bufid[3],
166
+ ),
167
+ index=tuple(index),
168
+ header=header,
169
+ payload=tuple(data),
170
+ packet=None,
171
+ )
172
+ # if datagram is reassembled in whole
173
+ else:
174
+ payload = datagram[:TDL]
175
+ packet = Datagram(
176
+ completed=True,
177
+ id=DatagramID(
178
+ src=bufid[0],
179
+ dst=bufid[1],
180
+ id=bufid[2],
181
+ proto=bufid[3],
182
+ ),
183
+ index=tuple(index),
184
+ header=header,
185
+ payload=bytes(payload),
186
+ packet=self.protocol.analyze(bufid[3], bytes(payload)),
187
+ )
188
+
189
+ ret = [packet]
190
+ for callback in self.__callback_fn__:
191
+ callback(ret)
192
+ return ret
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IPv4 Datagram Reassembly
3
+ ==============================
4
+
5
+ .. module:: pcapkit.foundation.reassembly.ipv4
6
+
7
+ :mod:`pcapkit.foundation.reassembly.ipv4` contains
8
+ :class:`~pcapkit.foundation.reassembly.ipv4.IPv4`
9
+ only, which reconstructs fragmented IPv4 packets back to
10
+ origin. Please refer to :doc:`ip` for more information.
11
+
12
+ """
13
+ from pcapkit.foundation.reassembly.ip import IP
14
+ from pcapkit.protocols.internet.ipv4 import IPv4 as IPv4_Protocol
15
+
16
+ __all__ = ['IPv4']
17
+
18
+
19
+ # BUG: It is supposed to be ``IP[IPv4Address]``. But somehow Python
20
+ # thinks that ``IP`` should take 4 arguments as in its parent class
21
+ # ``Reassembly``. So we have to drop the type hint here.
22
+ class IPv4(IP):
23
+ """Reassembly for IPv4 payload.
24
+
25
+ Args:
26
+ strict: if return all datagrams (including those not
27
+ implemented) when submit
28
+ store: if store reassembled datagram in memory, i.e.,
29
+ :attr:`self._dtgram <pcapkit.foundation.reassembly.reassembly.Reassembly._dtgram>`
30
+ (if not, datagram will be discarded after callback)
31
+
32
+ Example:
33
+ >>> from pcapkit.foundation.reassembly import IPv4
34
+ # Initialise instance:
35
+ >>> ipv4_reassembly = IPv4()
36
+ # Call reassembly:
37
+ >>> ipv4_reassembly(packet_dict)
38
+ # Fetch result:
39
+ >>> result = ipv4_reassembly.datagram
40
+
41
+ """
42
+
43
+ ##########################################################################
44
+ # Defaults.
45
+ ##########################################################################
46
+
47
+ #: Protocol name of current reassembly object.
48
+ __protocol_name__ = 'IPv4'
49
+ #: Protocol of current reassembly object.
50
+ __protocol_type__ = IPv4_Protocol
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ """IPv6 Datagram Reassembly
3
+ ==============================
4
+
5
+ .. module:: pcapkit.foundation.reassembly.ipv6
6
+
7
+ :mod:`pcapkit.foundation.reassembly.ipv6` contains
8
+ :class:`~pcapkit.foundation.reassembly.ipv6.IPv6`
9
+ only, which reconstructs fragmented IPv6 packets back to
10
+ origin. Please refer to :doc:`ip` for more information.
11
+
12
+ """
13
+ from pcapkit.foundation.reassembly.ip import IP
14
+ from pcapkit.protocols.internet.ipv6 import IPv6 as IPv6_Protocol
15
+
16
+ __all__ = ['IPv6']
17
+
18
+
19
+ # BUG: It is supposed to be ``IP[IPv6Address]``. But somehow Python
20
+ # thinks that ``IP`` should take 4 arguments as in its parent class
21
+ # ``Reassembly``. So we have to drop the type hint here.
22
+ class IPv6(IP):
23
+ """Reassembly for IPv6 payload.
24
+
25
+ Args:
26
+ strict: if return all datagrams (including those not
27
+ implemented) when submit
28
+ store: if store reassembled datagram in memory, i.e.,
29
+ :attr:`self._dtgram <pcapkit.foundation.reassembly.reassembly.Reassembly._dtgram>`
30
+ (if not, datagram will be discarded after callback)
31
+
32
+ Example:
33
+ >>> from pcapkit.foundation.reassembly import IPv6
34
+ # Initialise instance:
35
+ >>> ipv6_reassembly = IPv6()
36
+ # Call reassembly:
37
+ >>> ipv6_reassembly(packet_dict)
38
+ # Fetch result:
39
+ >>> result = ipv6_reassembly.datagram
40
+
41
+ """
42
+
43
+ ##########################################################################
44
+ # Defaults.
45
+ ##########################################################################
46
+
47
+ #: Protocol name of current reassembly object.
48
+ __protocol_name__ = 'IPv6'
49
+ #: Protocol of current reassembly object.
50
+ __protocol_type__ = IPv6_Protocol