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,718 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# mypy: disable-error-code=assignment
|
3
|
+
"""header schema for mobility header"""
|
4
|
+
|
5
|
+
import datetime
|
6
|
+
import math
|
7
|
+
from typing import TYPE_CHECKING
|
8
|
+
|
9
|
+
from pcapkit.const.mh.access_type import AccessType as Enum_AccessType
|
10
|
+
from pcapkit.const.mh.ack_status_code import ACKStatusCode as Enum_ACKStatusCode
|
11
|
+
from pcapkit.const.mh.ani_suboption import ANISuboption as Enum_ANISuboption
|
12
|
+
from pcapkit.const.mh.auth_subtype import AuthSubtype as Enum_AuthSubtype
|
13
|
+
from pcapkit.const.mh.binding_ack_flag import BindingACKFlag as Enum_BindingACKFlag
|
14
|
+
from pcapkit.const.mh.binding_error import BindingError as Enum_BindingError
|
15
|
+
from pcapkit.const.mh.binding_revocation import BindingRevocation as Enum_BindingRevocation
|
16
|
+
from pcapkit.const.mh.binding_update_flag import BindingUpdateFlag as Enum_BindingUpdateFlag
|
17
|
+
from pcapkit.const.mh.cga_extension import CGAExtension as Enum_CGAExtension
|
18
|
+
from pcapkit.const.mh.cga_type import CGAType as Enum_CGAType
|
19
|
+
from pcapkit.const.mh.dhcp_support_mode import DHCPSupportMode as Enum_DHCPSupportMode
|
20
|
+
from pcapkit.const.mh.dns_status_code import DNSStatusCode as Enum_DNSStatusCode
|
21
|
+
from pcapkit.const.mh.dsmip6_tls_packet import DSMIP6TLSPacket as Enum_DSMIP6TLSPacket
|
22
|
+
from pcapkit.const.mh.dsmipv6_home_address import DSMIPv6HomeAddress as Enum_DSMIPv6HomeAddress
|
23
|
+
from pcapkit.const.mh.enumerating_algorithm import EnumeratingAlgorithm as Enum_EnumeratingAlgorithm
|
24
|
+
from pcapkit.const.mh.fb_ack_status import FlowBindingACKStatus as Enum_FlowBindingACKStatus
|
25
|
+
from pcapkit.const.mh.fb_action import FlowBindingAction as Enum_FlowBindingAction
|
26
|
+
from pcapkit.const.mh.fb_indication_trigger import \
|
27
|
+
FlowBindingIndicationTrigger as Enum_FlowBindingIndicationTrigger
|
28
|
+
from pcapkit.const.mh.fb_type import FlowBindingType as Enum_FlowBindingType
|
29
|
+
from pcapkit.const.mh.flow_id_status import FlowIDStatus as Enum_FlowIDStatus
|
30
|
+
from pcapkit.const.mh.flow_id_suboption import FlowIDSuboption as Enum_FlowIDSuboption
|
31
|
+
from pcapkit.const.mh.handoff_type import HandoffType as Enum_HandoffType
|
32
|
+
from pcapkit.const.mh.handover_ack_flag import HandoverACKFlag as Enum_HandoverACKFlag
|
33
|
+
from pcapkit.const.mh.handover_ack_status import HandoverACKStatus as Enum_HandoverACKStatus
|
34
|
+
from pcapkit.const.mh.handover_initiate_flag import \
|
35
|
+
HandoverInitiateFlag as Enum_HandoverInitiateFlag
|
36
|
+
from pcapkit.const.mh.home_address_reply import HomeAddressReply as Enum_HomeAddressReply
|
37
|
+
from pcapkit.const.mh.lla_code import LLACode as Enum_LLACode
|
38
|
+
from pcapkit.const.mh.lma_mag_suboption import \
|
39
|
+
LMAControlledMAGSuboption as Enum_LMAControlledMAGSuboption
|
40
|
+
from pcapkit.const.mh.mn_group_id import MNGroupID as Enum_MNGroupID
|
41
|
+
from pcapkit.const.mh.mn_id_subtype import MNIDSubtype as Enum_MNIDSubtype
|
42
|
+
from pcapkit.const.mh.operator_id import OperatorID as Enum_OperatorID
|
43
|
+
from pcapkit.const.mh.option import Option as Enum_Option
|
44
|
+
from pcapkit.const.mh.packet import Packet as Enum_Packet
|
45
|
+
from pcapkit.const.mh.qos_attribute import QoSAttribute as Enum_QoSAttribute
|
46
|
+
from pcapkit.const.mh.revocation_status_code import \
|
47
|
+
RevocationStatusCode as Enum_RevocationStatusCode
|
48
|
+
from pcapkit.const.mh.revocation_trigger import RevocationTrigger as Enum_RevocationTrigger
|
49
|
+
from pcapkit.const.mh.status_code import StatusCode as Enum_StatusCode
|
50
|
+
from pcapkit.const.mh.traffic_selector import TrafficSelector as Enum_TrafficSelector
|
51
|
+
from pcapkit.const.mh.upa_status import \
|
52
|
+
UpdateNotificationACKStatus as Enum_UpdateNotificationACKStatus
|
53
|
+
from pcapkit.const.mh.upn_reason import UpdateNotificationReason as Enum_UpdateNotificationReason
|
54
|
+
from pcapkit.const.reg.transtype import TransType as Enum_TransType
|
55
|
+
from pcapkit.corekit.fields.collections import ListField, OptionField
|
56
|
+
from pcapkit.corekit.fields.ipaddress import IPv6AddressField
|
57
|
+
from pcapkit.corekit.fields.misc import (ConditionalField, ForwardMatchField, PayloadField,
|
58
|
+
SchemaField, SwitchField)
|
59
|
+
from pcapkit.corekit.fields.numbers import (EnumField, UInt8Field, UInt16Field, UInt32Field,
|
60
|
+
UInt64Field)
|
61
|
+
from pcapkit.corekit.fields.strings import BitField, BytesField, PaddingField, StringField
|
62
|
+
from pcapkit.protocols.schema.schema import EnumSchema, Schema, schema_final
|
63
|
+
from pcapkit.utilities.logging import SPHINX_TYPE_CHECKING
|
64
|
+
|
65
|
+
__all__ = [
|
66
|
+
'MH',
|
67
|
+
|
68
|
+
'Packet',
|
69
|
+
'UnknownMessage', 'BindingRefreshRequestMessage', 'HomeTestInitMessage', 'CareofTestInitMessage',
|
70
|
+
'HomeTestMessage', 'CareofTestMessage', 'BindingUpdateMessage', 'BindingAcknowledgementMessage',
|
71
|
+
'BindingErrorMessage',
|
72
|
+
|
73
|
+
'Option',
|
74
|
+
'UnassignedOption', 'PadOption', 'BindingRefreshAdviceOption', 'AlternateCareofAddressOption',
|
75
|
+
'NonceIndicesOption', 'AuthorizationDataOption', 'MobileNetworkPrefixOption',
|
76
|
+
'LinkLayerAddressOption', 'MNIDOption', 'AuthOption', 'MesgIDOption', 'CGAParametersRequestOption',
|
77
|
+
'CGAParametersOption', 'SignatureOption', 'PermanentHomeKeygenTokenOption', 'CareofTestInitOption',
|
78
|
+
'CareofTestOption',
|
79
|
+
|
80
|
+
'CGAParameter',
|
81
|
+
|
82
|
+
'CGAExtension',
|
83
|
+
'UnknownExtension', 'MultiPrefixExtension',
|
84
|
+
]
|
85
|
+
|
86
|
+
if TYPE_CHECKING:
|
87
|
+
from datetime import datetime as dt_type
|
88
|
+
from ipaddress import IPv6Address
|
89
|
+
from typing import Any
|
90
|
+
|
91
|
+
from pcapkit.corekit.fields.field import FieldBase as Field
|
92
|
+
from pcapkit.protocols.protocol import ProtocolBase as Protocol
|
93
|
+
|
94
|
+
if SPHINX_TYPE_CHECKING:
|
95
|
+
from typing_extensions import TypedDict
|
96
|
+
|
97
|
+
class ANSIKeyLengthTest(TypedDict):
|
98
|
+
"""Length test for ANSI.1 encoded data, c.f.,
|
99
|
+
:attr:`CGAParameter.public_key_test`."""
|
100
|
+
|
101
|
+
len: int
|
102
|
+
|
103
|
+
class MultiPrefixExtensionFlags(TypedDict):
|
104
|
+
"""Flags for :attr:`MultiPrefixExtension.flags`."""
|
105
|
+
|
106
|
+
P: int
|
107
|
+
|
108
|
+
class BindingUpdateMessageFlags(TypedDict):
|
109
|
+
"""Flags for :attr:`BindingUpdateMessage.flags`."""
|
110
|
+
|
111
|
+
A: 'int'
|
112
|
+
H: 'int'
|
113
|
+
L: 'int'
|
114
|
+
K: 'int'
|
115
|
+
|
116
|
+
class BindingAcknowledgementMessageFlags(TypedDict):
|
117
|
+
"""Flags for :attr:`BindingAcknowledgementMessage.flags`."""
|
118
|
+
|
119
|
+
K: 'int'
|
120
|
+
|
121
|
+
|
122
|
+
def mh_data_selector(pkt: 'dict[str, Any]') -> 'Field':
|
123
|
+
"""Selector function for :attr:`MH.data` field.
|
124
|
+
|
125
|
+
Args:
|
126
|
+
pkt: Packet data.
|
127
|
+
|
128
|
+
Returns:
|
129
|
+
Returns a :class:`~pcapkit.corekit.fields.misc.SchemaField`
|
130
|
+
wrapped :class:`~pcapkit.protocols.schema.internet.mh.Packet`
|
131
|
+
subclass instance.
|
132
|
+
|
133
|
+
"""
|
134
|
+
type = pkt['type'] # type: Enum_Packet
|
135
|
+
length = pkt['length'] * 8 + 2
|
136
|
+
schema = Packet.registry[type]
|
137
|
+
return SchemaField(length=length, schema=schema)
|
138
|
+
|
139
|
+
|
140
|
+
def mn_id_selector(pkt: 'dict[str, Any]') -> 'Field':
|
141
|
+
"""Selector function for :attr:`MNIDOption.identifier` field.
|
142
|
+
|
143
|
+
Args:
|
144
|
+
pkt: Packet data.
|
145
|
+
|
146
|
+
Returns:
|
147
|
+
Returns a :class:`~pcapkit.corekit.fields.field.Field` instance
|
148
|
+
corresponding to the subtype.
|
149
|
+
|
150
|
+
"""
|
151
|
+
subtype = pkt['subtype'] # type: Enum_MNIDSubtype
|
152
|
+
if subtype == Enum_MNIDSubtype.NAI:
|
153
|
+
return StringField(length=pkt['length'] - 1)
|
154
|
+
if subtype == Enum_MNIDSubtype.IPv6_Address:
|
155
|
+
return IPv6AddressField()
|
156
|
+
return BytesField(length=pkt['length'] - 1)
|
157
|
+
|
158
|
+
|
159
|
+
@schema_final
|
160
|
+
class MH(Schema):
|
161
|
+
"""Header schema for MH packets."""
|
162
|
+
|
163
|
+
#: Next header.
|
164
|
+
next: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
|
165
|
+
#: Header length.
|
166
|
+
length: 'int' = UInt8Field()
|
167
|
+
#: MH type.
|
168
|
+
type: 'Enum_Packet' = EnumField(length=1, namespace=Enum_Packet)
|
169
|
+
#: Reserved.
|
170
|
+
reserved: 'bytes' = PaddingField(length=1)
|
171
|
+
#: Checksum.
|
172
|
+
chksum: 'bytes' = BytesField(length=2)
|
173
|
+
#: Message data.
|
174
|
+
data: 'Packet' = SwitchField(selector=mh_data_selector)
|
175
|
+
#: Payload.
|
176
|
+
payload: 'bytes' = PayloadField()
|
177
|
+
|
178
|
+
if TYPE_CHECKING:
|
179
|
+
def __init__(self, next: 'Enum_TransType | int', length: 'int', type: 'Enum_Packet | int',
|
180
|
+
chksum: 'bytes', data: 'Packet | bytes', payload: 'bytes | Protocol | Schema') -> 'None': ...
|
181
|
+
|
182
|
+
|
183
|
+
class Option(EnumSchema[Enum_Option]):
|
184
|
+
"""Header schema for MH options."""
|
185
|
+
|
186
|
+
__default__ = lambda: UnassignedOption
|
187
|
+
|
188
|
+
#: Option type.
|
189
|
+
type: 'Enum_Option' = EnumField(length=1, namespace=Enum_Option)
|
190
|
+
#: Option length (excl. type and length fields), conditional in case of
|
191
|
+
#: ``Pad1`` option.
|
192
|
+
length: 'int' = ConditionalField(
|
193
|
+
UInt8Field(default=0),
|
194
|
+
lambda pkt: pkt['type'] != Enum_Option.Pad1,
|
195
|
+
)
|
196
|
+
|
197
|
+
def post_process(self, packet: 'dict[str, Any]') -> 'Option':
|
198
|
+
"""Revise ``schema`` data after unpacking process.
|
199
|
+
|
200
|
+
Args:
|
201
|
+
packet: Unpacked data.
|
202
|
+
|
203
|
+
Returns:
|
204
|
+
Revised schema.
|
205
|
+
|
206
|
+
"""
|
207
|
+
# for Pad1 option, length is always 1
|
208
|
+
if self.type == Enum_Option.pad1:
|
209
|
+
self.length = 0
|
210
|
+
return self
|
211
|
+
|
212
|
+
|
213
|
+
@schema_final
|
214
|
+
class UnassignedOption(Option):
|
215
|
+
"""Header schema for unassigned MH options."""
|
216
|
+
|
217
|
+
#: Option data.
|
218
|
+
data: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
|
219
|
+
|
220
|
+
if TYPE_CHECKING:
|
221
|
+
def __init__(self, type: 'Enum_Option', length: 'int', data: 'bytes') -> 'None': ...
|
222
|
+
|
223
|
+
|
224
|
+
@schema_final
|
225
|
+
class PadOption(Option, code=[Enum_Option.Pad1,
|
226
|
+
Enum_Option.PadN]):
|
227
|
+
"""Header schema for MH padding options."""
|
228
|
+
|
229
|
+
#: Option data.
|
230
|
+
data: 'bytes' = PaddingField(length=lambda pkt: pkt.get('length', 0))
|
231
|
+
|
232
|
+
if TYPE_CHECKING:
|
233
|
+
def __init__(self, type: 'Enum_Option', length: 'int') -> 'None': ...
|
234
|
+
|
235
|
+
|
236
|
+
@schema_final
|
237
|
+
class BindingRefreshAdviceOption(Option, code=Enum_Option.Binding_Refresh_Advice):
|
238
|
+
"""Header schema for MH binding refresh advice options."""
|
239
|
+
|
240
|
+
#: Refresh interval.
|
241
|
+
interval: 'int' = UInt16Field()
|
242
|
+
|
243
|
+
if TYPE_CHECKING:
|
244
|
+
def __init__(self, type: 'Enum_Option', length: 'int', interval: 'int') -> 'None': ...
|
245
|
+
|
246
|
+
|
247
|
+
@schema_final
|
248
|
+
class AlternateCareofAddressOption(Option, code=Enum_Option.Alternate_Care_of_Address):
|
249
|
+
"""Header schema for MH alternate care-of address options."""
|
250
|
+
|
251
|
+
#: Alternate care-of address.
|
252
|
+
address: 'IPv6Address' = IPv6AddressField()
|
253
|
+
|
254
|
+
if TYPE_CHECKING:
|
255
|
+
def __init__(self, type: 'Enum_Option', length: 'int', address: 'IPv6Address | str | bytes | int') -> 'None': ...
|
256
|
+
|
257
|
+
|
258
|
+
@schema_final
|
259
|
+
class NonceIndicesOption(Option, code=Enum_Option.Nonce_Indices):
|
260
|
+
"""Header schema for MH nonce indices options."""
|
261
|
+
|
262
|
+
#: Home nonce index.
|
263
|
+
home: 'int' = UInt16Field()
|
264
|
+
#: Care-of nonce index.
|
265
|
+
careof: 'int' = UInt16Field()
|
266
|
+
|
267
|
+
if TYPE_CHECKING:
|
268
|
+
def __init__(self, type: 'Enum_Option', length: 'int', home: 'int', careof: 'int') -> 'None': ...
|
269
|
+
|
270
|
+
|
271
|
+
@schema_final
|
272
|
+
class AuthorizationDataOption(Option, code=Enum_Option.Authorization_Data):
|
273
|
+
"""Header schema for MH binding authorization data options."""
|
274
|
+
|
275
|
+
#: Authenticator.
|
276
|
+
data: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
|
277
|
+
|
278
|
+
if TYPE_CHECKING:
|
279
|
+
def __init__(self, type: 'Enum_Option', length: 'int', data: 'bytes') -> 'None': ...
|
280
|
+
|
281
|
+
|
282
|
+
@schema_final
|
283
|
+
class MobileNetworkPrefixOption(Option, code=Enum_Option.Mobile_Network_Prefix_Option):
|
284
|
+
"""Header schema for MH mobile network prefix options."""
|
285
|
+
|
286
|
+
#: Reserved.
|
287
|
+
reserved: 'bytes' = PaddingField(length=1)
|
288
|
+
#: Prefix length.
|
289
|
+
prefix_length: 'int' = UInt8Field()
|
290
|
+
#: Mobile network prefix.
|
291
|
+
prefix: 'IPv6Address' = IPv6AddressField()
|
292
|
+
|
293
|
+
if TYPE_CHECKING:
|
294
|
+
def __init__(self, type: 'Enum_Option', length: 'int', prefix_length: 'int', prefix: 'IPv6Address | int | bytes | str') -> 'None': ...
|
295
|
+
|
296
|
+
|
297
|
+
@schema_final
|
298
|
+
class LinkLayerAddressOption(Option, code=Enum_Option.Mobility_Header_Link_Layer_Address_option):
|
299
|
+
"""Header schema for MH link-layer address (MH-LLA) options."""
|
300
|
+
|
301
|
+
#: Option code.
|
302
|
+
code: 'Enum_LLACode' = EnumField(length=1, namespace=Enum_LLACode)
|
303
|
+
#: Link-layer address (LAA).
|
304
|
+
lla: 'bytes' = BytesField(length=lambda pkt: pkt['length'] - 1)
|
305
|
+
|
306
|
+
if TYPE_CHECKING:
|
307
|
+
def __init__(self, type: 'Enum_Option', length: 'int', code: 'Enum_LLACode', lla: 'bytes') -> 'None': ...
|
308
|
+
|
309
|
+
|
310
|
+
@schema_final
|
311
|
+
class MNIDOption(Option, code=Enum_Option.MN_ID_OPTION_TYPE):
|
312
|
+
"""Header schema for MH mobile node identifier (MNID) options."""
|
313
|
+
|
314
|
+
#: Subtype.
|
315
|
+
subtype: 'Enum_MNIDSubtype' = EnumField(length=1, namespace=Enum_MNIDSubtype)
|
316
|
+
#: Identifier.
|
317
|
+
identifier: 'bytes | str | IPv6Address' = SwitchField(selector=mn_id_selector)
|
318
|
+
|
319
|
+
if TYPE_CHECKING:
|
320
|
+
def __init__(self, type: 'Enum_Option', length: 'int', subtype: 'Enum_MNIDSubtype', identifier: 'bytes | str | IPv6Address | int') -> 'None': ...
|
321
|
+
|
322
|
+
|
323
|
+
@schema_final
|
324
|
+
class AuthOption(Option, code=Enum_Option.AUTH_OPTION_TYPE):
|
325
|
+
"""Header schema for Mobility Message Authentication options."""
|
326
|
+
|
327
|
+
#: Subtype.
|
328
|
+
subtype: 'Enum_AuthSubtype' = EnumField(length=1, namespace=Enum_AuthSubtype)
|
329
|
+
#: Mobility SPI.
|
330
|
+
spi: 'int' = UInt32Field()
|
331
|
+
#: Authentication data.
|
332
|
+
data: 'bytes' = BytesField(length=lambda pkt: pkt['length'] - 5)
|
333
|
+
|
334
|
+
if TYPE_CHECKING:
|
335
|
+
def __init__(self, type: 'Enum_Option', length: 'int', subtype: 'Enum_AuthSubtype', spi: 'int', data: 'bytes') -> 'None': ...
|
336
|
+
|
337
|
+
|
338
|
+
@schema_final
|
339
|
+
class MesgIDOption(Option, code=Enum_Option.MESG_ID_OPTION_TYPE):
|
340
|
+
"""Header schema for Mobility Message Replay Protection options."""
|
341
|
+
|
342
|
+
#: Timestamp (seconds since January 1st, 1970, c.f., :rfc:`1305`).
|
343
|
+
seconds: 'int' = UInt32Field()
|
344
|
+
#: Timestamp fractions (1/2**32 seconds per unit, c.f., :rfc:`1305`).
|
345
|
+
fraction: 'int' = UInt32Field()
|
346
|
+
|
347
|
+
def post_process(self, packet: 'dict[str, Any]') -> 'MesgIDOption':
|
348
|
+
"""Revise ``schema`` data after unpacking process.
|
349
|
+
|
350
|
+
Args:
|
351
|
+
packet: Unpacked data.
|
352
|
+
|
353
|
+
Returns:
|
354
|
+
Revised schema.
|
355
|
+
|
356
|
+
"""
|
357
|
+
self = super().post_process(packet)
|
358
|
+
|
359
|
+
# convert timestamp to datetime
|
360
|
+
# c.f., http://tickelton.gitlab.io/articles/ntp-timestamps/
|
361
|
+
ts_sec = self.seconds - 2_208_988_800 # 70 years
|
362
|
+
ts_usec = math.floor(self.fraction / 2**32)
|
363
|
+
|
364
|
+
self.timestamp = datetime.datetime.fromtimestamp(ts_sec + ts_usec, tz=datetime.timezone.utc)
|
365
|
+
|
366
|
+
return self
|
367
|
+
|
368
|
+
if TYPE_CHECKING:
|
369
|
+
#: Timestamp interval (since UNIX-epoch).
|
370
|
+
timestamp: 'dt_type'
|
371
|
+
|
372
|
+
def __init__(self, type: 'Enum_Option', length: 'int', seconds: 'int', fraction: 'int') -> 'None': ...
|
373
|
+
|
374
|
+
|
375
|
+
@schema_final
|
376
|
+
class CGAParametersRequestOption(Option, code=Enum_Option.CGA_Parameters_Request):
|
377
|
+
"""Header schema for CGA Parameters Request options."""
|
378
|
+
|
379
|
+
if TYPE_CHECKING:
|
380
|
+
def __init__(self, type: 'Enum_Option', length: 'int') -> 'None': ...
|
381
|
+
|
382
|
+
|
383
|
+
class CGAExtension(EnumSchema[Enum_CGAExtension]):
|
384
|
+
"""Header schema for CGA extensions."""
|
385
|
+
|
386
|
+
__default__ = lambda: UnknownExtension
|
387
|
+
|
388
|
+
#: Extension type.
|
389
|
+
type: 'Enum_CGAExtension' = EnumField(length=2, namespace=Enum_CGAExtension)
|
390
|
+
#: Extension data length.
|
391
|
+
length: 'int' = UInt16Field()
|
392
|
+
|
393
|
+
|
394
|
+
@schema_final
|
395
|
+
class UnknownExtension(CGAExtension):
|
396
|
+
"""Header schema for unknown CGA extensions."""
|
397
|
+
|
398
|
+
#: Extension data.
|
399
|
+
data: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
|
400
|
+
|
401
|
+
if TYPE_CHECKING:
|
402
|
+
def __init__(self, type: 'Enum_CGAExtension', length: 'int', data: 'bytes') -> 'None': ...
|
403
|
+
|
404
|
+
|
405
|
+
@schema_final
|
406
|
+
class MultiPrefixExtension(CGAExtension, code=Enum_CGAExtension.Multi_Prefix):
|
407
|
+
"""Header schema for Multi-Prefix CGA extensions."""
|
408
|
+
|
409
|
+
#: Flags.
|
410
|
+
flags: 'MultiPrefixExtensionFlags' = BitField(length=4, namespace={
|
411
|
+
'P': (0, 1),
|
412
|
+
})
|
413
|
+
#: Prefixes.
|
414
|
+
prefixes: 'list[int]' = ListField(
|
415
|
+
length=lambda pkt: pkt['length'] - 4,
|
416
|
+
item_type=UInt64Field(),
|
417
|
+
)
|
418
|
+
|
419
|
+
if TYPE_CHECKING:
|
420
|
+
def __init__(self, type: 'Enum_CGAExtension', length: 'int', flags: 'MultiPrefixExtensionFlags', prefixes: 'list[int]') -> 'None': ...
|
421
|
+
|
422
|
+
|
423
|
+
@schema_final
|
424
|
+
class CGAParameter(Schema):
|
425
|
+
"""Header schema for CGA Parameters."""
|
426
|
+
|
427
|
+
#: Modifier.
|
428
|
+
modifier: 'Enum_CGAType' = EnumField(length=16, namespace=Enum_CGAType)
|
429
|
+
#: Subnet prefix.
|
430
|
+
prefix: 'int' = UInt64Field()
|
431
|
+
#: Collision count.
|
432
|
+
collision_count: 'int' = UInt8Field()
|
433
|
+
#: Public key length test.
|
434
|
+
public_key_test: 'ANSIKeyLengthTest' = ForwardMatchField(BitField(length=2, namespace={
|
435
|
+
'len': (8, 8),
|
436
|
+
}))
|
437
|
+
#: Public key (ASN.1 encoded).
|
438
|
+
public_key: 'bytes' = BytesField(length=lambda pkt: pkt['public_key_test']['len'] + 2) # 2 bytes for type & length
|
439
|
+
#: Extension fields.
|
440
|
+
extensions: 'list[CGAExtension]' = OptionField(
|
441
|
+
length=lambda pkt: pkt['length'] - 25 - len(pkt['public_key']),
|
442
|
+
base_schema=CGAExtension,
|
443
|
+
type_name='type',
|
444
|
+
registry=CGAExtension.registry,
|
445
|
+
eool=None,
|
446
|
+
)
|
447
|
+
|
448
|
+
if TYPE_CHECKING:
|
449
|
+
def __init__(self, modifier: 'Enum_CGAType', prefix: 'int', collision_count: 'int', public_key: 'bytes',
|
450
|
+
extensions: 'list[CGAExtension | bytes]') -> 'None': ...
|
451
|
+
|
452
|
+
|
453
|
+
@schema_final
|
454
|
+
class CGAParametersOption(Option, code=Enum_Option.CGA_Parameters):
|
455
|
+
"""Header schema for CGA Parameters options."""
|
456
|
+
|
457
|
+
#: CGA parameters, c.f., :rfc:`3972`.
|
458
|
+
parameters: 'list[CGAParameter]' = ListField(
|
459
|
+
length=lambda pkt: pkt['length'],
|
460
|
+
item_type=SchemaField(schema=CGAParameter),
|
461
|
+
)
|
462
|
+
|
463
|
+
if TYPE_CHECKING:
|
464
|
+
def __init__(self, type: 'Enum_Option', length: 'int', parameters: 'list[CGAParameter | bytes]') -> 'None': ...
|
465
|
+
|
466
|
+
|
467
|
+
@schema_final
|
468
|
+
class SignatureOption(Option, code=Enum_Option.Signature):
|
469
|
+
"""Header schema for MH Signature options."""
|
470
|
+
|
471
|
+
#: Signature.
|
472
|
+
signature: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
|
473
|
+
|
474
|
+
if TYPE_CHECKING:
|
475
|
+
def __init__(self, type: 'Enum_Option', length: 'int', signature: 'bytes') -> 'None': ...
|
476
|
+
|
477
|
+
|
478
|
+
@schema_final
|
479
|
+
class PermanentHomeKeygenTokenOption(Option, code=Enum_Option.Permanent_Home_Keygen_Token):
|
480
|
+
"""Header schema for Permanent Home Keygen Token options."""
|
481
|
+
|
482
|
+
#: Permanent home keygen token.
|
483
|
+
token: 'bytes' = BytesField(length=lambda pkt: pkt['length'])
|
484
|
+
|
485
|
+
if TYPE_CHECKING:
|
486
|
+
def __init__(self, type: 'Enum_Option', length: 'int', token: 'bytes') -> 'None': ...
|
487
|
+
|
488
|
+
|
489
|
+
@schema_final
|
490
|
+
class CareofTestInitOption(Option, code=Enum_Option.Care_of_Test_Init):
|
491
|
+
"""Header schema for MH Care-of Test Init options."""
|
492
|
+
|
493
|
+
if TYPE_CHECKING:
|
494
|
+
def __init__(self, type: 'Enum_Option', length: 'int') -> 'None': ...
|
495
|
+
|
496
|
+
|
497
|
+
@schema_final
|
498
|
+
class CareofTestOption(Option, code=Enum_Option.Care_of_Test):
|
499
|
+
"""Header schema for MH Care-of Test options."""
|
500
|
+
|
501
|
+
#: Care-of keygen token.
|
502
|
+
token: 'bytes' = BytesField(length=8)
|
503
|
+
|
504
|
+
if TYPE_CHECKING:
|
505
|
+
def __init__(self, type: 'Enum_Option', length: 'int', token: 'bytes') -> 'None': ...
|
506
|
+
|
507
|
+
|
508
|
+
# TODO: Implement other options.
|
509
|
+
|
510
|
+
|
511
|
+
class Packet(EnumSchema[Enum_Packet]):
|
512
|
+
"""Header schema for MH packet data."""
|
513
|
+
|
514
|
+
__default__ = lambda: UnknownMessage
|
515
|
+
|
516
|
+
|
517
|
+
@schema_final
|
518
|
+
class UnknownMessage(Packet):
|
519
|
+
"""Header schema for MH unknown message type."""
|
520
|
+
|
521
|
+
#: Message data.
|
522
|
+
data: 'bytes' = BytesField(length=lambda pkt: pkt['__length__'])
|
523
|
+
|
524
|
+
if TYPE_CHECKING:
|
525
|
+
def __init__(self, data: 'bytes') -> 'None': ...
|
526
|
+
|
527
|
+
|
528
|
+
@schema_final
|
529
|
+
class BindingRefreshRequestMessage(Packet, code=Enum_Packet.Binding_Refresh_Request):
|
530
|
+
"""Header schema for MH Binding Refresh Request (BRR) message."""
|
531
|
+
|
532
|
+
#: Reserved.
|
533
|
+
reserved: 'bytes' = PaddingField(length=2)
|
534
|
+
#: Mobility options.
|
535
|
+
options: 'list[Option]' = OptionField(
|
536
|
+
length=lambda pkt: pkt['__length__'],
|
537
|
+
base_schema=Option,
|
538
|
+
type_name='type',
|
539
|
+
registry=Option.registry,
|
540
|
+
eool=None,
|
541
|
+
)
|
542
|
+
|
543
|
+
if TYPE_CHECKING:
|
544
|
+
def __init__(self, options: 'list[Option | bytes]') -> 'None': ...
|
545
|
+
|
546
|
+
|
547
|
+
@schema_final
|
548
|
+
class HomeTestInitMessage(Packet, code=Enum_Packet.Home_Test_Init):
|
549
|
+
"""Header schema for MH Home Test Init (HoTI) message."""
|
550
|
+
|
551
|
+
#: Reserved.
|
552
|
+
reserved: 'bytes' = PaddingField(length=2)
|
553
|
+
#: Home init cookie.
|
554
|
+
cookie: 'bytes' = BytesField(length=8)
|
555
|
+
#: Mobility options.
|
556
|
+
options: 'list[Option]' = OptionField(
|
557
|
+
length=lambda pkt: pkt['__length__'],
|
558
|
+
base_schema=Option,
|
559
|
+
type_name='type',
|
560
|
+
registry=Option.registry,
|
561
|
+
eool=None,
|
562
|
+
)
|
563
|
+
|
564
|
+
if TYPE_CHECKING:
|
565
|
+
def __init__(self, cookie: 'bytes', options: 'list[Option | bytes]') -> 'None': ...
|
566
|
+
|
567
|
+
|
568
|
+
@schema_final
|
569
|
+
class CareofTestInitMessage(Packet, code=Enum_Packet.Care_of_Test_Init):
|
570
|
+
"""Header schema for MH Care-of Test Init (CoTI) messages."""
|
571
|
+
|
572
|
+
#: Reserved.
|
573
|
+
reserved: 'bytes' = PaddingField(length=2)
|
574
|
+
#: Care-of init cookie.
|
575
|
+
cookie: 'bytes' = BytesField(length=8)
|
576
|
+
#: Mobility options.
|
577
|
+
options: 'list[Option]' = OptionField(
|
578
|
+
length=lambda pkt: pkt['__length__'],
|
579
|
+
base_schema=Option,
|
580
|
+
type_name='type',
|
581
|
+
registry=Option.registry,
|
582
|
+
eool=None,
|
583
|
+
)
|
584
|
+
|
585
|
+
if TYPE_CHECKING:
|
586
|
+
def __init__(self, cookie: 'bytes', options: 'list[Option | bytes]') -> 'None': ...
|
587
|
+
|
588
|
+
|
589
|
+
@schema_final
|
590
|
+
class HomeTestMessage(Packet, code=Enum_Packet.Home_Test):
|
591
|
+
"""Header schema for MH Home Test (HoT) message."""
|
592
|
+
|
593
|
+
#: Home nonce index.
|
594
|
+
nonce_index: 'int' = UInt16Field()
|
595
|
+
#: Home init cookie.
|
596
|
+
cookie: 'bytes' = BytesField(length=8)
|
597
|
+
#: Home keygen token.
|
598
|
+
token: 'bytes' = BytesField(length=8)
|
599
|
+
#: Mobility options.
|
600
|
+
options: 'list[Option]' = OptionField(
|
601
|
+
length=lambda pkt: pkt['__length__'],
|
602
|
+
base_schema=Option,
|
603
|
+
type_name='type',
|
604
|
+
registry=Option.registry,
|
605
|
+
eool=None,
|
606
|
+
)
|
607
|
+
|
608
|
+
if TYPE_CHECKING:
|
609
|
+
def __init__(self, nonce_index: 'int', cookie: 'bytes', token: 'bytes',
|
610
|
+
options: 'list[Option | bytes]') -> 'None': ...
|
611
|
+
|
612
|
+
|
613
|
+
@schema_final
|
614
|
+
class CareofTestMessage(Packet, code=Enum_Packet.Care_of_Test):
|
615
|
+
"""Header schema for MH Care-of Test (CoT) message."""
|
616
|
+
|
617
|
+
#: Care-of nonce index.
|
618
|
+
nonce_index: 'int' = UInt16Field()
|
619
|
+
#: Care-of init cookie.
|
620
|
+
cookie: 'bytes' = BytesField(length=8)
|
621
|
+
#: Care-of keygen token.
|
622
|
+
token: 'bytes' = BytesField(length=8)
|
623
|
+
#: Mobility options.
|
624
|
+
options: 'list[Option]' = OptionField(
|
625
|
+
length=lambda pkt: pkt['__length__'],
|
626
|
+
base_schema=Option,
|
627
|
+
type_name='type',
|
628
|
+
registry=Option.registry,
|
629
|
+
eool=None,
|
630
|
+
)
|
631
|
+
|
632
|
+
if TYPE_CHECKING:
|
633
|
+
def __init__(self, nonce_index: 'int', cookie: 'bytes', token: 'bytes',
|
634
|
+
options: 'list[Option | bytes]') -> 'None': ...
|
635
|
+
|
636
|
+
|
637
|
+
@schema_final
|
638
|
+
class BindingUpdateMessage(Packet, code=Enum_Packet.Binding_Update):
|
639
|
+
"""Header schema for MH Binding Update (BU) messages."""
|
640
|
+
|
641
|
+
#: Sequence number.
|
642
|
+
seq: 'int' = UInt16Field()
|
643
|
+
#: Flags.
|
644
|
+
flags: 'BindingUpdateMessageFlags' = BitField(length=2, namespace={
|
645
|
+
'A': (0, 1),
|
646
|
+
'H': (1, 1),
|
647
|
+
'L': (2, 1),
|
648
|
+
'K': (3, 1),
|
649
|
+
})
|
650
|
+
#: Lifetime. One time unit is 4 seconds.
|
651
|
+
lifetime: 'int' = UInt16Field()
|
652
|
+
#: Mobility options.
|
653
|
+
options: 'list[Option]' = OptionField(
|
654
|
+
length=lambda pkt: pkt['__length__'],
|
655
|
+
base_schema=Option,
|
656
|
+
type_name='type',
|
657
|
+
registry=Option.registry,
|
658
|
+
eool=None,
|
659
|
+
)
|
660
|
+
|
661
|
+
if TYPE_CHECKING:
|
662
|
+
def __init__(self, seq: 'int', flags: 'BindingUpdateMessageFlags',
|
663
|
+
lifetime: 'int', options: 'list[Option | bytes]') -> 'None': ...
|
664
|
+
|
665
|
+
|
666
|
+
@schema_final
|
667
|
+
class BindingAcknowledgementMessage(Packet, code=Enum_Packet.Binding_Acknowledgement):
|
668
|
+
"""Header schema for MH Binding Acknowledgement (BA) messages."""
|
669
|
+
|
670
|
+
#: Status.
|
671
|
+
status: 'Enum_StatusCode' = EnumField(length=1, namespace=Enum_StatusCode)
|
672
|
+
#: Flags.
|
673
|
+
flags: 'BindingAcknowledgementMessageFlags' = BitField(length=1, namespace={
|
674
|
+
'K': (0, 1),
|
675
|
+
})
|
676
|
+
#: Sequence number.
|
677
|
+
seq: 'int' = UInt16Field()
|
678
|
+
#: Lifetime. One time unit is 4 seconds.
|
679
|
+
lifetime: 'int' = UInt16Field()
|
680
|
+
#: Mobility options.
|
681
|
+
options: 'list[Option]' = OptionField(
|
682
|
+
length=lambda pkt: pkt['__length__'],
|
683
|
+
base_schema=Option,
|
684
|
+
type_name='type',
|
685
|
+
registry=Option.registry,
|
686
|
+
eool=None,
|
687
|
+
)
|
688
|
+
|
689
|
+
if TYPE_CHECKING:
|
690
|
+
def __init__(self, status: 'Enum_StatusCode', flags: 'BindingAcknowledgementMessageFlags',
|
691
|
+
seq: 'int', lifetime: 'int', options: 'list[Option | bytes]') -> 'None': ...
|
692
|
+
|
693
|
+
|
694
|
+
@schema_final
|
695
|
+
class BindingErrorMessage(Packet, code=Enum_Packet.Binding_Error):
|
696
|
+
"""Header schema for MH Binding Error (BE) messages."""
|
697
|
+
|
698
|
+
#: Status.
|
699
|
+
status: 'Enum_BindingError' = EnumField(length=1, namespace=Enum_BindingError)
|
700
|
+
#: Reserved.
|
701
|
+
reserved: 'bytes' = PaddingField(length=1)
|
702
|
+
#: Home address.
|
703
|
+
home: 'IPv6Address' = IPv6AddressField()
|
704
|
+
#: Mobility options.
|
705
|
+
options: 'list[Option]' = OptionField(
|
706
|
+
length=lambda pkt: pkt['__length__'],
|
707
|
+
base_schema=Option,
|
708
|
+
type_name='type',
|
709
|
+
registry=Option.registry,
|
710
|
+
eool=None,
|
711
|
+
)
|
712
|
+
|
713
|
+
if TYPE_CHECKING:
|
714
|
+
def __init__(self, status: 'Enum_BindingError', home: 'IPv6Address | str | int | bytes',
|
715
|
+
options: 'list[Option | bytes]') -> 'None': ...
|
716
|
+
|
717
|
+
|
718
|
+
# TODO: Implement other message types.
|