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,140 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=unused-wildcard-import
|
3
|
+
"""header schema for protocols"""
|
4
|
+
|
5
|
+
# Base Class for Header Schema
|
6
|
+
from pcapkit.protocols.schema.schema import *
|
7
|
+
|
8
|
+
# Link Layer Protocols
|
9
|
+
from pcapkit.protocols.schema.link import *
|
10
|
+
|
11
|
+
# Internet Layer Protocols
|
12
|
+
from pcapkit.protocols.schema.internet import *
|
13
|
+
|
14
|
+
# Transport Layer Protocols
|
15
|
+
from pcapkit.protocols.schema.transport import *
|
16
|
+
|
17
|
+
# Application Layer Protocols
|
18
|
+
from pcapkit.protocols.schema.application import *
|
19
|
+
|
20
|
+
# Utility Classes for Protocols
|
21
|
+
from pcapkit.protocols.schema.misc import *
|
22
|
+
|
23
|
+
__all__ = [
|
24
|
+
# Link Layer Protocols
|
25
|
+
'ARP',
|
26
|
+
'Ethernet',
|
27
|
+
'L2TP',
|
28
|
+
'OSPF', 'OSPF_CrytographicAuthentication',
|
29
|
+
'VLAN', 'VLAN_TCI',
|
30
|
+
|
31
|
+
# Internet Layer Protocols
|
32
|
+
'AH',
|
33
|
+
'HIP',
|
34
|
+
'HIP_LocatorData', 'HIP_Locator', 'HIP_ECDSACurveHostIdentity', 'HIP_ECDSALowCurveHostIdentity',
|
35
|
+
'HIP_EdDSACurveHostIdentity', 'HIP_HostIdentity',
|
36
|
+
'HIP_UnassignedParameter', 'HIP_ESPInfoParameter', 'HIP_R1CounterParameter',
|
37
|
+
'HIP_LocatorSetParameter', 'HIP_PuzzleParameter', 'HIP_SolutionParameter',
|
38
|
+
'HIP_SEQParameter', 'HIP_ACKParameter', 'HIP_DHGroupListParameter',
|
39
|
+
'HIP_DiffieHellmanParameter', 'HIP_HIPTransformParameter', 'HIP_HIPCipherParameter',
|
40
|
+
'HIP_NATTraversalModeParameter', 'HIP_TransactionPacingParameter', 'HIP_EncryptedParameter',
|
41
|
+
'HIP_HostIDParameter', 'HIP_HITSuiteListParameter', 'HIP_CertParameter',
|
42
|
+
'HIP_NotificationParameter', 'HIP_EchoRequestSignedParameter', 'HIP_RegInfoParameter',
|
43
|
+
'HIP_RegRequestParameter', 'HIP_RegResponseParameter', 'HIP_RegFailedParameter',
|
44
|
+
'HIP_RegFromParameter', 'HIP_EchoResponseSignedParameter', 'HIP_TransportFormatListParameter',
|
45
|
+
'HIP_ESPTransformParameter', 'HIP_SeqDataParameter', 'HIP_AckDataParameter',
|
46
|
+
'HIP_PayloadMICParameter', 'HIP_TransactionIDParameter', 'HIP_OverlayIDParameter',
|
47
|
+
'HIP_RouteDstParameter', 'HIP_HIPTransportModeParameter', 'HIP_HIPMACParameter',
|
48
|
+
'HIP_HIPMAC2Parameter', 'HIP_HIPSignature2Parameter', 'HIP_HIPSignatureParameter',
|
49
|
+
'HIP_EchoRequestUnsignedParameter', 'HIP_EchoResponseUnsignedParameter', 'HIP_RelayFromParameter',
|
50
|
+
'HIP_RelayToParameter', 'HIP_RouteViaParameter', 'HIP_FromParameter',
|
51
|
+
'HIP_RVSHMACParameter', 'HIP_RelayHMACParameter',
|
52
|
+
'IPv4',
|
53
|
+
'IPv4_UnassignedOption', 'IPv4_EOOLOption', 'IPv4_NOPOption',
|
54
|
+
'IPv4_SECOption', 'IPv4_LSROption', 'IPv4_TSOption',
|
55
|
+
'IPv4_ESECOption', 'IPv4_RROption', 'IPv4_SIDOption',
|
56
|
+
'IPv4_SSROption', 'IPv4_MTUPOption', 'IPv4_MTUROption',
|
57
|
+
'IPv4_TROption', 'IPv4_RTRALTOption', 'IPv4_QSOption',
|
58
|
+
'IPv4_QuickStartRequestOption', 'IPv4_QuickStartReportOption',
|
59
|
+
'IPv6_Frag',
|
60
|
+
'IPv6_Opts',
|
61
|
+
'IPv6_Opts_UnassignedOption', 'IPv6_Opts_PadOption', 'IPv6_Opts_TunnelEncapsulationLimitOption',
|
62
|
+
'IPv6_Opts_RouterAlertOption', 'IPv6_Opts_CALIPSOOption', 'IPv6_Opts_SMFIdentificationBasedDPDOption',
|
63
|
+
'IPv6_Opts_SMFHashBasedDPDOption', 'IPv6_Opts_PDMOption', 'IPv6_Opts_QuickStartRequestOption',
|
64
|
+
'IPv6_Opts_QuickStartReportOption', 'IPv6_Opts_RPLOption', 'IPv6_Opts_MPLOption', 'IPv6_Opts_ILNPOption',
|
65
|
+
'IPv6_Opts_LineIdentificationOption', 'IPv6_Opts_JumboPayloadOption', 'IPv6_Opts_HomeAddressOption',
|
66
|
+
'IPv6_Opts_IPDFFOption',
|
67
|
+
'IPv6_Route',
|
68
|
+
'IPv6_Route_UnknownType', 'IPv6_Route_SourceRoute', 'IPv6_Route_Type2', 'IPv6_Route_RPL',
|
69
|
+
'IPv6',
|
70
|
+
'IPX',
|
71
|
+
'MH',
|
72
|
+
'MH_Packet',
|
73
|
+
'MH_UnknownMessage', 'MH_BindingRefreshRequestMessage', 'MH_HomeTestInitMessage', 'MH_CareofTestInitMessage',
|
74
|
+
'MH_HomeTestMessage', 'MH_CareofTestMessage', 'MH_BindingUpdateMessage', 'MH_BindingAcknowledgementMessage',
|
75
|
+
'MH_BindingErrorMessage',
|
76
|
+
'MH_Option',
|
77
|
+
'MH_UnassignedOption', 'MH_PadOption', 'MH_BindingRefreshAdviceOption', 'MH_AlternateCareofAddressOption',
|
78
|
+
'MH_NonceIndicesOption', 'MH_AuthorizationDataOption', 'MH_MobileNetworkPrefixOption',
|
79
|
+
'MH_LinkLayerAddressOption', 'MH_MNIDOption', 'MH_AuthOption', 'MH_MesgIDOption', 'MH_CGAParametersRequestOption',
|
80
|
+
'MH_CGAParametersOption', 'MH_SignatureOption', 'MH_PermanentHomeKeygenTokenOption', 'MH_CareofTestInitOption',
|
81
|
+
'MH_CareofTestOption',
|
82
|
+
'MH_CGAParameter',
|
83
|
+
'MH_CGAExtension',
|
84
|
+
'MH_UnknownExtension', 'MH_MultiPrefixExtension',
|
85
|
+
|
86
|
+
# Transport Layer Protocols
|
87
|
+
'TCP',
|
88
|
+
'TCP_SACKBlock',
|
89
|
+
'TCP_Option',
|
90
|
+
'TCP_UnassignedOption', 'TCP_EndOfOptionList', 'TCP_NoOperation', 'TCP_MaximumSegmentSize', 'TCP_WindowScale',
|
91
|
+
'TCP_SACKPermitted', 'TCP_SACK', 'TCP_Echo', 'TCP_EchoReply', 'TCP_Timestamps', 'TCP_PartialOrderConnectionPermitted', # pylint: disable=line-too-long
|
92
|
+
'TCP_PartialOrderServiceProfile', 'TCP_CC', 'TCP_CCNew', 'TCP_CCEcho', 'TCP_AlternateChecksumRequest',
|
93
|
+
'TCP_AlternateChecksumData', 'TCP_MD5Signature', 'TCP_QuickStartResponse', 'TCP_UserTimeout',
|
94
|
+
'TCP_Authentication', 'TCP_FastOpenCookie',
|
95
|
+
'TCP_MPTCP',
|
96
|
+
'TCP_MPTCPUnknown', 'TCP_MPTCPCapable', 'TCP_MPTCPDSS', 'TCP_MPTCPAddAddress', 'TCP_MPTCPRemoveAddress',
|
97
|
+
'TCP_MPTCPPriority', 'TCP_MPTCPFallback', 'TCP_MPTCPFastclose',
|
98
|
+
'TCP_MPTCPJoin',
|
99
|
+
'TCP_MPTCPJoinSYN', 'TCP_MPTCPJoinSYNACK', 'TCP_MPTCPJoinACK',
|
100
|
+
'UDP',
|
101
|
+
|
102
|
+
# Application Layer Protocols
|
103
|
+
'FTP',
|
104
|
+
'HTTPv1',
|
105
|
+
'HTTPv2',
|
106
|
+
'HTTPv2_FrameType',
|
107
|
+
'HTTPv2_UnassignedFrame', 'HTTPv2_DataFrame', 'HTTPv2_HeadersFrame', 'HTTPv2_PriorityFrame',
|
108
|
+
'HTTPv2_RSTStreamFrame', 'HTTPv2_SettingsFrame', 'HTTPv2_PushPromiseFrame', 'HTTPv2_PingFrame',
|
109
|
+
'HTTPv2_GoawayFrame', 'HTTPv2_WindowUpdateFrame', 'HTTPv2_ContinuationFrame',
|
110
|
+
|
111
|
+
# PCAP file format
|
112
|
+
'Header',
|
113
|
+
'Frame',
|
114
|
+
|
115
|
+
# PCAP-NG file format
|
116
|
+
'PCAPNG',
|
117
|
+
'PCAPNG_Option', 'PCAPNG_UnknownOption',
|
118
|
+
'PCAPNG_EndOfOption', 'PCAPNG_CommentOption', 'PCAPNG_CustomOption',
|
119
|
+
'PCAPNG_IF_NameOption', 'PCAPNG_IF_DescriptionOption', 'PCAPNG_IF_IPv4AddrOption', 'PCAPNG_IF_IPv6AddrOption',
|
120
|
+
'PCAPNG_IF_MACAddrOption', 'PCAPNG_IF_EUIAddrOption', 'PCAPNG_IF_SpeedOption', 'PCAPNG_IF_TSResolOption',
|
121
|
+
'PCAPNG_IF_TZoneOption', 'PCAPNG_IF_FilterOption', 'PCAPNG_IF_OSOption', 'PCAPNG_IF_FCSLenOption',
|
122
|
+
'PCAPNG_IF_TSOffsetOption', 'PCAPNG_IF_HardwareOption', 'PCAPNG_IF_TxSpeedOption', 'PCAPNG_IF_RxSpeedOption',
|
123
|
+
'PCAPNG_EPB_FlagsOption', 'PCAPNG_EPB_HashOption', 'PCAPNG_EPB_DropCountOption', 'PCAPNG_EPB_PacketIDOption',
|
124
|
+
'PCAPNG_EPB_QueueOption', 'PCAPNG_EPB_VerdictOption',
|
125
|
+
'PCAPNG_NS_DNSNameOption', 'PCAPNG_NS_DNSIP4AddrOption', 'PCAPNG_NS_DNSIP6AddrOption',
|
126
|
+
'PCAPNG_ISB_StartTimeOption', 'PCAPNG_ISB_EndTimeOption', 'PCAPNG_ISB_IFRecvOption', 'PCAPNG_ISB_IFDropOption',
|
127
|
+
'PCAPNG_ISB_FilterAcceptOption', 'PCAPNG_ISB_OSDropOption', 'PCAPNG_ISB_UsrDelivOption',
|
128
|
+
'PCAPNG_NameResolutionRecord', 'PCAPNG_UnknownRecord', 'PCAPNG_EndRecord', 'PCAPNG_IPv4Record', 'PCAPNG_IPv6Record',
|
129
|
+
'PCAPNG_DSBSecrets', 'PCAPNG_UnknownSecrets', 'PCAPNG_TLSKeyLog', 'PCAPNG_WireGuardKeyLog', 'PCAPNG_ZigBeeNWKKey',
|
130
|
+
'PCAPNG_ZigBeeAPSKey',
|
131
|
+
'PCAPNG_BlockType',
|
132
|
+
'PCAPNG_UnknownBlock', 'PCAPNG_SectionHeaderBlock', 'PCAPNG_InterfaceDescriptionBlock',
|
133
|
+
'PCAPNG_EnhancedPacketBlock', 'PCAPNG_SimplePacketBlock', 'PCAPNG_NameResolutionBlock',
|
134
|
+
'PCAPNG_InterfaceStatisticsBlock', 'PCAPNG_SystemdJournalExportBlock', 'PCAPNG_DecryptionSecretsBlock',
|
135
|
+
'PCAPNG_CustomBlock',
|
136
|
+
|
137
|
+
# misc protocols
|
138
|
+
'NoPayload',
|
139
|
+
'Raw',
|
140
|
+
]
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""header schema for application layer protocols"""
|
3
|
+
|
4
|
+
# File Transfer Protocol
|
5
|
+
from pcapkit.protocols.schema.application.ftp import FTP
|
6
|
+
|
7
|
+
# Hypertext Transfer Protocol (HTTP/1.*)
|
8
|
+
from pcapkit.protocols.schema.application.httpv1 import HTTP as HTTPv1
|
9
|
+
|
10
|
+
# Hypertext Transfer Protocol (HTTP/2)
|
11
|
+
from pcapkit.protocols.schema.application.httpv2 import HTTP as HTTPv2
|
12
|
+
from pcapkit.protocols.schema.application.httpv2 import \
|
13
|
+
ContinuationFrame as HTTPv2_ContinuationFrame
|
14
|
+
from pcapkit.protocols.schema.application.httpv2 import DataFrame as HTTPv2_DataFrame
|
15
|
+
from pcapkit.protocols.schema.application.httpv2 import FrameType as HTTPv2_FrameType
|
16
|
+
from pcapkit.protocols.schema.application.httpv2 import GoawayFrame as HTTPv2_GoawayFrame
|
17
|
+
from pcapkit.protocols.schema.application.httpv2 import HeadersFrame as HTTPv2_HeadersFrame
|
18
|
+
from pcapkit.protocols.schema.application.httpv2 import PingFrame as HTTPv2_PingFrame
|
19
|
+
from pcapkit.protocols.schema.application.httpv2 import PriorityFrame as HTTPv2_PriorityFrame
|
20
|
+
from pcapkit.protocols.schema.application.httpv2 import PushPromiseFrame as HTTPv2_PushPromiseFrame
|
21
|
+
from pcapkit.protocols.schema.application.httpv2 import RSTStreamFrame as HTTPv2_RSTStreamFrame
|
22
|
+
from pcapkit.protocols.schema.application.httpv2 import SettingsFrame as HTTPv2_SettingsFrame
|
23
|
+
from pcapkit.protocols.schema.application.httpv2 import UnassignedFrame as HTTPv2_UnassignedFrame
|
24
|
+
from pcapkit.protocols.schema.application.httpv2 import \
|
25
|
+
WindowUpdateFrame as HTTPv2_WindowUpdateFrame
|
26
|
+
|
27
|
+
__all__ = [
|
28
|
+
# File Transfer Protocol
|
29
|
+
'FTP',
|
30
|
+
|
31
|
+
# Hypertext Transfer Protocol (HTTP/1.*)
|
32
|
+
'HTTPv1',
|
33
|
+
|
34
|
+
# Hypertext Transfer Protocol (HTTP/2)
|
35
|
+
'HTTPv2',
|
36
|
+
'HTTPv2_FrameType',
|
37
|
+
'HTTPv2_UnassignedFrame', 'HTTPv2_DataFrame', 'HTTPv2_HeadersFrame', 'HTTPv2_PriorityFrame',
|
38
|
+
'HTTPv2_RSTStreamFrame', 'HTTPv2_SettingsFrame', 'HTTPv2_PushPromiseFrame', 'HTTPv2_PingFrame',
|
39
|
+
'HTTPv2_GoawayFrame', 'HTTPv2_WindowUpdateFrame', 'HTTPv2_ContinuationFrame',
|
40
|
+
]
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# mypy: disable-error-code=assignment
|
3
|
+
"""header schema for file transfer protocol"""
|
4
|
+
|
5
|
+
from typing import TYPE_CHECKING
|
6
|
+
|
7
|
+
from pcapkit.corekit.fields.strings import BytesField
|
8
|
+
from pcapkit.protocols.schema.schema import Schema, schema_final
|
9
|
+
|
10
|
+
__all__ = ['FTP']
|
11
|
+
|
12
|
+
|
13
|
+
@schema_final
|
14
|
+
class FTP(Schema):
|
15
|
+
"""Header schema for FTP packet."""
|
16
|
+
|
17
|
+
#: Packet data.
|
18
|
+
data: 'bytes' = BytesField(lambda pkt: pkt['__length__'])
|
19
|
+
|
20
|
+
if TYPE_CHECKING:
|
21
|
+
def __init__(self, data: 'bytes') -> 'None': ...
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# mypy: disable-error-code=assignment
|
3
|
+
"""header schema for HTTP/1.* protocol"""
|
4
|
+
|
5
|
+
from typing import TYPE_CHECKING
|
6
|
+
|
7
|
+
from pcapkit.corekit.fields.strings import BytesField
|
8
|
+
from pcapkit.protocols.schema.schema import Schema, schema_final
|
9
|
+
|
10
|
+
__all__ = ['HTTP']
|
11
|
+
|
12
|
+
|
13
|
+
@schema_final
|
14
|
+
class HTTP(Schema):
|
15
|
+
r"""Header schema for HTTP/1.\* packet."""
|
16
|
+
|
17
|
+
#: Packet data.
|
18
|
+
data: 'bytes' = BytesField(lambda pkt: pkt['__length__'])
|
19
|
+
|
20
|
+
if TYPE_CHECKING:
|
21
|
+
def __init__(self, data: 'bytes') -> 'None': ...
|
@@ -0,0 +1,384 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# mypy: disable-error-code=assignment
|
3
|
+
"""header schema for HTTP/2 protocol"""
|
4
|
+
|
5
|
+
import collections
|
6
|
+
import enum
|
7
|
+
from typing import TYPE_CHECKING, cast
|
8
|
+
|
9
|
+
from pcapkit.const.http.error_code import ErrorCode as Enum_ErrorCode
|
10
|
+
from pcapkit.const.http.frame import Frame as Enum_Frame
|
11
|
+
from pcapkit.const.http.setting import Setting as Enum_Setting
|
12
|
+
from pcapkit.corekit.fields.collections import ListField
|
13
|
+
from pcapkit.corekit.fields.misc import ConditionalField, SchemaField, SwitchField
|
14
|
+
from pcapkit.corekit.fields.numbers import EnumField, NumberField, UInt8Field, UInt32Field
|
15
|
+
from pcapkit.corekit.fields.strings import BitField, BytesField, PaddingField
|
16
|
+
from pcapkit.protocols.schema.schema import EnumSchema, Schema, schema_final
|
17
|
+
from pcapkit.utilities.logging import SPHINX_TYPE_CHECKING
|
18
|
+
|
19
|
+
__all__ = [
|
20
|
+
'HTTP',
|
21
|
+
|
22
|
+
'FrameType',
|
23
|
+
'UnassignedFrame', 'DataFrame', 'HeadersFrame', 'PriorityFrame',
|
24
|
+
'RSTStreamFrame', 'SettingsFrame', 'PushPromiseFrame', 'PingFrame',
|
25
|
+
'GoawayFrame', 'WindowUpdateFrame', 'ContinuationFrame',
|
26
|
+
]
|
27
|
+
|
28
|
+
if TYPE_CHECKING:
|
29
|
+
from typing import Any, Optional
|
30
|
+
|
31
|
+
from pcapkit.corekit.fields.field import FieldBase as Field
|
32
|
+
|
33
|
+
if SPHINX_TYPE_CHECKING:
|
34
|
+
from typing_extensions import TypedDict
|
35
|
+
|
36
|
+
class FrameFlags(TypedDict):
|
37
|
+
"""HTTP frame specific flags."""
|
38
|
+
|
39
|
+
bit_7: int
|
40
|
+
bit_6: int
|
41
|
+
bit_5: int
|
42
|
+
bit_4: int
|
43
|
+
bit_3: int
|
44
|
+
bit_2: int
|
45
|
+
bit_1: int
|
46
|
+
bit_0: int
|
47
|
+
|
48
|
+
class StreamID(TypedDict):
|
49
|
+
"""Stream identifier."""
|
50
|
+
|
51
|
+
#: Steam identifier.
|
52
|
+
sid: int
|
53
|
+
|
54
|
+
class StreamDependency(TypedDict):
|
55
|
+
"""Stream dependency."""
|
56
|
+
|
57
|
+
#: Exclusive flag.
|
58
|
+
exclusive: int
|
59
|
+
#: Stream dependency identifier.
|
60
|
+
sid: int
|
61
|
+
|
62
|
+
class WindowSize(TypedDict):
|
63
|
+
"""Window size increment."""
|
64
|
+
|
65
|
+
#: Window size increment.
|
66
|
+
incr: int
|
67
|
+
|
68
|
+
|
69
|
+
def http_frame_selector(pkt: 'dict[str, Any]') -> 'Field':
|
70
|
+
"""Selector function for :attr:`HTTP.frame` field.
|
71
|
+
|
72
|
+
Args:
|
73
|
+
pkt: Packet data.
|
74
|
+
|
75
|
+
Returns:
|
76
|
+
Returns a :class:`~pcapkit.corekit.fields.misc.SchemaField` wrapped
|
77
|
+
:class:`~pcapkit.protocols.schema.application.httpv2.FrameType`
|
78
|
+
instance.
|
79
|
+
|
80
|
+
"""
|
81
|
+
type = cast('Enum_Frame', pkt['type'])
|
82
|
+
schema = FrameType.registry[type]
|
83
|
+
return SchemaField(length=pkt['__length__'], schema=schema)
|
84
|
+
|
85
|
+
|
86
|
+
@schema_final
|
87
|
+
class HTTP(Schema):
|
88
|
+
"""Header schema for HTTP/2 packet."""
|
89
|
+
|
90
|
+
#: Length.
|
91
|
+
length: 'int' = NumberField(length=3, signed=False)
|
92
|
+
#: Frame type.
|
93
|
+
type: 'Enum_Frame' = EnumField(length=1, namespace=Enum_Frame)
|
94
|
+
#: Frame specific flags.
|
95
|
+
flags: 'FrameFlags' = BitField(length=1, namespace={
|
96
|
+
'bit_7': (0, 1),
|
97
|
+
'bit_6': (1, 1),
|
98
|
+
'bit_5': (2, 1),
|
99
|
+
'bit_4': (3, 1),
|
100
|
+
'bit_3': (4, 1),
|
101
|
+
'bit_2': (5, 1),
|
102
|
+
'bit_1': (6, 1),
|
103
|
+
'bit_0': (7, 1),
|
104
|
+
})
|
105
|
+
#: Stream identifier.
|
106
|
+
stream: 'StreamID' = BitField(length=4, namespace={
|
107
|
+
'sid': (1, 31),
|
108
|
+
})
|
109
|
+
#: Frame payload.
|
110
|
+
frame: 'FrameType' = SwitchField(
|
111
|
+
selector=http_frame_selector,
|
112
|
+
)
|
113
|
+
|
114
|
+
if TYPE_CHECKING:
|
115
|
+
def __init__(self, length: 'int', type: 'Enum_Frame', flags: 'FrameFlags', stream: 'StreamID', frame: 'FrameType | bytes') -> 'None': ...
|
116
|
+
|
117
|
+
|
118
|
+
class FrameType(EnumSchema[Enum_Frame]):
|
119
|
+
"""Header schema for HTTP/2 frame payload."""
|
120
|
+
|
121
|
+
if TYPE_CHECKING:
|
122
|
+
__flags__: 'Flags'
|
123
|
+
|
124
|
+
__enum__ = collections.defaultdict(lambda: UnassignedFrame)
|
125
|
+
|
126
|
+
class Flags(enum.IntFlag):
|
127
|
+
"""Flags enumeration for HTTP/2 frames."""
|
128
|
+
|
129
|
+
def post_process(self, packet: 'dict[str, Any]') -> 'Schema':
|
130
|
+
"""Revise ``schema`` data after unpacking process.
|
131
|
+
|
132
|
+
Args:
|
133
|
+
schema: parsed schema
|
134
|
+
packet: Unpacked data.
|
135
|
+
|
136
|
+
Returns:
|
137
|
+
Revised schema.
|
138
|
+
|
139
|
+
"""
|
140
|
+
flags = 0
|
141
|
+
for key, val in filter(lambda kv: kv[0].startswith('BIT_'),
|
142
|
+
self.Flags.__members__.items()):
|
143
|
+
name = key.lower()
|
144
|
+
if packet['flags'][name]:
|
145
|
+
flags |= val
|
146
|
+
|
147
|
+
self.__flags__ = flags
|
148
|
+
return self
|
149
|
+
|
150
|
+
|
151
|
+
@schema_final
|
152
|
+
class UnassignedFrame(FrameType):
|
153
|
+
"""Header schema for unassigned HTTP/2 frame payload."""
|
154
|
+
|
155
|
+
#: Frame payload.
|
156
|
+
data: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
|
157
|
+
|
158
|
+
if TYPE_CHECKING:
|
159
|
+
def __init__(self, data: 'bytes') -> 'None': ...
|
160
|
+
|
161
|
+
|
162
|
+
@schema_final
|
163
|
+
class DataFrame(FrameType, code=Enum_Frame.DATA):
|
164
|
+
"""Header schema for HTTP/2 ``DATA`` frames."""
|
165
|
+
|
166
|
+
class Flags(FrameType.Flags):
|
167
|
+
"""Flags enumeration for HTTP/2 ``DATA`` frames."""
|
168
|
+
|
169
|
+
END_STREAM = BIT_0 = 0x1
|
170
|
+
PADDED = BIT_3 = 0x8
|
171
|
+
|
172
|
+
#: Padding length.
|
173
|
+
pad_len: 'int' = ConditionalField(
|
174
|
+
UInt8Field(),
|
175
|
+
lambda pkt: pkt['flags']['bit_3'], # PADDED
|
176
|
+
)
|
177
|
+
#: Data.
|
178
|
+
data: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'] - pkt['pad_len'] if pkt['flags']['bit_3'] else 0)
|
179
|
+
#: Padding.
|
180
|
+
padding: 'bytes' = ConditionalField(
|
181
|
+
PaddingField(length=lambda pkt: pkt['pad_len']),
|
182
|
+
lambda pkt: pkt['flags']['bit_3'], # PADDED
|
183
|
+
)
|
184
|
+
|
185
|
+
if TYPE_CHECKING:
|
186
|
+
def __init__(self, pad_len: 'Optional[int]', data: 'bytes') -> 'None': ...
|
187
|
+
|
188
|
+
|
189
|
+
@schema_final
|
190
|
+
class HeadersFrame(FrameType, code=Enum_Frame.HEADERS):
|
191
|
+
"""Header schema for HTTP/2 ``HEADERS`` frames."""
|
192
|
+
|
193
|
+
class Flags(FrameType.Flags):
|
194
|
+
"""Flags enumeration for HTTP/2 ``DATA`` frames."""
|
195
|
+
|
196
|
+
END_STREAM = BIT_0 = 0x1
|
197
|
+
END_HEADERS = BIT_2 = 0x4
|
198
|
+
PADDED = BIT_3 = 0x8
|
199
|
+
PRIORITY = BIT_5 = 0x20
|
200
|
+
|
201
|
+
#: Padding length.
|
202
|
+
pad_len: 'int' = ConditionalField(
|
203
|
+
UInt8Field(),
|
204
|
+
lambda pkt: pkt['flags']['bit_3'], # PADDED
|
205
|
+
)
|
206
|
+
#: Stream dependency.
|
207
|
+
stream_dep: 'StreamDependency' = ConditionalField(
|
208
|
+
BitField(length=4, namespace={
|
209
|
+
'exclusive': (0, 1),
|
210
|
+
'sid': (1, 31),
|
211
|
+
}),
|
212
|
+
lambda pkt: pkt['flags']['bit_5'], # PRIORITY
|
213
|
+
)
|
214
|
+
#: Weight.
|
215
|
+
weight: 'int' = ConditionalField(
|
216
|
+
UInt8Field(),
|
217
|
+
lambda pkt: pkt['flags']['bit_5'], # PRIORITY
|
218
|
+
)
|
219
|
+
#: Header block fragment.
|
220
|
+
fragment: 'bytes' = BytesField(length=lambda pkt: (
|
221
|
+
pkt['__length__'] - pkt['pad_len'] if pkt['flags']['bit_3'] else 0
|
222
|
+
))
|
223
|
+
#: Padding.
|
224
|
+
padding: 'bytes' = ConditionalField(
|
225
|
+
PaddingField(length=lambda pkt: pkt['pad_len']),
|
226
|
+
lambda pkt: pkt['flags']['bit_3'], # PADDED
|
227
|
+
)
|
228
|
+
|
229
|
+
if TYPE_CHECKING:
|
230
|
+
def __init__(self, pad_len: 'Optional[int]', stream_dep: 'Optional[StreamDependency]', weight: 'Optional[int]', fragment: 'bytes') -> 'None': ...
|
231
|
+
|
232
|
+
|
233
|
+
@schema_final
|
234
|
+
class PriorityFrame(FrameType, code=Enum_Frame.PRIORITY):
|
235
|
+
"""Header schema for HTTP/2 ``PRIORITY`` frames."""
|
236
|
+
|
237
|
+
#: Stream dependency (exclusive, stream ID).
|
238
|
+
stream: 'StreamDependency' = BitField(length=4, namespace={
|
239
|
+
'exclusive': (0, 1),
|
240
|
+
'sid': (1, 31),
|
241
|
+
})
|
242
|
+
#: Weight.
|
243
|
+
weight: 'int' = UInt8Field()
|
244
|
+
|
245
|
+
if TYPE_CHECKING:
|
246
|
+
def __init__(self, stream: 'StreamDependency', weight: 'int') -> 'None': ...
|
247
|
+
|
248
|
+
|
249
|
+
@schema_final
|
250
|
+
class RSTStreamFrame(FrameType, code=Enum_Frame.RST_STREAM):
|
251
|
+
"""Header schema for HTTP/2 ``RST_STREAM`` frames."""
|
252
|
+
|
253
|
+
#: Error code.
|
254
|
+
error: 'Enum_ErrorCode' = EnumField(length=4, namespace=Enum_ErrorCode)
|
255
|
+
|
256
|
+
if TYPE_CHECKING:
|
257
|
+
def __init__(self, error: 'Enum_ErrorCode') -> 'None': ...
|
258
|
+
|
259
|
+
|
260
|
+
@schema_final
|
261
|
+
class SettingPair(Schema):
|
262
|
+
"""Header schema for HTTP/2 ``SETTINGS`` frame setting pairs."""
|
263
|
+
|
264
|
+
#: Identifier.
|
265
|
+
id: 'Enum_Setting' = EnumField(length=2, namespace=Enum_Setting)
|
266
|
+
#: Value.
|
267
|
+
value: 'int' = UInt32Field()
|
268
|
+
|
269
|
+
if TYPE_CHECKING:
|
270
|
+
def __init__(self, id: 'Enum_Setting', value: 'int') -> 'None': ...
|
271
|
+
|
272
|
+
|
273
|
+
@schema_final
|
274
|
+
class SettingsFrame(FrameType, code=Enum_Frame.SETTINGS):
|
275
|
+
"""Header schema for HTTP/2 ``SETTINGS`` frames."""
|
276
|
+
|
277
|
+
class Flags(FrameType.Flags):
|
278
|
+
"""Flags enumeration for HTTP/2 ``SETTINGS`` frames."""
|
279
|
+
|
280
|
+
ACK = BIT_0 = 0x1
|
281
|
+
|
282
|
+
#: Settings.
|
283
|
+
settings: 'list[SettingPair]' = ListField(
|
284
|
+
length=lambda pkt: pkt['__length__'],
|
285
|
+
item_type=SettingPair, # type: ignore[arg-type]
|
286
|
+
)
|
287
|
+
|
288
|
+
if TYPE_CHECKING:
|
289
|
+
def __init__(self, settings: 'list[SettingPair] | bytes') -> 'None': ...
|
290
|
+
|
291
|
+
|
292
|
+
@schema_final
|
293
|
+
class PushPromiseFrame(FrameType, code=Enum_Frame.PUSH_PROMISE):
|
294
|
+
"""Header schema for HTTP/2 ``PUSH_PROMISE`` frames."""
|
295
|
+
|
296
|
+
class Flags(FrameType.Flags):
|
297
|
+
"""Flags enumeration for HTTP/2 ``PUSH_PROMISE`` frames."""
|
298
|
+
|
299
|
+
END_HEADERS = BIT_2 = 0x4
|
300
|
+
PADDED = BIT_3 = 0x8
|
301
|
+
|
302
|
+
#: Padding length.
|
303
|
+
pad_len: 'int' = ConditionalField(
|
304
|
+
UInt8Field(),
|
305
|
+
lambda pkt: pkt['flags']['bit_3'], # PADDED
|
306
|
+
)
|
307
|
+
#: Promised stream ID.
|
308
|
+
stream: 'StreamID' = BitField(length=4, namespace={
|
309
|
+
'sid': (1, 31),
|
310
|
+
})
|
311
|
+
#: Header block fragment.
|
312
|
+
fragment: 'bytes' = BytesField(length=lambda pkt: (
|
313
|
+
pkt['__length__'] - pkt['pad_len'] if pkt['flags']['bit_3'] else 0
|
314
|
+
))
|
315
|
+
#: Padding.
|
316
|
+
padding: 'bytes' = ConditionalField(
|
317
|
+
PaddingField(length=lambda pkt: pkt['pad_len']),
|
318
|
+
lambda pkt: pkt['flags']['bit_3'], # PADDED
|
319
|
+
)
|
320
|
+
|
321
|
+
if TYPE_CHECKING:
|
322
|
+
def __init__(self, pad_len: 'Optional[int]', stream: 'StreamID', fragment: 'bytes') -> 'None': ...
|
323
|
+
|
324
|
+
|
325
|
+
@schema_final
|
326
|
+
class PingFrame(FrameType, code=Enum_Frame.PING):
|
327
|
+
"""Header schema for HTTP/2 ``PING`` frames."""
|
328
|
+
|
329
|
+
class Flags(FrameType.Flags):
|
330
|
+
"""Flags enumeration for HTTP/2 ``PING`` frames."""
|
331
|
+
|
332
|
+
ACK = BIT_0 = 0x1
|
333
|
+
|
334
|
+
#: Opaque data.
|
335
|
+
data: 'bytes' = BytesField(length=8)
|
336
|
+
|
337
|
+
if TYPE_CHECKING:
|
338
|
+
def __init__(self, data: 'bytes') -> 'None': ...
|
339
|
+
|
340
|
+
|
341
|
+
@schema_final
|
342
|
+
class GoawayFrame(FrameType, code=Enum_Frame.GOAWAY):
|
343
|
+
"""Header schema for HTTP/2 ``GOAWAY`` frames."""
|
344
|
+
|
345
|
+
#: Last stream ID.
|
346
|
+
stream: 'StreamID' = BitField(length=4, namespace={
|
347
|
+
'sid': (1, 31),
|
348
|
+
})
|
349
|
+
#: Error code.
|
350
|
+
error: 'Enum_ErrorCode' = EnumField(length=4, namespace=Enum_ErrorCode)
|
351
|
+
#: Additional debug data.
|
352
|
+
debug: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
|
353
|
+
|
354
|
+
if TYPE_CHECKING:
|
355
|
+
def __init__(self, stream: 'StreamID', error: 'Enum_ErrorCode', debug: 'bytes') -> 'None': ...
|
356
|
+
|
357
|
+
|
358
|
+
@schema_final
|
359
|
+
class WindowUpdateFrame(FrameType, code=Enum_Frame.WINDOW_UPDATE):
|
360
|
+
"""Header schema for HTTP/2 ``WINDOW_UPDATE`` frames."""
|
361
|
+
|
362
|
+
#: Window size increment.
|
363
|
+
size: 'WindowSize' = BitField(length=4, namespace={
|
364
|
+
'incr': (1, 31),
|
365
|
+
})
|
366
|
+
|
367
|
+
if TYPE_CHECKING:
|
368
|
+
def __init__(self, size: 'WindowSize') -> 'None': ...
|
369
|
+
|
370
|
+
|
371
|
+
@schema_final
|
372
|
+
class ContinuationFrame(FrameType, code=Enum_Frame.CONTINUATION):
|
373
|
+
"""Header schema for HTTP/2 ``CONTINUATION`` frames."""
|
374
|
+
|
375
|
+
class Flags(FrameType.Flags):
|
376
|
+
"""Flags enumeration for HTTP/2 ``CONTINUATION`` frames."""
|
377
|
+
|
378
|
+
END_HEADERS = BIT_2 = 0x4
|
379
|
+
|
380
|
+
#: Header block fragment.
|
381
|
+
fragment: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
|
382
|
+
|
383
|
+
if TYPE_CHECKING:
|
384
|
+
def __init__(self, fragment: 'bytes') -> 'None': ...
|