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.
- pcapkit/__init__.py +126 -0
- pcapkit/__main__.py +138 -0
- pcapkit/all.py +136 -0
- pcapkit/const/__init__.py +81 -0
- pcapkit/const/arp/__init__.py +25 -0
- pcapkit/const/arp/hardware.py +181 -0
- pcapkit/const/arp/operation.py +131 -0
- pcapkit/const/ftp/__init__.py +25 -0
- pcapkit/const/ftp/command.py +309 -0
- pcapkit/const/ftp/return_code.py +304 -0
- pcapkit/const/hip/__init__.py +94 -0
- pcapkit/const/hip/certificate.py +77 -0
- pcapkit/const/hip/cipher.py +65 -0
- pcapkit/const/hip/di.py +59 -0
- pcapkit/const/hip/ecdsa_curve.py +59 -0
- pcapkit/const/hip/ecdsa_low_curve.py +56 -0
- pcapkit/const/hip/eddsa_curve.py +65 -0
- pcapkit/const/hip/esp_transform_suite.py +98 -0
- pcapkit/const/hip/group.py +86 -0
- pcapkit/const/hip/hi_algorithm.py +86 -0
- pcapkit/const/hip/hit_suite.py +68 -0
- pcapkit/const/hip/nat_traversal.py +62 -0
- pcapkit/const/hip/notify_message.py +200 -0
- pcapkit/const/hip/packet.py +89 -0
- pcapkit/const/hip/parameter.py +377 -0
- pcapkit/const/hip/registration.py +68 -0
- pcapkit/const/hip/registration_failure.py +84 -0
- pcapkit/const/hip/suite.py +71 -0
- pcapkit/const/hip/transport.py +59 -0
- pcapkit/const/http/__init__.py +39 -0
- pcapkit/const/http/error_code.py +95 -0
- pcapkit/const/http/frame.py +95 -0
- pcapkit/const/http/method.py +184 -0
- pcapkit/const/http/setting.py +96 -0
- pcapkit/const/http/status_code.py +294 -0
- pcapkit/const/ipv4/__init__.py +57 -0
- pcapkit/const/ipv4/classification_level.py +64 -0
- pcapkit/const/ipv4/option_class.py +55 -0
- pcapkit/const/ipv4/option_number.py +137 -0
- pcapkit/const/ipv4/protection_authority.py +63 -0
- pcapkit/const/ipv4/qs_function.py +51 -0
- pcapkit/const/ipv4/router_alert.py +251 -0
- pcapkit/const/ipv4/tos_del.py +51 -0
- pcapkit/const/ipv4/tos_ecn.py +55 -0
- pcapkit/const/ipv4/tos_pre.py +63 -0
- pcapkit/const/ipv4/tos_rel.py +51 -0
- pcapkit/const/ipv4/tos_thr.py +51 -0
- pcapkit/const/ipv4/ts_flag.py +53 -0
- pcapkit/const/ipv6/__init__.py +53 -0
- pcapkit/const/ipv6/extension_header.py +66 -0
- pcapkit/const/ipv6/option.py +137 -0
- pcapkit/const/ipv6/option_action.py +55 -0
- pcapkit/const/ipv6/qs_function.py +51 -0
- pcapkit/const/ipv6/router_alert.py +266 -0
- pcapkit/const/ipv6/routing.py +80 -0
- pcapkit/const/ipv6/seed_id.py +55 -0
- pcapkit/const/ipv6/smf_dpd_mode.py +51 -0
- pcapkit/const/ipv6/tagger_id.py +62 -0
- pcapkit/const/ipx/__init__.py +27 -0
- pcapkit/const/ipx/packet.py +72 -0
- pcapkit/const/ipx/socket.py +104 -0
- pcapkit/const/l2tp/__init__.py +21 -0
- pcapkit/const/l2tp/type.py +51 -0
- pcapkit/const/mh/__init__.py +204 -0
- pcapkit/const/mh/access_type.py +92 -0
- pcapkit/const/mh/ack_status_code.py +71 -0
- pcapkit/const/mh/ani_suboption.py +74 -0
- pcapkit/const/mh/auth_subtype.py +53 -0
- pcapkit/const/mh/binding_ack_flag.py +66 -0
- pcapkit/const/mh/binding_error.py +51 -0
- pcapkit/const/mh/binding_revocation.py +59 -0
- pcapkit/const/mh/binding_update_flag.py +81 -0
- pcapkit/const/mh/cga_extension.py +66 -0
- pcapkit/const/mh/cga_sec.py +57 -0
- pcapkit/const/mh/cga_type.py +68 -0
- pcapkit/const/mh/dhcp_support_mode.py +53 -0
- pcapkit/const/mh/dns_status_code.py +65 -0
- pcapkit/const/mh/dsmip6_tls_packet.py +62 -0
- pcapkit/const/mh/dsmipv6_home_address.py +74 -0
- pcapkit/const/mh/enumerating_algorithm.py +56 -0
- pcapkit/const/mh/fb_ack_status.py +62 -0
- pcapkit/const/mh/fb_action.py +71 -0
- pcapkit/const/mh/fb_indication_trigger.py +65 -0
- pcapkit/const/mh/fb_type.py +59 -0
- pcapkit/const/mh/flow_id_status.py +77 -0
- pcapkit/const/mh/flow_id_suboption.py +71 -0
- pcapkit/const/mh/handoff_type.py +71 -0
- pcapkit/const/mh/handover_ack_flag.py +54 -0
- pcapkit/const/mh/handover_ack_status.py +92 -0
- pcapkit/const/mh/handover_initiate_flag.py +57 -0
- pcapkit/const/mh/handover_initiate_status.py +62 -0
- pcapkit/const/mh/home_address_reply.py +71 -0
- pcapkit/const/mh/lla_code.py +63 -0
- pcapkit/const/mh/lma_mag_suboption.py +59 -0
- pcapkit/const/mh/mn_group_id.py +59 -0
- pcapkit/const/mh/mn_id_subtype.py +77 -0
- pcapkit/const/mh/operator_id.py +63 -0
- pcapkit/const/mh/option.py +260 -0
- pcapkit/const/mh/packet.py +119 -0
- pcapkit/const/mh/qos_attribute.py +89 -0
- pcapkit/const/mh/revocation_status_code.py +83 -0
- pcapkit/const/mh/revocation_trigger.py +86 -0
- pcapkit/const/mh/status_code.py +232 -0
- pcapkit/const/mh/traffic_selector.py +62 -0
- pcapkit/const/mh/upa_status.py +71 -0
- pcapkit/const/mh/upn_reason.py +80 -0
- pcapkit/const/ospf/__init__.py +27 -0
- pcapkit/const/ospf/authentication.py +65 -0
- pcapkit/const/ospf/packet.py +71 -0
- pcapkit/const/pcapng/__init__.py +51 -0
- pcapkit/const/pcapng/block_type.py +152 -0
- pcapkit/const/pcapng/filter_type.py +48 -0
- pcapkit/const/pcapng/hash_algorithm.py +59 -0
- pcapkit/const/pcapng/option_type.py +233 -0
- pcapkit/const/pcapng/record_type.py +57 -0
- pcapkit/const/pcapng/secrets_type.py +56 -0
- pcapkit/const/pcapng/verdict_type.py +53 -0
- pcapkit/const/reg/__init__.py +34 -0
- pcapkit/const/reg/apptype.py +32702 -0
- pcapkit/const/reg/ethertype.py +714 -0
- pcapkit/const/reg/linktype.py +902 -0
- pcapkit/const/reg/transtype.py +523 -0
- pcapkit/const/tcp/__init__.py +35 -0
- pcapkit/const/tcp/checksum.py +55 -0
- pcapkit/const/tcp/flags.py +73 -0
- pcapkit/const/tcp/mp_tcp_option.py +80 -0
- pcapkit/const/tcp/option.py +198 -0
- pcapkit/const/vlan/__init__.py +23 -0
- pcapkit/const/vlan/priority_level.py +71 -0
- pcapkit/corekit/__init__.py +59 -0
- pcapkit/corekit/fields/__init__.py +45 -0
- pcapkit/corekit/fields/collections.py +282 -0
- pcapkit/corekit/fields/field.py +269 -0
- pcapkit/corekit/fields/ipaddress.py +274 -0
- pcapkit/corekit/fields/misc.py +722 -0
- pcapkit/corekit/fields/numbers.py +375 -0
- pcapkit/corekit/fields/strings.py +245 -0
- pcapkit/corekit/infoclass.py +394 -0
- pcapkit/corekit/io.py +506 -0
- pcapkit/corekit/module.py +39 -0
- pcapkit/corekit/multidict.py +626 -0
- pcapkit/corekit/protochain.py +263 -0
- pcapkit/corekit/version.py +33 -0
- pcapkit/dumpkit/__init__.py +15 -0
- pcapkit/dumpkit/common.py +199 -0
- pcapkit/dumpkit/null.py +77 -0
- pcapkit/dumpkit/pcap.py +144 -0
- pcapkit/foundation/__init__.py +45 -0
- pcapkit/foundation/engines/__init__.py +36 -0
- pcapkit/foundation/engines/dpkt.py +230 -0
- pcapkit/foundation/engines/engine.py +194 -0
- pcapkit/foundation/engines/pcap.py +188 -0
- pcapkit/foundation/engines/pcapng.py +310 -0
- pcapkit/foundation/engines/pyshark.py +166 -0
- pcapkit/foundation/engines/scapy.py +161 -0
- pcapkit/foundation/extraction.py +915 -0
- pcapkit/foundation/reassembly/__init__.py +49 -0
- pcapkit/foundation/reassembly/data/__init__.py +48 -0
- pcapkit/foundation/reassembly/data/ip.py +117 -0
- pcapkit/foundation/reassembly/data/tcp.py +145 -0
- pcapkit/foundation/reassembly/ip.py +192 -0
- pcapkit/foundation/reassembly/ipv4.py +50 -0
- pcapkit/foundation/reassembly/ipv6.py +50 -0
- pcapkit/foundation/reassembly/reassembly.py +389 -0
- pcapkit/foundation/reassembly/tcp.py +249 -0
- pcapkit/foundation/registry/__init__.py +41 -0
- pcapkit/foundation/registry/foundation.py +327 -0
- pcapkit/foundation/registry/protocols.py +885 -0
- pcapkit/foundation/traceflow/__init__.py +44 -0
- pcapkit/foundation/traceflow/data/__init__.py +30 -0
- pcapkit/foundation/traceflow/data/tcp.py +105 -0
- pcapkit/foundation/traceflow/tcp.py +159 -0
- pcapkit/foundation/traceflow/traceflow.py +390 -0
- pcapkit/interface/__init__.py +22 -0
- pcapkit/interface/core.py +185 -0
- pcapkit/interface/misc.py +120 -0
- pcapkit/protocols/__init__.py +85 -0
- pcapkit/protocols/application/NotImplemented/bgp.py +0 -0
- pcapkit/protocols/application/NotImplemented/dhcp.py +0 -0
- pcapkit/protocols/application/NotImplemented/dhcpv6.py +0 -0
- pcapkit/protocols/application/NotImplemented/dns.py +0 -0
- pcapkit/protocols/application/NotImplemented/imap.py +0 -0
- pcapkit/protocols/application/NotImplemented/ldap.py +0 -0
- pcapkit/protocols/application/NotImplemented/mqtt.py +0 -0
- pcapkit/protocols/application/NotImplemented/nntp.py +0 -0
- pcapkit/protocols/application/NotImplemented/ntp.py +0 -0
- pcapkit/protocols/application/NotImplemented/onc_rpc.py +0 -0
- pcapkit/protocols/application/NotImplemented/pop.py +0 -0
- pcapkit/protocols/application/NotImplemented/rip.py +0 -0
- pcapkit/protocols/application/NotImplemented/rtp.py +0 -0
- pcapkit/protocols/application/NotImplemented/sip.py +0 -0
- pcapkit/protocols/application/NotImplemented/smtp.py +0 -0
- pcapkit/protocols/application/NotImplemented/snmp.py +0 -0
- pcapkit/protocols/application/NotImplemented/ssh.py +0 -0
- pcapkit/protocols/application/NotImplemented/telnet.py +0 -0
- pcapkit/protocols/application/NotImplemented/tls.py +0 -0
- pcapkit/protocols/application/NotImplemented/xmpp.py +0 -0
- pcapkit/protocols/application/__init__.py +34 -0
- pcapkit/protocols/application/application.py +114 -0
- pcapkit/protocols/application/ftp.py +206 -0
- pcapkit/protocols/application/http.py +176 -0
- pcapkit/protocols/application/httpv1.py +320 -0
- pcapkit/protocols/application/httpv2.py +1255 -0
- pcapkit/protocols/data/__init__.py +192 -0
- pcapkit/protocols/data/application/__init__.py +57 -0
- pcapkit/protocols/data/application/ftp.py +59 -0
- pcapkit/protocols/data/application/httpv1.py +79 -0
- pcapkit/protocols/data/application/httpv2.py +293 -0
- pcapkit/protocols/data/data.py +25 -0
- pcapkit/protocols/data/internet/__init__.py +298 -0
- pcapkit/protocols/data/internet/ah.py +31 -0
- pcapkit/protocols/data/internet/hip.py +804 -0
- pcapkit/protocols/data/internet/hopopt.py +351 -0
- pcapkit/protocols/data/internet/ipv4.py +369 -0
- pcapkit/protocols/data/internet/ipv6.py +67 -0
- pcapkit/protocols/data/internet/ipv6_frag.py +29 -0
- pcapkit/protocols/data/internet/ipv6_opts.py +368 -0
- pcapkit/protocols/data/internet/ipv6_route.py +86 -0
- pcapkit/protocols/data/internet/ipx.py +56 -0
- pcapkit/protocols/data/internet/mh.py +509 -0
- pcapkit/protocols/data/link/__init__.py +33 -0
- pcapkit/protocols/data/link/arp.py +74 -0
- pcapkit/protocols/data/link/ethernet.py +28 -0
- pcapkit/protocols/data/link/l2tp.py +63 -0
- pcapkit/protocols/data/link/ospf.py +58 -0
- pcapkit/protocols/data/link/vlan.py +42 -0
- pcapkit/protocols/data/misc/__init__.py +109 -0
- pcapkit/protocols/data/misc/null.py +18 -0
- pcapkit/protocols/data/misc/pcap/__init__.py +18 -0
- pcapkit/protocols/data/misc/pcap/frame.py +56 -0
- pcapkit/protocols/data/misc/pcap/header.py +53 -0
- pcapkit/protocols/data/misc/pcapng.py +925 -0
- pcapkit/protocols/data/misc/raw.py +25 -0
- pcapkit/protocols/data/protocol.py +32 -0
- pcapkit/protocols/data/transport/__init__.py +71 -0
- pcapkit/protocols/data/transport/tcp.py +555 -0
- pcapkit/protocols/data/transport/udp.py +29 -0
- pcapkit/protocols/internet/NotImplemented/ecn.py +0 -0
- pcapkit/protocols/internet/NotImplemented/esp.py +97 -0
- pcapkit/protocols/internet/NotImplemented/icmp.py +0 -0
- pcapkit/protocols/internet/NotImplemented/icmpv6.py +0 -0
- pcapkit/protocols/internet/NotImplemented/igmp.py +0 -0
- pcapkit/protocols/internet/NotImplemented/shim6.py +0 -0
- pcapkit/protocols/internet/__init__.py +43 -0
- pcapkit/protocols/internet/ah.py +275 -0
- pcapkit/protocols/internet/hip.py +4727 -0
- pcapkit/protocols/internet/hopopt.py +1879 -0
- pcapkit/protocols/internet/internet.py +240 -0
- pcapkit/protocols/internet/ip.py +51 -0
- pcapkit/protocols/internet/ipsec.py +50 -0
- pcapkit/protocols/internet/ipv4.py +1782 -0
- pcapkit/protocols/internet/ipv6.py +361 -0
- pcapkit/protocols/internet/ipv6_frag.py +258 -0
- pcapkit/protocols/internet/ipv6_opts.py +1890 -0
- pcapkit/protocols/internet/ipv6_route.py +710 -0
- pcapkit/protocols/internet/ipx.py +230 -0
- pcapkit/protocols/internet/mh.py +2764 -0
- pcapkit/protocols/link/NotImplemented/dsl.py +0 -0
- pcapkit/protocols/link/NotImplemented/eapol.py +1 -0
- pcapkit/protocols/link/NotImplemented/fddi.py +0 -0
- pcapkit/protocols/link/NotImplemented/isdn.py +0 -0
- pcapkit/protocols/link/NotImplemented/ndp.py +0 -0
- pcapkit/protocols/link/NotImplemented/ppp.py +0 -0
- pcapkit/protocols/link/__init__.py +35 -0
- pcapkit/protocols/link/arp.py +421 -0
- pcapkit/protocols/link/ethernet.py +248 -0
- pcapkit/protocols/link/l2tp.py +267 -0
- pcapkit/protocols/link/link.py +140 -0
- pcapkit/protocols/link/ospf.py +342 -0
- pcapkit/protocols/link/rarp.py +82 -0
- pcapkit/protocols/link/vlan.py +225 -0
- pcapkit/protocols/misc/__init__.py +37 -0
- pcapkit/protocols/misc/null.py +129 -0
- pcapkit/protocols/misc/pcap/__init__.py +17 -0
- pcapkit/protocols/misc/pcap/frame.py +478 -0
- pcapkit/protocols/misc/pcap/header.py +358 -0
- pcapkit/protocols/misc/pcapng.py +5520 -0
- pcapkit/protocols/misc/raw.py +180 -0
- pcapkit/protocols/protocol.py +1216 -0
- pcapkit/protocols/schema/__init__.py +140 -0
- pcapkit/protocols/schema/application/__init__.py +40 -0
- pcapkit/protocols/schema/application/ftp.py +21 -0
- pcapkit/protocols/schema/application/httpv1.py +21 -0
- pcapkit/protocols/schema/application/httpv2.py +384 -0
- pcapkit/protocols/schema/internet/__init__.py +294 -0
- pcapkit/protocols/schema/internet/ah.py +40 -0
- pcapkit/protocols/schema/internet/hip.py +1184 -0
- pcapkit/protocols/schema/internet/hopopt.py +679 -0
- pcapkit/protocols/schema/internet/ipv4.py +576 -0
- pcapkit/protocols/schema/internet/ipv6.py +63 -0
- pcapkit/protocols/schema/internet/ipv6_frag.py +48 -0
- pcapkit/protocols/schema/internet/ipv6_opts.py +680 -0
- pcapkit/protocols/schema/internet/ipv6_route.py +198 -0
- pcapkit/protocols/schema/internet/ipx.py +40 -0
- pcapkit/protocols/schema/internet/mh.py +718 -0
- pcapkit/protocols/schema/link/__init__.py +19 -0
- pcapkit/protocols/schema/link/arp.py +39 -0
- pcapkit/protocols/schema/link/ethernet.py +51 -0
- pcapkit/protocols/schema/link/l2tp.py +88 -0
- pcapkit/protocols/schema/link/ospf.py +90 -0
- pcapkit/protocols/schema/link/vlan.py +69 -0
- pcapkit/protocols/schema/misc/__init__.py +108 -0
- pcapkit/protocols/schema/misc/null.py +18 -0
- pcapkit/protocols/schema/misc/pcap/__init__.py +10 -0
- pcapkit/protocols/schema/misc/pcap/frame.py +51 -0
- pcapkit/protocols/schema/misc/pcap/header.py +63 -0
- pcapkit/protocols/schema/misc/pcapng.py +1689 -0
- pcapkit/protocols/schema/misc/raw.py +24 -0
- pcapkit/protocols/schema/schema.py +809 -0
- pcapkit/protocols/schema/transport/__init__.py +69 -0
- pcapkit/protocols/schema/transport/tcp.py +928 -0
- pcapkit/protocols/schema/transport/udp.py +90 -0
- pcapkit/protocols/transport/NotImplemented/dccp.py +0 -0
- pcapkit/protocols/transport/NotImplemented/rsvp.py +0 -0
- pcapkit/protocols/transport/NotImplemented/sctp.py +0 -0
- pcapkit/protocols/transport/__init__.py +27 -0
- pcapkit/protocols/transport/tcp.py +3025 -0
- pcapkit/protocols/transport/transport.py +158 -0
- pcapkit/protocols/transport/udp.py +214 -0
- pcapkit/py.typed +0 -0
- pcapkit/toolkit/__init__.py +57 -0
- pcapkit/toolkit/dpkt.py +306 -0
- pcapkit/toolkit/pcap.py +212 -0
- pcapkit/toolkit/pcapng.py +251 -0
- pcapkit/toolkit/pyshark.py +99 -0
- pcapkit/toolkit/scapy.py +297 -0
- pcapkit/utilities/__init__.py +20 -0
- pcapkit/utilities/compat.py +196 -0
- pcapkit/utilities/decorators.py +192 -0
- pcapkit/utilities/exceptions.py +365 -0
- pcapkit/utilities/logging.py +55 -0
- pcapkit/utilities/warnings.py +185 -0
- pcapkit/vendor/__init__.py +105 -0
- pcapkit/vendor/__main__.py +92 -0
- pcapkit/vendor/arp/__init__.py +27 -0
- pcapkit/vendor/arp/hardware.py +29 -0
- pcapkit/vendor/arp/operation.py +29 -0
- pcapkit/vendor/default.py +474 -0
- pcapkit/vendor/ftp/__init__.py +27 -0
- pcapkit/vendor/ftp/command.py +244 -0
- pcapkit/vendor/ftp/return_code.py +256 -0
- pcapkit/vendor/hip/__init__.py +94 -0
- pcapkit/vendor/hip/certificate.py +29 -0
- pcapkit/vendor/hip/cipher.py +29 -0
- pcapkit/vendor/hip/di.py +29 -0
- pcapkit/vendor/hip/ecdsa_curve.py +29 -0
- pcapkit/vendor/hip/ecdsa_low_curve.py +29 -0
- pcapkit/vendor/hip/eddsa_curve.py +85 -0
- pcapkit/vendor/hip/esp_transform_suite.py +29 -0
- pcapkit/vendor/hip/group.py +87 -0
- pcapkit/vendor/hip/hi_algorithm.py +29 -0
- pcapkit/vendor/hip/hit_suite.py +29 -0
- pcapkit/vendor/hip/nat_traversal.py +29 -0
- pcapkit/vendor/hip/notify_message.py +29 -0
- pcapkit/vendor/hip/packet.py +88 -0
- pcapkit/vendor/hip/parameter.py +88 -0
- pcapkit/vendor/hip/registration.py +29 -0
- pcapkit/vendor/hip/registration_failure.py +29 -0
- pcapkit/vendor/hip/suite.py +29 -0
- pcapkit/vendor/hip/transport.py +29 -0
- pcapkit/vendor/http/__init__.py +39 -0
- pcapkit/vendor/http/error_code.py +95 -0
- pcapkit/vendor/http/frame.py +91 -0
- pcapkit/vendor/http/method.py +167 -0
- pcapkit/vendor/http/setting.py +93 -0
- pcapkit/vendor/http/status_code.py +185 -0
- pcapkit/vendor/ipv4/__init__.py +57 -0
- pcapkit/vendor/ipv4/classification_level.py +91 -0
- pcapkit/vendor/ipv4/option_class.py +80 -0
- pcapkit/vendor/ipv4/option_number.py +105 -0
- pcapkit/vendor/ipv4/protection_authority.py +84 -0
- pcapkit/vendor/ipv4/qs_function.py +78 -0
- pcapkit/vendor/ipv4/router_alert.py +93 -0
- pcapkit/vendor/ipv4/tos_del.py +78 -0
- pcapkit/vendor/ipv4/tos_ecn.py +95 -0
- pcapkit/vendor/ipv4/tos_pre.py +84 -0
- pcapkit/vendor/ipv4/tos_rel.py +78 -0
- pcapkit/vendor/ipv4/tos_thr.py +77 -0
- pcapkit/vendor/ipv4/ts_flag.py +79 -0
- pcapkit/vendor/ipv6/__init__.py +53 -0
- pcapkit/vendor/ipv6/extension_header.py +171 -0
- pcapkit/vendor/ipv6/option.py +104 -0
- pcapkit/vendor/ipv6/option_action.py +90 -0
- pcapkit/vendor/ipv6/qs_function.py +78 -0
- pcapkit/vendor/ipv6/router_alert.py +93 -0
- pcapkit/vendor/ipv6/routing.py +87 -0
- pcapkit/vendor/ipv6/seed_id.py +81 -0
- pcapkit/vendor/ipv6/smf_dpd_mode.py +78 -0
- pcapkit/vendor/ipv6/tagger_id.py +81 -0
- pcapkit/vendor/ipx/__init__.py +37 -0
- pcapkit/vendor/ipx/packet.py +123 -0
- pcapkit/vendor/ipx/socket.py +125 -0
- pcapkit/vendor/l2tp/__init__.py +21 -0
- pcapkit/vendor/l2tp/type.py +78 -0
- pcapkit/vendor/mh/__init__.py +204 -0
- pcapkit/vendor/mh/access_type.py +87 -0
- pcapkit/vendor/mh/ack_status_code.py +88 -0
- pcapkit/vendor/mh/ani_suboption.py +88 -0
- pcapkit/vendor/mh/auth_subtype.py +83 -0
- pcapkit/vendor/mh/binding_ack_flag.py +148 -0
- pcapkit/vendor/mh/binding_error.py +78 -0
- pcapkit/vendor/mh/binding_revocation.py +87 -0
- pcapkit/vendor/mh/binding_update_flag.py +147 -0
- pcapkit/vendor/mh/cga_extension.py +91 -0
- pcapkit/vendor/mh/cga_sec.py +91 -0
- pcapkit/vendor/mh/cga_type.py +74 -0
- pcapkit/vendor/mh/dhcp_support_mode.py +77 -0
- pcapkit/vendor/mh/dns_status_code.py +87 -0
- pcapkit/vendor/mh/dsmip6_tls_packet.py +87 -0
- pcapkit/vendor/mh/dsmipv6_home_address.py +87 -0
- pcapkit/vendor/mh/enumerating_algorithm.py +82 -0
- pcapkit/vendor/mh/fb_ack_status.py +87 -0
- pcapkit/vendor/mh/fb_action.py +88 -0
- pcapkit/vendor/mh/fb_indication_trigger.py +87 -0
- pcapkit/vendor/mh/fb_type.py +88 -0
- pcapkit/vendor/mh/flow_id_status.py +87 -0
- pcapkit/vendor/mh/flow_id_suboption.py +87 -0
- pcapkit/vendor/mh/handoff_type.py +87 -0
- pcapkit/vendor/mh/handover_ack_flag.py +143 -0
- pcapkit/vendor/mh/handover_ack_status.py +87 -0
- pcapkit/vendor/mh/handover_initiate_flag.py +143 -0
- pcapkit/vendor/mh/handover_initiate_status.py +87 -0
- pcapkit/vendor/mh/home_address_reply.py +87 -0
- pcapkit/vendor/mh/lla_code.py +97 -0
- pcapkit/vendor/mh/lma_mag_suboption.py +88 -0
- pcapkit/vendor/mh/mn_group_id.py +87 -0
- pcapkit/vendor/mh/mn_id_subtype.py +87 -0
- pcapkit/vendor/mh/operator_id.py +87 -0
- pcapkit/vendor/mh/option.py +83 -0
- pcapkit/vendor/mh/packet.py +82 -0
- pcapkit/vendor/mh/qos_attribute.py +87 -0
- pcapkit/vendor/mh/revocation_status_code.py +87 -0
- pcapkit/vendor/mh/revocation_trigger.py +87 -0
- pcapkit/vendor/mh/status_code.py +91 -0
- pcapkit/vendor/mh/traffic_selector.py +87 -0
- pcapkit/vendor/mh/upa_status.py +87 -0
- pcapkit/vendor/mh/upn_reason.py +87 -0
- pcapkit/vendor/ospf/__init__.py +27 -0
- pcapkit/vendor/ospf/authentication.py +29 -0
- pcapkit/vendor/ospf/packet.py +29 -0
- pcapkit/vendor/pcapng/__init__.py +51 -0
- pcapkit/vendor/pcapng/block_type.py +94 -0
- pcapkit/vendor/pcapng/filter_type.py +77 -0
- pcapkit/vendor/pcapng/hash_algorithm.py +82 -0
- pcapkit/vendor/pcapng/option_type.py +287 -0
- pcapkit/vendor/pcapng/record_type.py +81 -0
- pcapkit/vendor/pcapng/secrets_type.py +81 -0
- pcapkit/vendor/pcapng/verdict_type.py +79 -0
- pcapkit/vendor/reg/__init__.py +34 -0
- pcapkit/vendor/reg/apptype.py +338 -0
- pcapkit/vendor/reg/ethertype.py +121 -0
- pcapkit/vendor/reg/linktype.py +110 -0
- pcapkit/vendor/reg/transtype.py +111 -0
- pcapkit/vendor/tcp/__init__.py +35 -0
- pcapkit/vendor/tcp/checksum.py +80 -0
- pcapkit/vendor/tcp/flags.py +149 -0
- pcapkit/vendor/tcp/mp_tcp_option.py +90 -0
- pcapkit/vendor/tcp/option.py +103 -0
- pcapkit/vendor/vlan/__init__.py +23 -0
- pcapkit/vendor/vlan/priority_level.py +97 -0
- pypcapkit-1.3.3.post1.dist-info/LICENSE +29 -0
- pypcapkit-1.3.3.post1.dist-info/METADATA +236 -0
- pypcapkit-1.3.3.post1.dist-info/RECORD +466 -0
- pypcapkit-1.3.3.post1.dist-info/WHEEL +5 -0
- pypcapkit-1.3.3.post1.dist-info/entry_points.txt +3 -0
- pypcapkit-1.3.3.post1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,196 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
import sys
|
4
|
+
from typing import TYPE_CHECKING
|
5
|
+
|
6
|
+
if TYPE_CHECKING:
|
7
|
+
from typing import Any, Callable, Iterator, Optional, Type, Union
|
8
|
+
|
9
|
+
__all__ = [
|
10
|
+
# functions
|
11
|
+
'final', 'localcontext', 'show_flag_values',
|
12
|
+
|
13
|
+
# exceptions
|
14
|
+
'ModuleNotFoundError',
|
15
|
+
|
16
|
+
# classes
|
17
|
+
'Collection', 'cached_property',
|
18
|
+
'StrEnum',
|
19
|
+
|
20
|
+
# modules
|
21
|
+
'pathlib',
|
22
|
+
|
23
|
+
# typing
|
24
|
+
'Mapping', 'Tuple', 'List', 'Dict', 'TypeAlias',
|
25
|
+
]
|
26
|
+
|
27
|
+
if sys.version_info < (3, 6):
|
28
|
+
class ModuleNotFoundError(ImportError): # pylint: disable=redefined-builtin
|
29
|
+
"""Module not found."""
|
30
|
+
else:
|
31
|
+
from builtins import ModuleNotFoundError
|
32
|
+
|
33
|
+
if sys.version_info <= (3, 5):
|
34
|
+
from collections.abc import Container, Iterable, Sized # pylint: disable=unused-import
|
35
|
+
|
36
|
+
def _check_methods(C: 'Type[Any]', *methods: 'str') -> 'bool | Any':
|
37
|
+
mro = C.__mro__
|
38
|
+
for method in methods:
|
39
|
+
for B in mro:
|
40
|
+
if method in B.__dict__:
|
41
|
+
if B.__dict__[method] is None:
|
42
|
+
return NotImplemented
|
43
|
+
break
|
44
|
+
else:
|
45
|
+
return NotImplemented
|
46
|
+
return True
|
47
|
+
|
48
|
+
class Collection(Sized, Iterable, Container): # pylint: disable=abstract-method
|
49
|
+
|
50
|
+
__slots__ = ()
|
51
|
+
|
52
|
+
@classmethod
|
53
|
+
def __subclasshook__(cls, C: 'Type[Any]') -> 'bool | Any':
|
54
|
+
if cls is Collection:
|
55
|
+
return _check_methods(C, "__len__", "__iter__", "__contains__")
|
56
|
+
return NotImplemented
|
57
|
+
else:
|
58
|
+
from collections.abc import Collection
|
59
|
+
|
60
|
+
if sys.version_info <= (3, 4):
|
61
|
+
import pathlib2 as pathlib # pylint: disable=import-error
|
62
|
+
else:
|
63
|
+
import pathlib
|
64
|
+
|
65
|
+
# functools.cached_property added in 3.8
|
66
|
+
if sys.version_info < (3, 8):
|
67
|
+
from threading import RLock
|
68
|
+
from typing import Generic, TypeVar # isort: split
|
69
|
+
|
70
|
+
_T = TypeVar("_T")
|
71
|
+
_S = TypeVar("_S")
|
72
|
+
|
73
|
+
_NOT_FOUND = object()
|
74
|
+
|
75
|
+
class cached_property(Generic[_T]):
|
76
|
+
def __init__(self, func: 'Callable[[Any], _T]') -> 'None':
|
77
|
+
self.func = func # type: Callable[[Any], _T]
|
78
|
+
self.attrname = None # type: Optional[str]
|
79
|
+
self.__doc__ = func.__doc__
|
80
|
+
self.lock = RLock()
|
81
|
+
|
82
|
+
def __set_name__(self, owner: 'Type[Any]', name: 'str') -> 'None':
|
83
|
+
if self.attrname is None:
|
84
|
+
self.attrname = name
|
85
|
+
elif name != self.attrname:
|
86
|
+
raise TypeError(
|
87
|
+
"Cannot assign the same cached_property to two different names "
|
88
|
+
f"({self.attrname!r} and {name!r})."
|
89
|
+
)
|
90
|
+
|
91
|
+
def __get__(self, instance: 'Optional[_S]',
|
92
|
+
owner: 'Optional[Type[Any]]' = None) -> 'Union[cached_property[_T], _T]':
|
93
|
+
if instance is None:
|
94
|
+
return self
|
95
|
+
if self.attrname is None:
|
96
|
+
raise TypeError(
|
97
|
+
"Cannot use cached_property instance without calling __set_name__ on it.")
|
98
|
+
try:
|
99
|
+
cache = instance.__dict__
|
100
|
+
except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
|
101
|
+
msg = (
|
102
|
+
f"No '__dict__' attribute on {type(instance).__name__!r} "
|
103
|
+
f"instance to cache {self.attrname!r} property."
|
104
|
+
)
|
105
|
+
raise TypeError(msg) from None
|
106
|
+
val = cache.get(self.attrname, _NOT_FOUND)
|
107
|
+
if val is _NOT_FOUND:
|
108
|
+
with self.lock:
|
109
|
+
# check if another thread filled cache while we awaited lock
|
110
|
+
val = cache.get(self.attrname, _NOT_FOUND)
|
111
|
+
if val is _NOT_FOUND:
|
112
|
+
val = self.func(instance)
|
113
|
+
try:
|
114
|
+
cache[self.attrname] = val
|
115
|
+
except TypeError:
|
116
|
+
msg = (
|
117
|
+
f"The '__dict__' attribute on {type(instance).__name__!r} instance "
|
118
|
+
f"does not support item assignment for caching {self.attrname!r} property."
|
119
|
+
)
|
120
|
+
raise TypeError(msg) from None
|
121
|
+
return val
|
122
|
+
else:
|
123
|
+
from functools import cached_property
|
124
|
+
|
125
|
+
if sys.version_info < (3, 9):
|
126
|
+
from typing import Dict, List, Mapping, Tuple
|
127
|
+
else:
|
128
|
+
from collections.abc import Mapping
|
129
|
+
|
130
|
+
Tuple: 'TypeAlias' = tuple
|
131
|
+
List: 'TypeAlias' = list
|
132
|
+
Dict: 'TypeAlias' = dict
|
133
|
+
|
134
|
+
if sys.version_info < (3, 11):
|
135
|
+
from aenum import StrEnum
|
136
|
+
else:
|
137
|
+
from enum import StrEnum
|
138
|
+
|
139
|
+
if sys.version_info < (3, 8):
|
140
|
+
from typing_extensions import final
|
141
|
+
else:
|
142
|
+
from typing import final
|
143
|
+
|
144
|
+
if sys.version_info < (3, 11):
|
145
|
+
from contextlib import contextmanager
|
146
|
+
from decimal import localcontext as _localcontext
|
147
|
+
|
148
|
+
if TYPE_CHECKING:
|
149
|
+
from decimal import Context
|
150
|
+
from types import TracebackType
|
151
|
+
|
152
|
+
class _ContextManager:
|
153
|
+
def __init__(self, new_context: Context) -> None: ...
|
154
|
+
def __enter__(self) -> Context: ...
|
155
|
+
def __exit__(self, t: type[BaseException] | None, v: BaseException | None, tb: TracebackType | None) -> None: ...
|
156
|
+
|
157
|
+
@contextmanager
|
158
|
+
def localcontext(ctx: 'Optional[Context]' = None, **kwargs: 'Any') -> '_ContextManager':
|
159
|
+
"""Return a context manager that will set the default context to a copy
|
160
|
+
of ctx on entry to the with-statement and restore the previous default
|
161
|
+
context when exiting the with-statement. If no context is specified, a
|
162
|
+
copy of the current default context is used."""
|
163
|
+
with _localcontext(ctx) as lc:
|
164
|
+
for attr, value in kwargs.items():
|
165
|
+
setattr(lc, attr, value)
|
166
|
+
yield lc
|
167
|
+
else:
|
168
|
+
from decimal import localcontext
|
169
|
+
|
170
|
+
if sys.version_info < (3, 11):
|
171
|
+
from enum import Enum
|
172
|
+
|
173
|
+
if TYPE_CHECKING:
|
174
|
+
from enum import IntFlag
|
175
|
+
|
176
|
+
def _iter_bits_lsb(num: 'int') -> 'Iterator[int]':
|
177
|
+
# num must be a positive integer
|
178
|
+
original = num
|
179
|
+
if isinstance(num, Enum):
|
180
|
+
num = num.value
|
181
|
+
if num < 0:
|
182
|
+
raise ValueError('%r is not a positive integer' % original)
|
183
|
+
while num:
|
184
|
+
b = num & (~num + 1)
|
185
|
+
yield b
|
186
|
+
num ^= b
|
187
|
+
|
188
|
+
def show_flag_values(value: 'IntFlag') -> 'list[int]':
|
189
|
+
return list(_iter_bits_lsb(value))
|
190
|
+
else:
|
191
|
+
from enum import show_flag_values # type: ignore[attr-defined]
|
192
|
+
|
193
|
+
if sys.version_info < (3, 10):
|
194
|
+
from typing_extensions import TypeAlias
|
195
|
+
else:
|
196
|
+
from typing import TypeAlias
|
@@ -0,0 +1,192 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=protected-access
|
3
|
+
"""Decorator Functions
|
4
|
+
=========================
|
5
|
+
|
6
|
+
.. module:: pcapkit.utilities.decorators
|
7
|
+
|
8
|
+
:mod:`pcapkit.utilities.decorators` contains several useful
|
9
|
+
decorators, including :func:`~pcapkit.utilities.decorators.seekset`,
|
10
|
+
:func:`~pcapkit.utilities.decorators.beholder` and
|
11
|
+
:func:`~pcapkit.utilities.decorators.prepare`.
|
12
|
+
|
13
|
+
"""
|
14
|
+
import functools
|
15
|
+
import io
|
16
|
+
import os
|
17
|
+
from typing import TYPE_CHECKING, cast
|
18
|
+
|
19
|
+
from pcapkit.utilities.exceptions import StructError, stacklevel
|
20
|
+
from pcapkit.utilities.logging import DEVMODE, VERBOSE, logger
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from typing import IO, Any, Callable, Optional, Type, TypeVar
|
24
|
+
|
25
|
+
from typing_extensions import Concatenate, ParamSpec
|
26
|
+
|
27
|
+
from pcapkit.protocols.protocol import ProtocolBase as Protocol
|
28
|
+
from pcapkit.protocols.schema.schema import Schema
|
29
|
+
|
30
|
+
P = ParamSpec('P')
|
31
|
+
R_seekset = TypeVar('R_seekset')
|
32
|
+
R_beholder = TypeVar('R_beholder', bound=Protocol)
|
33
|
+
R_prepare = TypeVar('R_prepare', bound=Schema)
|
34
|
+
|
35
|
+
__all__ = ['seekset', 'beholder', 'prepare']
|
36
|
+
|
37
|
+
|
38
|
+
def seekset(func: 'Callable[Concatenate[Protocol, P], R_seekset]') -> 'Callable[P, R_seekset]':
|
39
|
+
"""Read file from start then set back to original.
|
40
|
+
|
41
|
+
Important:
|
42
|
+
This decorator function is designed for decorating *class methods*.
|
43
|
+
|
44
|
+
The decorator will keep the current offset of :attr:`self._file <pcapkit.protocols.protocol.Protocol._file>`,
|
45
|
+
then call the decorated function. Afterwards, it will rewind the offset of
|
46
|
+
:attr:`self._file <pcapkit.protocols.protocol.Protocol._file>` to the original and returns the return value from
|
47
|
+
the decorated function.
|
48
|
+
|
49
|
+
Note:
|
50
|
+
The decorated function should have following signature::
|
51
|
+
|
52
|
+
func(self: 'pcapkit.protocols.protocol.ProtocolBase',
|
53
|
+
*args: 'typing.Any', **kwargs: 'typing.Any') -> 'typing.Any'
|
54
|
+
|
55
|
+
See Also:
|
56
|
+
:meth:`pcapkit.protocols.protocol.Protocol._read_packet`
|
57
|
+
|
58
|
+
:param func: decorated function
|
59
|
+
:meta decorator:
|
60
|
+
"""
|
61
|
+
@functools.wraps(func)
|
62
|
+
def seekcur(*args: 'P.args', **kw: 'P.kwargs') -> 'R_seekset':
|
63
|
+
# extract self object
|
64
|
+
self = cast('Protocol', args[0])
|
65
|
+
|
66
|
+
# move file pointer
|
67
|
+
seek_cur = self._file.tell()
|
68
|
+
self._file.seek(self._seekset, os.SEEK_SET)
|
69
|
+
|
70
|
+
# call method
|
71
|
+
return_ = func(*args, **kw)
|
72
|
+
|
73
|
+
# reset file pointer
|
74
|
+
self._file.seek(seek_cur, os.SEEK_SET)
|
75
|
+
return return_
|
76
|
+
return seekcur
|
77
|
+
|
78
|
+
|
79
|
+
def beholder(func: 'Callable[Concatenate[Protocol, int, Optional[int], P], R_beholder]') -> 'Callable[P, R_beholder]':
|
80
|
+
"""Behold extraction procedure.
|
81
|
+
|
82
|
+
Important:
|
83
|
+
This decorator function is designed for decorating *class methods*.
|
84
|
+
|
85
|
+
This decorator first keep the current offset of
|
86
|
+
:attr:`self._file <pcapkit.protocols.protocol.Protocol._file>`, then
|
87
|
+
try to call the decorated function. Should any exception raised, it will
|
88
|
+
re-parse the :attr:`self._file <pcapkit.protocols.protocol.Protocol._file>`
|
89
|
+
as :class:`~pcapkit.protocols.misc.raw.Raw` protocol.
|
90
|
+
|
91
|
+
Note:
|
92
|
+
The decorated function should have following signature::
|
93
|
+
|
94
|
+
func(self: 'pcapkit.protocols.protocol.ProtocolBase',
|
95
|
+
proto: 'int', length: 'typing.Optional[int]',
|
96
|
+
*args: 'typing.Any', **kwargs: 'typing.Any') -> 'pcapkit.protocols.protocol.ProtocolBase'
|
97
|
+
|
98
|
+
See Also:
|
99
|
+
:meth:`pcapkit.protocols.protocol.Protocol._decode_next_layer`
|
100
|
+
|
101
|
+
:param func: decorated function
|
102
|
+
:meta decorator:
|
103
|
+
"""
|
104
|
+
@functools.wraps(func)
|
105
|
+
def behold(*args: 'P.args', **kwargs: 'P.kwargs') -> 'R_beholder':
|
106
|
+
# extract self object & args
|
107
|
+
self = cast('R_beholder', args[0])
|
108
|
+
try:
|
109
|
+
length = cast('int', args[2])
|
110
|
+
except IndexError:
|
111
|
+
length = None
|
112
|
+
|
113
|
+
# record file pointer
|
114
|
+
try:
|
115
|
+
# call method
|
116
|
+
return func(*args, **kwargs)
|
117
|
+
except Exception as exc:
|
118
|
+
if isinstance(exc, StructError) and exc.eof: # pylint: disable=no-member
|
119
|
+
from pcapkit.protocols.misc.null import NoPayload as protocol # isort: skip # pylint: disable=import-outside-toplevel
|
120
|
+
else:
|
121
|
+
from pcapkit.protocols.misc.raw import Raw as protocol # type: ignore[assignment] # isort: skip # pylint: disable=import-outside-toplevel
|
122
|
+
# error = traceback.format_exc(limit=1).strip().rsplit(os.linesep, maxsplit=1)[-1]
|
123
|
+
|
124
|
+
# log error
|
125
|
+
logger.warning(str(exc), exc_info=exc if VERBOSE else None, stack_info=DEVMODE, stacklevel=stacklevel())
|
126
|
+
|
127
|
+
file_ = self.__header__.get_payload()
|
128
|
+
next_ = protocol(file_, length, error=str(exc))
|
129
|
+
return cast('R_beholder', next_)
|
130
|
+
return behold
|
131
|
+
|
132
|
+
|
133
|
+
def prepare(func: 'Callable[Concatenate[Type[R_prepare], bytes | IO[bytes], Optional[int], Optional[dict[str, Any]], P], R_prepare]') -> 'Callable[P, R_prepare]':
|
134
|
+
"""Prepare schema packet data before unpacking.
|
135
|
+
|
136
|
+
Important:
|
137
|
+
This decorate function is designed for decorating the
|
138
|
+
:meth:`Schema.unpack <pcapkit.protocols.schema.schema.Schema.unpack>`
|
139
|
+
*class method*.
|
140
|
+
|
141
|
+
This decorator will revise the parameter list provided to the original
|
142
|
+
:meth:`Schema.unpack <pcapkit.protocols.schema.schema.Schema.unpack>` method
|
143
|
+
and extract necessary information based on the given parameters, then provide
|
144
|
+
the revised version of parameter list to the original method.
|
145
|
+
|
146
|
+
Note:
|
147
|
+
The decorated function should have following signature::
|
148
|
+
|
149
|
+
func(cls: 'typing.Type[pcapkit.protocols.schema.schema.Schema]',
|
150
|
+
data: 'bytes | typing.IO[bytes]',
|
151
|
+
length: 'Optional[int],
|
152
|
+
packet: 'Optional[dict[str, Any]',
|
153
|
+
*args: 'typing.Any', **kwargs: 'Any') -> 'pcapkit.protocols.schema.schema.Schema'
|
154
|
+
|
155
|
+
See Also:
|
156
|
+
:meth:`pcapkit.protocols.schema.schema.Schema.unpack`
|
157
|
+
|
158
|
+
:param func: decorated function
|
159
|
+
:meta decorator:
|
160
|
+
"""
|
161
|
+
@functools.wraps(func)
|
162
|
+
def unpack(*args: 'P.args', **kwargs: 'P.kwargs') -> 'R_prepare':
|
163
|
+
cls = cast('Type[R_prepare]', args[0])
|
164
|
+
data = cast('bytes | IO[bytes]', args[1])
|
165
|
+
length = cast('Optional[int]', args[2])
|
166
|
+
packet = cast('Optional[dict[str, Any]]', args[3])
|
167
|
+
|
168
|
+
if isinstance(data, bytes):
|
169
|
+
length = len(data) if length is None else length
|
170
|
+
data = io.BytesIO(data)
|
171
|
+
else:
|
172
|
+
if length is None:
|
173
|
+
current = data.tell()
|
174
|
+
length = data.seek(0, io.SEEK_END) - current
|
175
|
+
data.seek(current)
|
176
|
+
|
177
|
+
if length == 0:
|
178
|
+
raise EOFError
|
179
|
+
|
180
|
+
if packet is None:
|
181
|
+
packet = {}
|
182
|
+
packet['__length__'] = length
|
183
|
+
|
184
|
+
# call the user customised preparation method
|
185
|
+
# then proceed with the unpacking process
|
186
|
+
# and eventually revise the schema data
|
187
|
+
cls.pre_unpack(packet)
|
188
|
+
schema = func(cls, data, length, packet)
|
189
|
+
ret = schema.post_process(packet)
|
190
|
+
|
191
|
+
return cast('R_prepare', ret)
|
192
|
+
return unpack
|