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,358 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Global Header
|
3
|
+
===================
|
4
|
+
|
5
|
+
.. module:: pcapkit.protocols.misc.pcap.header
|
6
|
+
|
7
|
+
:mod:`pcapkit.protocols.misc.pcap.header` contains
|
8
|
+
:class:`~pcapkit.protocols.misc.pcap.Header` only,
|
9
|
+
which implements extractor for global headers [*]_
|
10
|
+
of PCAP, whose structure is described as below:
|
11
|
+
|
12
|
+
.. code-block:: c
|
13
|
+
|
14
|
+
typedef struct pcap_hdr_s {
|
15
|
+
guint32 magic_number; /* magic number */
|
16
|
+
guint16 version_major; /* major version number */
|
17
|
+
guint16 version_minor; /* minor version number */
|
18
|
+
gint32 thiszone; /* GMT to local correction */
|
19
|
+
guint32 sigfigs; /* accuracy of timestamps */
|
20
|
+
guint32 snaplen; /* max length of captured packets, in octets */
|
21
|
+
guint32 network; /* data link type */
|
22
|
+
} pcap_hdr_t;
|
23
|
+
|
24
|
+
.. [*] https://wiki.wireshark.org/Development/LibpcapFileFormat#Global_Header
|
25
|
+
|
26
|
+
"""
|
27
|
+
import io
|
28
|
+
import operator
|
29
|
+
import sys
|
30
|
+
from typing import TYPE_CHECKING, overload
|
31
|
+
|
32
|
+
from pcapkit.const.reg.linktype import LinkType as Enum_LinkType
|
33
|
+
from pcapkit.corekit.version import VersionInfo
|
34
|
+
from pcapkit.protocols.data.misc.pcap.header import Header as Data_Header
|
35
|
+
from pcapkit.protocols.data.misc.pcap.header import MagicNumber as Data_MagicNumber
|
36
|
+
from pcapkit.protocols.protocol import ProtocolBase as Protocol
|
37
|
+
from pcapkit.protocols.schema.misc.pcap.header import Header as Schema_Header
|
38
|
+
from pcapkit.utilities.exceptions import EndianError, FileError, UnsupportedCall
|
39
|
+
|
40
|
+
if TYPE_CHECKING:
|
41
|
+
from enum import IntEnum as StdlibEnum
|
42
|
+
from typing import IO, Any, NoReturn, Optional, Type
|
43
|
+
|
44
|
+
from aenum import IntEnum as AenumEnum
|
45
|
+
from typing_extensions import Literal
|
46
|
+
|
47
|
+
__all__ = ['Header']
|
48
|
+
|
49
|
+
#: dict[tuple[str, bool], bytes]: Mapping of PCAP file magic numbers. The key
|
50
|
+
#: is a :obj:`tuple` of endianness (``big`` or ``little``) and nanosecond-
|
51
|
+
#: timestamp resolution flag (:data:`True` refers to nanosecond-resolution
|
52
|
+
#: timestamp, :data:`False` refers to microsecond-resolution timestamp); the
|
53
|
+
#: value is the corresponding PCAP file magic number sequence.
|
54
|
+
_MAGIC_NUM = {
|
55
|
+
('big', True): b'\xa1\xb2\x3c\x4d',
|
56
|
+
('big', False): b'\xa1\xb2\xc3\xd4',
|
57
|
+
('little', True): b'\x4d\x3c\xb2\xa1',
|
58
|
+
('little', False): b'\xd4\xc3\xb2\xa1',
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
class Header(Protocol[Data_Header, Schema_Header],
|
63
|
+
schema=Schema_Header, data=Data_Header):
|
64
|
+
"""PCAP file global header extractor."""
|
65
|
+
|
66
|
+
##########################################################################
|
67
|
+
# Properties.
|
68
|
+
##########################################################################
|
69
|
+
|
70
|
+
@property
|
71
|
+
def name(self) -> 'Literal["Global Header"]':
|
72
|
+
"""Name of corresponding protocol."""
|
73
|
+
return 'Global Header'
|
74
|
+
|
75
|
+
@property
|
76
|
+
def length(self) -> 'Literal[24]':
|
77
|
+
"""Header length of corresponding protocol."""
|
78
|
+
return 24
|
79
|
+
|
80
|
+
@property
|
81
|
+
def version(self) -> 'VersionInfo':
|
82
|
+
"""Version information of input PCAP file."""
|
83
|
+
return self._info.version
|
84
|
+
|
85
|
+
@property
|
86
|
+
def payload(self) -> 'NoReturn':
|
87
|
+
"""Payload of current instance.
|
88
|
+
|
89
|
+
Raises:
|
90
|
+
UnsupportedCall: This protocol doesn't support :attr:`payload`.
|
91
|
+
|
92
|
+
"""
|
93
|
+
raise UnsupportedCall("'Header' object has no attribute 'payload'")
|
94
|
+
|
95
|
+
@property
|
96
|
+
def protocol(self) -> 'Enum_LinkType':
|
97
|
+
"""Data link type."""
|
98
|
+
return self._info.network
|
99
|
+
|
100
|
+
@property
|
101
|
+
def protochain(self) -> 'NoReturn':
|
102
|
+
"""Protocol chain of current instance.
|
103
|
+
|
104
|
+
Raises:
|
105
|
+
UnsupportedCall: This protocol doesn't support :attr:`protochain`.
|
106
|
+
|
107
|
+
"""
|
108
|
+
raise UnsupportedCall("'Header' object has no attribute 'protochain'")
|
109
|
+
|
110
|
+
@property
|
111
|
+
def byteorder(self) -> 'Literal["big", "little"]':
|
112
|
+
"""Header byte order."""
|
113
|
+
return self._byte
|
114
|
+
|
115
|
+
@property
|
116
|
+
def nanosecond(self) -> bool:
|
117
|
+
"""Nanosecond-resolution flag."""
|
118
|
+
return self._nsec
|
119
|
+
|
120
|
+
##########################################################################
|
121
|
+
# Methods.
|
122
|
+
##########################################################################
|
123
|
+
|
124
|
+
def read(self, length: 'Optional[int]' = None, **kwargs: 'Any') -> 'Data_Header': # pylint: disable=unused-argument
|
125
|
+
"""Read global header of PCAP file.
|
126
|
+
|
127
|
+
Notes:
|
128
|
+
PCAP file has **four** different valid magic numbers.
|
129
|
+
|
130
|
+
* ``d4 c3 b2 a1`` -- Little-endian microsecond-timestamp PCAP file.
|
131
|
+
* ``a1 b2 c3 d4`` -- Big-endian microsecond-timestamp PCAP file.
|
132
|
+
* ``4d 3c b2 a1`` -- Little-endian nanosecond-timestamp PCAP file.
|
133
|
+
* ``a1 b2 3c 4d`` -- Big-endian nano-timestamp PCAP file.
|
134
|
+
|
135
|
+
Args:
|
136
|
+
length: Length of data to be read.
|
137
|
+
**kwargs: Arbitrary keyword arguments.
|
138
|
+
|
139
|
+
Returns:
|
140
|
+
Parsed packet data.
|
141
|
+
|
142
|
+
Raises:
|
143
|
+
FileError: If the magic number is invalid.
|
144
|
+
|
145
|
+
"""
|
146
|
+
if TYPE_CHECKING:
|
147
|
+
self._byte: 'Literal["big", "little"]'
|
148
|
+
schema = self.__header__
|
149
|
+
|
150
|
+
_magn = schema.magic_number
|
151
|
+
if _magn == b'\xd4\xc3\xb2\xa1':
|
152
|
+
self._nsec = False
|
153
|
+
self._byte = 'little'
|
154
|
+
elif _magn == b'\xa1\xb2\xc3\xd4':
|
155
|
+
self._nsec = False
|
156
|
+
self._byte = 'big'
|
157
|
+
elif _magn == b'\x4d\x3c\xb2\xa1':
|
158
|
+
self._nsec = True
|
159
|
+
self._byte = 'little'
|
160
|
+
elif _magn == b'\xa1\xb2\x3c\x4d':
|
161
|
+
self._nsec = True
|
162
|
+
self._byte = 'big'
|
163
|
+
else:
|
164
|
+
raise FileError(5, 'Unknown file format', self._file.name) # pylint: disable=no-member
|
165
|
+
|
166
|
+
header = Data_Header(
|
167
|
+
magic_number=Data_MagicNumber(
|
168
|
+
data=_magn,
|
169
|
+
byteorder=self._byte,
|
170
|
+
nanosecond=self._nsec,
|
171
|
+
),
|
172
|
+
version=VersionInfo(schema.version_major, schema.version_minor),
|
173
|
+
thiszone=schema.thiszone,
|
174
|
+
sigfigs=schema.sigfigs,
|
175
|
+
snaplen=schema.snaplen,
|
176
|
+
network=schema.network,
|
177
|
+
)
|
178
|
+
|
179
|
+
return header
|
180
|
+
|
181
|
+
def make(self,
|
182
|
+
byteorder: 'Literal["big", "little"]' = sys.byteorder,
|
183
|
+
lilendian: 'Optional[bool]' = None,
|
184
|
+
bigendian: 'Optional[bool]' = None,
|
185
|
+
nanosecond: bool = False,
|
186
|
+
version: 'tuple[int, int] | VersionInfo' = (2, 4),
|
187
|
+
version_major: 'Optional[int]' = None,
|
188
|
+
version_minor: 'Optional[int]' = None,
|
189
|
+
thiszone: int = 0, sigfigs: int = 0,
|
190
|
+
snaplen: int = 0x40_000,
|
191
|
+
network: 'Enum_LinkType | StdlibEnum | AenumEnum | str | int' = Enum_LinkType.NULL,
|
192
|
+
network_default: 'Optional[int]' = None,
|
193
|
+
network_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None,
|
194
|
+
network_reversed: bool = False,
|
195
|
+
**kwargs: 'Any') -> 'Schema_Header':
|
196
|
+
"""Make (construct) packet data.
|
197
|
+
|
198
|
+
Args:
|
199
|
+
byteorder: header byte order
|
200
|
+
lilendian: little-endian flag
|
201
|
+
bigendian: big-endian flag
|
202
|
+
nanosecond: nanosecond-resolution file flag
|
203
|
+
version: version information
|
204
|
+
version_major: major version number
|
205
|
+
version_minor: minor version number
|
206
|
+
thiszone: GMT to local correction
|
207
|
+
sigfigs: accuracy of timestamps
|
208
|
+
snaplen: max length of captured packets, in octets
|
209
|
+
network: data link type
|
210
|
+
network_default: default value for unknown data link type
|
211
|
+
network_namespace: data link type namespace
|
212
|
+
network_reversed: if namespace is ``str -> int`` pairs
|
213
|
+
**kwargs: Arbitrary keyword arguments.
|
214
|
+
|
215
|
+
Returns:
|
216
|
+
Constructed packet data.
|
217
|
+
|
218
|
+
"""
|
219
|
+
# make magic number
|
220
|
+
magic_number, lilendian = self._make_magic(byteorder, lilendian, bigendian, nanosecond)
|
221
|
+
|
222
|
+
if version_major is None:
|
223
|
+
version_major = version[0]
|
224
|
+
if version_minor is None:
|
225
|
+
version_minor = version[1]
|
226
|
+
|
227
|
+
return Schema_Header(
|
228
|
+
magic_number=magic_number,
|
229
|
+
version_major=version_major,
|
230
|
+
version_minor=version_minor,
|
231
|
+
thiszone=thiszone,
|
232
|
+
sigfigs=sigfigs,
|
233
|
+
snaplen=snaplen,
|
234
|
+
network=self._make_index(network, network_default, namespace=network_namespace,
|
235
|
+
reversed=network_reversed, pack=False),
|
236
|
+
)
|
237
|
+
|
238
|
+
##########################################################################
|
239
|
+
# Data models.
|
240
|
+
##########################################################################
|
241
|
+
|
242
|
+
@overload
|
243
|
+
def __post_init__(self, file: 'IO[bytes] | bytes', length: 'Optional[int]' = ..., **kwargs: 'Any') -> 'None': ...
|
244
|
+
@overload
|
245
|
+
def __post_init__(self, **kwargs: 'Any') -> 'None': ... # pylint: disable=arguments-differ
|
246
|
+
|
247
|
+
def __post_init__(self, file: 'Optional[IO[bytes] | bytes]' = None,
|
248
|
+
length: 'Optional[int]' = None, **kwargs: 'Any') -> 'None':
|
249
|
+
"""Post initialisation hook.
|
250
|
+
|
251
|
+
Args:
|
252
|
+
file: Source packet stream.
|
253
|
+
length: Length of packet data.
|
254
|
+
**kwargs: Arbitrary keyword arguments.
|
255
|
+
|
256
|
+
See Also:
|
257
|
+
For construction argument, please refer to :meth:`make`.
|
258
|
+
|
259
|
+
"""
|
260
|
+
if file is None:
|
261
|
+
_data = self.pack(**kwargs)
|
262
|
+
else:
|
263
|
+
_data = file if isinstance(file, bytes) else file.read(operator.length_hint(self))
|
264
|
+
|
265
|
+
#: bytes: Raw packet data.
|
266
|
+
self._data = _data
|
267
|
+
#: io.BytesIO: Source packet stream.
|
268
|
+
self._file = io.BytesIO(self._data)
|
269
|
+
if file is not None and hasattr(file, 'name'): # set back source filename
|
270
|
+
self._file.name = file.name
|
271
|
+
#: pcapkit.corekit.infoclass.Info: Parsed packet data.
|
272
|
+
self._info = self.unpack(length, **kwargs)
|
273
|
+
|
274
|
+
def __len__(self) -> 'Literal[24]':
|
275
|
+
"""Total length of corresponding protocol."""
|
276
|
+
return 24
|
277
|
+
|
278
|
+
def __length_hint__(self) -> 'Literal[24]':
|
279
|
+
"""Return an estimated length for the object."""
|
280
|
+
return 24
|
281
|
+
|
282
|
+
@classmethod
|
283
|
+
def __index__(cls) -> 'NoReturn':
|
284
|
+
"""Numeral registry index of the protocol.
|
285
|
+
|
286
|
+
Raises:
|
287
|
+
UnsupportedCall: This protocol has no registry entry.
|
288
|
+
|
289
|
+
"""
|
290
|
+
raise UnsupportedCall(f'{cls.__name__!r} object cannot be interpreted as an integer')
|
291
|
+
|
292
|
+
##########################################################################
|
293
|
+
# Utilities.
|
294
|
+
##########################################################################
|
295
|
+
|
296
|
+
@classmethod
|
297
|
+
def _make_data(cls, data: 'Data_Header') -> 'dict[str, Any]': # type: ignore[override]
|
298
|
+
"""Create key-value pairs from ``data`` for protocol construction.
|
299
|
+
|
300
|
+
Args:
|
301
|
+
data: protocol data
|
302
|
+
|
303
|
+
Returns:
|
304
|
+
Key-value pairs for protocol construction.
|
305
|
+
|
306
|
+
"""
|
307
|
+
return {
|
308
|
+
'magic_number': data.magic_number.data,
|
309
|
+
'version_major': data.version.major,
|
310
|
+
'version_minor': data.version.minor,
|
311
|
+
'thiszone': data.thiszone,
|
312
|
+
'sigfigs': data.sigfigs,
|
313
|
+
'snaplen': data.snaplen,
|
314
|
+
'network': data.network,
|
315
|
+
}
|
316
|
+
|
317
|
+
def _read_protos(self, size: int) -> 'Enum_LinkType':
|
318
|
+
"""Read next layer protocol type.
|
319
|
+
|
320
|
+
Arguments:
|
321
|
+
size: buffer size
|
322
|
+
|
323
|
+
Returns:
|
324
|
+
Link layer protocol enumeration.
|
325
|
+
|
326
|
+
"""
|
327
|
+
_byte = self._read_unpack(4, lilendian=True)
|
328
|
+
_prot = Enum_LinkType.get(_byte)
|
329
|
+
return _prot
|
330
|
+
|
331
|
+
def _make_magic(self, byteorder: 'Literal["big", "little"]' = sys.byteorder,
|
332
|
+
lilendian: 'Optional[bool]' = None, bigendian: 'Optional[bool]' = None,
|
333
|
+
nanosecond: bool = False) -> 'tuple[bytes, bool]':
|
334
|
+
"""Generate magic number.
|
335
|
+
|
336
|
+
Args:
|
337
|
+
byteorder: header byte order
|
338
|
+
lilendian: little-endian flag
|
339
|
+
bigendian: big-endian flag
|
340
|
+
nanosecond: nanosecond-resolution file flag
|
341
|
+
|
342
|
+
Returns:
|
343
|
+
Magic number and little-endian flag.
|
344
|
+
|
345
|
+
"""
|
346
|
+
if lilendian is not None and bigendian is not None:
|
347
|
+
if lilendian == bigendian:
|
348
|
+
raise EndianError('unresolved byte order')
|
349
|
+
if bigendian:
|
350
|
+
return _MAGIC_NUM[('big', False)], False
|
351
|
+
if lilendian:
|
352
|
+
return _MAGIC_NUM[('little', True)], True
|
353
|
+
|
354
|
+
if byteorder not in ('little', 'big'):
|
355
|
+
raise EndianError(f"unknown byte order: {byteorder!r}")
|
356
|
+
|
357
|
+
magic_number = _MAGIC_NUM[(byteorder, nanosecond)]
|
358
|
+
return magic_number, (byteorder == 'little')
|