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,342 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""OSPF - Open Shortest Path First
|
3
|
+
=====================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.protocols.link.ospf
|
6
|
+
|
7
|
+
:mod:`pcapkit.protocols.link.ospf` contains
|
8
|
+
:class:`~pcapkit.protocols.link.ospf.OSPF` only,
|
9
|
+
which implements extractor for Open Shortest Path
|
10
|
+
First (OSPF) [*]_, whose structure is described
|
11
|
+
as below:
|
12
|
+
|
13
|
+
.. table::
|
14
|
+
|
15
|
+
====== ===== ================== ===============================
|
16
|
+
Octets Bits Name Description
|
17
|
+
====== ===== ================== ===============================
|
18
|
+
0 0 ``ospf.version`` Version Number
|
19
|
+
------ ----- ------------------ -------------------------------
|
20
|
+
0 0 ``ospf.type`` Type
|
21
|
+
------ ----- ------------------ -------------------------------
|
22
|
+
0 1 ``ospf.len`` Packet Length (header included)
|
23
|
+
------ ----- ------------------ -------------------------------
|
24
|
+
0 2 ``ospf.router_id`` Router ID
|
25
|
+
------ ----- ------------------ -------------------------------
|
26
|
+
0 4 ``ospf.area_id`` Area ID
|
27
|
+
------ ----- ------------------ -------------------------------
|
28
|
+
0 6 ``ospf.chksum`` Checksum
|
29
|
+
------ ----- ------------------ -------------------------------
|
30
|
+
0 7 ``ospf.autype`` Authentication Type
|
31
|
+
------ ----- ------------------ -------------------------------
|
32
|
+
1 8 ``ospf.auth`` Authentication
|
33
|
+
====== ===== ================== ===============================
|
34
|
+
|
35
|
+
.. [*] https://en.wikipedia.org/wiki/Open_Shortest_Path_First
|
36
|
+
|
37
|
+
"""
|
38
|
+
import ipaddress
|
39
|
+
import re
|
40
|
+
from typing import TYPE_CHECKING, cast
|
41
|
+
|
42
|
+
from pcapkit.const.ospf.authentication import Authentication as Enum_Authentication
|
43
|
+
from pcapkit.const.ospf.packet import Packet as Enum_Packet
|
44
|
+
from pcapkit.protocols.data.link.ospf import OSPF as Data_OSPF
|
45
|
+
from pcapkit.protocols.data.link.ospf import \
|
46
|
+
CrytographicAuthentication as Data_CrytographicAuthentication
|
47
|
+
from pcapkit.protocols.link.link import Link
|
48
|
+
from pcapkit.protocols.schema.link.ospf import OSPF as Schema_OSPF
|
49
|
+
from pcapkit.protocols.schema.link.ospf import \
|
50
|
+
CrytographicAuthentication as Schema_CrytographicAuthentication
|
51
|
+
from pcapkit.utilities.exceptions import ProtocolError, UnsupportedCall
|
52
|
+
|
53
|
+
if TYPE_CHECKING:
|
54
|
+
from enum import IntEnum as StdlibEnum
|
55
|
+
from ipaddress import IPv4Address
|
56
|
+
from typing import Any, NoReturn, Optional, Type
|
57
|
+
|
58
|
+
from aenum import IntEnum as AenumEnum
|
59
|
+
from typing_extensions import Literal
|
60
|
+
|
61
|
+
from pcapkit.protocols.protocol import ProtocolBase as Protocol
|
62
|
+
from pcapkit.protocols.schema.schema import Schema
|
63
|
+
|
64
|
+
__all__ = ['OSPF']
|
65
|
+
|
66
|
+
# Ethernet address pattern
|
67
|
+
PAT_MAC_ADDR = re.compile(rb'(?i)(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}')
|
68
|
+
|
69
|
+
|
70
|
+
class OSPF(Link[Data_OSPF, Schema_OSPF],
|
71
|
+
schema=Schema_OSPF, data=Data_OSPF):
|
72
|
+
"""This class implements Open Shortest Path First."""
|
73
|
+
|
74
|
+
##########################################################################
|
75
|
+
# Properties.
|
76
|
+
##########################################################################
|
77
|
+
|
78
|
+
@property
|
79
|
+
def name(self) -> 'str':
|
80
|
+
"""Name of current protocol."""
|
81
|
+
return f'Open Shortest Path First version {self._info.version}'
|
82
|
+
|
83
|
+
@property
|
84
|
+
def alias(self) -> 'str':
|
85
|
+
"""Acronym of current protocol."""
|
86
|
+
return f'OSPFv{self._info.version}'
|
87
|
+
|
88
|
+
@property
|
89
|
+
def length(self) -> 'Literal[24]':
|
90
|
+
"""Header length of current protocol."""
|
91
|
+
return 24
|
92
|
+
|
93
|
+
@property
|
94
|
+
def type(self) -> 'Enum_Packet':
|
95
|
+
"""OSPF packet type."""
|
96
|
+
return self._info.type
|
97
|
+
|
98
|
+
##########################################################################
|
99
|
+
# Methods.
|
100
|
+
##########################################################################
|
101
|
+
|
102
|
+
def read(self, length: 'Optional[int]' = None, **kwargs: 'Any') -> 'Data_OSPF':
|
103
|
+
"""Read Open Shortest Path First.
|
104
|
+
|
105
|
+
Structure of OSPF header [:rfc:`2328`]:
|
106
|
+
|
107
|
+
.. code-block:: text
|
108
|
+
|
109
|
+
0 1 2 3
|
110
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
111
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
112
|
+
| Version # | Type | Packet length |
|
113
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
114
|
+
| Router ID |
|
115
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
116
|
+
| Area ID |
|
117
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
118
|
+
| Checksum | AuType |
|
119
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
120
|
+
| Authentication |
|
121
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
122
|
+
| Authentication |
|
123
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
124
|
+
|
125
|
+
Args:
|
126
|
+
length: Length of packet data.
|
127
|
+
**kwargs: Arbitrary keyword arguments.
|
128
|
+
|
129
|
+
Returns:
|
130
|
+
Parsed packet data.
|
131
|
+
|
132
|
+
"""
|
133
|
+
schema = self.__schema__
|
134
|
+
|
135
|
+
ospf = Data_OSPF(
|
136
|
+
version=schema.version,
|
137
|
+
type=schema.type,
|
138
|
+
len=schema.length,
|
139
|
+
router_id=schema.router_id,
|
140
|
+
area_id=schema.area_id,
|
141
|
+
chksum=schema.checksum,
|
142
|
+
autype=schema.auth_type,
|
143
|
+
)
|
144
|
+
length = schema.length if schema.length else (length or len(self))
|
145
|
+
|
146
|
+
if ospf.autype == Enum_Authentication.Cryptographic_authentication:
|
147
|
+
ospf.__update__([
|
148
|
+
('auth', self._read_encrypt_auth(
|
149
|
+
cast('Schema_CrytographicAuthentication', schema.auth_data),
|
150
|
+
)),
|
151
|
+
])
|
152
|
+
else:
|
153
|
+
ospf.__update__([
|
154
|
+
('auth', cast('bytes', schema.auth_data)),
|
155
|
+
])
|
156
|
+
return self._decode_next_layer(ospf, length - self.length)
|
157
|
+
|
158
|
+
def make(self,
|
159
|
+
version: 'int' = 2,
|
160
|
+
type: 'Enum_Packet | StdlibEnum | AenumEnum | str | int' = Enum_Packet.Hello,
|
161
|
+
type_default: 'Optional[int]' = None,
|
162
|
+
type_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
|
163
|
+
type_reversed: 'bool' = False,
|
164
|
+
router_id: 'IPv4Address | str | bytes | bytearray' = '0.0.0.0', # nosec: B104
|
165
|
+
area_id: 'IPv4Address | str | bytes | bytearray' = '0.0.0.0', # nosec: B104
|
166
|
+
checksum: 'bytes' = b'\x00\x00',
|
167
|
+
auth_type: 'Enum_Authentication | StdlibEnum | AenumEnum | str | int' = Enum_Authentication.No_Authentication,
|
168
|
+
auth_type_default: 'Optional[int]' = None,
|
169
|
+
auth_type_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
|
170
|
+
auth_type_reversed: 'bool' = False,
|
171
|
+
auth_data: 'bytes | Schema_CrytographicAuthentication | Data_CrytographicAuthentication' = b'\x00\x00\x00\x00\x00\x00\x00\x00',
|
172
|
+
payload: 'bytes | Protocol | Schema' = b'',
|
173
|
+
**kwargs: 'Any') -> 'Schema_OSPF':
|
174
|
+
"""Make (construct) packet data.
|
175
|
+
|
176
|
+
Args:
|
177
|
+
version: OSPF version number.
|
178
|
+
type: OSPF packet type.
|
179
|
+
type_default: Default value for ``type`` if not specified.
|
180
|
+
type_namespace: Namespace for ``type``.
|
181
|
+
type_reversed: Reverse namespace for ``type``.
|
182
|
+
router_id: Router ID.
|
183
|
+
area_id: Area ID.
|
184
|
+
checksum: Checksum.
|
185
|
+
auth_type: Authentication type.
|
186
|
+
auth_type_default: Default value for ``auth_type`` if not specified.
|
187
|
+
auth_type_namespace: Namespace for ``auth_type``.
|
188
|
+
auth_type_reversed: Reverse namespace for ``auth_type``.
|
189
|
+
auth_data: Authentication data.
|
190
|
+
payload: Payload data.
|
191
|
+
**kwargs: Arbitrary keyword arguments.
|
192
|
+
|
193
|
+
Returns:
|
194
|
+
Constructed packet data.
|
195
|
+
|
196
|
+
"""
|
197
|
+
type_ = self._make_index(type, type_default, namespace=type_namespace,
|
198
|
+
reversed=type_reversed, pack=False)
|
199
|
+
auth_type_ = self._make_index(auth_type, auth_type_default, namespace=auth_type_namespace,
|
200
|
+
reversed=auth_type_reversed, pack=False)
|
201
|
+
|
202
|
+
if auth_type_ == Enum_Authentication.Cryptographic_authentication:
|
203
|
+
data = self._make_encrypt_auth(auth_data)
|
204
|
+
else:
|
205
|
+
if not isinstance(auth_data, bytes):
|
206
|
+
raise ProtocolError(f'OSPF: invalid type for authentication data: {auth_data!r}')
|
207
|
+
data = auth_data
|
208
|
+
|
209
|
+
return Schema_OSPF(
|
210
|
+
version=version,
|
211
|
+
type=type_, # type: ignore[arg-type]
|
212
|
+
length=24 + len(payload),
|
213
|
+
router_id=router_id,
|
214
|
+
area_id=area_id,
|
215
|
+
checksum=checksum,
|
216
|
+
auth_type=auth_type_, # type: ignore[arg-type]
|
217
|
+
auth_data=data,
|
218
|
+
payload=payload,
|
219
|
+
)
|
220
|
+
|
221
|
+
##########################################################################
|
222
|
+
# Data models.
|
223
|
+
##########################################################################
|
224
|
+
|
225
|
+
def __length_hint__(self) -> 'Literal[24]':
|
226
|
+
"""Return an estimated length for the object."""
|
227
|
+
return 24
|
228
|
+
|
229
|
+
@classmethod
|
230
|
+
def __index__(cls) -> 'NoReturn': # pylint: disable=invalid-index-returned
|
231
|
+
"""Numeral registry index of the protocol.
|
232
|
+
|
233
|
+
Raises:
|
234
|
+
UnsupportedCall: This protocol has no registry entry.
|
235
|
+
|
236
|
+
"""
|
237
|
+
raise UnsupportedCall(f'{cls.__name__!r} object cannot be interpreted as an integer')
|
238
|
+
|
239
|
+
##########################################################################
|
240
|
+
# Utilities.
|
241
|
+
##########################################################################
|
242
|
+
|
243
|
+
@classmethod
|
244
|
+
def _make_data(cls, data: 'Data_OSPF') -> 'dict[str, Any]': # type: ignore[override]
|
245
|
+
"""Create key-value pairs from ``data`` for protocol construction.
|
246
|
+
|
247
|
+
Args:
|
248
|
+
data: protocol data
|
249
|
+
|
250
|
+
Returns:
|
251
|
+
Key-value pairs for protocol construction.
|
252
|
+
|
253
|
+
"""
|
254
|
+
return {
|
255
|
+
'version': data.version,
|
256
|
+
'type': data.type,
|
257
|
+
'router_id': data.router_id,
|
258
|
+
'area_id': data.area_id,
|
259
|
+
'checksum': data.chksum,
|
260
|
+
'auth_type': data.autype,
|
261
|
+
'auth_data': data.auth,
|
262
|
+
'payload': cls._make_payload(data)
|
263
|
+
}
|
264
|
+
|
265
|
+
def _read_id_numbers(self, id: 'bytes') -> 'IPv4Address':
|
266
|
+
"""Read router and area IDs.
|
267
|
+
|
268
|
+
Args:
|
269
|
+
id: ID bytes.
|
270
|
+
|
271
|
+
Returns:
|
272
|
+
Parsed IDs as an IPv4 address.
|
273
|
+
|
274
|
+
"""
|
275
|
+
#_byte = self._read_fileng(4)
|
276
|
+
#_addr = '.'.join(str(_) for _ in _byte)
|
277
|
+
return ipaddress.ip_address(id) # type: ignore[return-value]
|
278
|
+
|
279
|
+
def _make_id_numbers(self, id: 'IPv4Address | str | bytes | bytearray') -> 'bytes':
|
280
|
+
"""Make router and area IDs.
|
281
|
+
|
282
|
+
Args:
|
283
|
+
id: ID.
|
284
|
+
|
285
|
+
Returns:
|
286
|
+
ID bytes.
|
287
|
+
|
288
|
+
"""
|
289
|
+
return ipaddress.ip_address(id).packed
|
290
|
+
|
291
|
+
def _read_encrypt_auth(self, schema: 'Schema_CrytographicAuthentication') -> 'Data_CrytographicAuthentication':
|
292
|
+
"""Read Authentication field when Cryptographic Authentication is employed,
|
293
|
+
i.e. :attr:`~OSPF.autype` is ``2``.
|
294
|
+
|
295
|
+
Structure of Cryptographic Authentication [:rfc:`2328`]:
|
296
|
+
|
297
|
+
.. code-block:: text
|
298
|
+
|
299
|
+
0 1 2 3
|
300
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
301
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
302
|
+
| 0 | Key ID | Auth Data Len |
|
303
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
304
|
+
| Cryptographic sequence number |
|
305
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
306
|
+
|
307
|
+
Args:
|
308
|
+
schema: parsed authentication data
|
309
|
+
|
310
|
+
Returns:
|
311
|
+
Parsed packet data.
|
312
|
+
|
313
|
+
"""
|
314
|
+
auth = Data_CrytographicAuthentication(
|
315
|
+
key_id=schema.key_id,
|
316
|
+
len=schema.len,
|
317
|
+
seq=schema.seq,
|
318
|
+
)
|
319
|
+
return auth
|
320
|
+
|
321
|
+
def _make_encrypt_auth(self,
|
322
|
+
auth_data: 'bytes | Schema_CrytographicAuthentication | Data_CrytographicAuthentication' # pylint: disable=line-too-long
|
323
|
+
) -> 'bytes | Schema_CrytographicAuthentication':
|
324
|
+
"""Make Authentication field when Cryptographic Authentication is employed.
|
325
|
+
|
326
|
+
Args:
|
327
|
+
auth_type: Authentication type.
|
328
|
+
auth_data: Authentication data.
|
329
|
+
|
330
|
+
Returns:
|
331
|
+
Authentication bytes.
|
332
|
+
|
333
|
+
"""
|
334
|
+
if isinstance(auth_data, (Schema_CrytographicAuthentication, bytes)):
|
335
|
+
return auth_data
|
336
|
+
if isinstance(auth_data, Data_CrytographicAuthentication):
|
337
|
+
return Schema_CrytographicAuthentication(
|
338
|
+
key_id=auth_data.key_id,
|
339
|
+
len=auth_data.len,
|
340
|
+
seq=auth_data.seq,
|
341
|
+
)
|
342
|
+
raise ProtocolError(f'OSPF: invalid type for auth_data: {auth_data!r}')
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""RARP/DRARP - (Dynamic) Reverse Address Resolution Protocol
|
3
|
+
================================================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.protocols.link.rarp
|
6
|
+
|
7
|
+
:mod:`pcapkit.protocols.link.rarp` contains
|
8
|
+
:class:`~pcapkit.protocols.link.rarp.RARP` only,
|
9
|
+
which implements extractor for (Dynamic) Reverse
|
10
|
+
Address Resolution Protocol (RARP/DRARP) [*]_,
|
11
|
+
whose structure is described as below:
|
12
|
+
|
13
|
+
====== ========= ========================= =========================
|
14
|
+
Octets Bits Name Description
|
15
|
+
====== ========= ========================= =========================
|
16
|
+
0 0 ``rarp.htype`` Hardware Type
|
17
|
+
2 16 ``rarp.ptype`` Protocol Type
|
18
|
+
4 32 ``rarp.hlen`` Hardware Address Length
|
19
|
+
5 40 ``rarp.plen`` Protocol Address Length
|
20
|
+
6 48 ``rarp.oper`` Operation
|
21
|
+
8 64 ``rarp.sha`` Sender Hardware Address
|
22
|
+
14 112 ``rarp.spa`` Sender Protocol Address
|
23
|
+
18 144 ``rarp.tha`` Target Hardware Address
|
24
|
+
24 192 ``rarp.tpa`` Target Protocol Address
|
25
|
+
====== ========= ========================= =========================
|
26
|
+
|
27
|
+
.. [*] http://en.wikipedia.org/wiki/Address_Resolution_Protocol
|
28
|
+
|
29
|
+
"""
|
30
|
+
from typing import TYPE_CHECKING
|
31
|
+
|
32
|
+
from pcapkit.const.reg.ethertype import EtherType as Enum_EtherType
|
33
|
+
from pcapkit.protocols.data.link.arp import ARP as Data_ARP
|
34
|
+
from pcapkit.protocols.link.arp import ARP
|
35
|
+
from pcapkit.protocols.schema.link.arp import ARP as Schema_ARP
|
36
|
+
|
37
|
+
if TYPE_CHECKING:
|
38
|
+
from typing_extensions import Literal
|
39
|
+
|
40
|
+
__all__ = ['RARP', 'DRARP']
|
41
|
+
|
42
|
+
|
43
|
+
class RARP(ARP, schema=Schema_ARP, data=Data_ARP): # pylint: disable=abstract-method
|
44
|
+
"""This class implements Reverse Address Resolution Protocol."""
|
45
|
+
|
46
|
+
##########################################################################
|
47
|
+
# Methods.
|
48
|
+
##########################################################################
|
49
|
+
|
50
|
+
@classmethod
|
51
|
+
def id(cls) -> 'tuple[Literal["RARP"], Literal["DRARP"]]': # type: ignore[override]
|
52
|
+
"""Index ID of the protocol."""
|
53
|
+
return ('RARP', 'DRARP')
|
54
|
+
|
55
|
+
##########################################################################
|
56
|
+
# Data models.
|
57
|
+
##########################################################################
|
58
|
+
|
59
|
+
@classmethod
|
60
|
+
def __index__(cls) -> 'Enum_EtherType': # pylint: disable=invalid-index-returned
|
61
|
+
"""Numeral registry index of the protocol.
|
62
|
+
|
63
|
+
Returns:
|
64
|
+
Numeral registry index of the protocol in `IANA`_.
|
65
|
+
|
66
|
+
.. _IANA: https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml
|
67
|
+
|
68
|
+
"""
|
69
|
+
return Enum_EtherType.Reverse_Address_Resolution_Protocol # type: ignore[return-value]
|
70
|
+
|
71
|
+
|
72
|
+
class DRARP(RARP):
|
73
|
+
"""This class implements Dynamic Reverse Address Resolution Protocol."""
|
74
|
+
|
75
|
+
##########################################################################
|
76
|
+
# Methods.
|
77
|
+
##########################################################################
|
78
|
+
|
79
|
+
@classmethod
|
80
|
+
def id(cls) -> 'tuple[Literal["DRARP"]]': # type: ignore[override]
|
81
|
+
"""Index ID of the protocol."""
|
82
|
+
return ('DRARP',)
|
@@ -0,0 +1,225 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""VLAN - 802.1Q Customer VLAN Tag Type
|
3
|
+
==========================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.protocols.link.vlan
|
6
|
+
|
7
|
+
:mod:`pcapkit.protocols.link.vlan` contains
|
8
|
+
:class:`~pcapkit.protocols.link.vlan.VLAN`
|
9
|
+
only, which implements extractor for 802.1Q
|
10
|
+
Customer VLAN Tag Type [*]_, whose structure is
|
11
|
+
described as below:
|
12
|
+
|
13
|
+
======= ========= ====================== =============================
|
14
|
+
Octets Bits Name Description
|
15
|
+
======= ========= ====================== =============================
|
16
|
+
1 0 ``vlan.tci`` Tag Control Information
|
17
|
+
1 0 ``vlan.tci.pcp`` Priority Code Point
|
18
|
+
1 3 ``vlan.tci.dei`` Drop Eligible Indicator
|
19
|
+
1 4 ``vlan.tci.vid`` VLAN Identifier
|
20
|
+
3 24 ``vlan.type`` Protocol (Internet Layer)
|
21
|
+
======= ========= ====================== =============================
|
22
|
+
|
23
|
+
.. [*] https://en.wikipedia.org/wiki/IEEE_802.1Q
|
24
|
+
|
25
|
+
"""
|
26
|
+
from typing import TYPE_CHECKING
|
27
|
+
|
28
|
+
from pcapkit.const.reg.ethertype import EtherType as Enum_EtherType
|
29
|
+
from pcapkit.const.vlan.priority_level import PriorityLevel as Enum_PriorityLevel
|
30
|
+
from pcapkit.protocols.data.link.vlan import TCI as Data_TCI
|
31
|
+
from pcapkit.protocols.data.link.vlan import VLAN as Data_VLAN
|
32
|
+
from pcapkit.protocols.link.link import Link
|
33
|
+
from pcapkit.protocols.schema.link.vlan import TCI as Schema_TCI
|
34
|
+
from pcapkit.protocols.schema.link.vlan import VLAN as Schema_VLAN
|
35
|
+
from pcapkit.utilities.exceptions import UnsupportedCall
|
36
|
+
|
37
|
+
if TYPE_CHECKING:
|
38
|
+
from enum import IntEnum as StdlibEnum
|
39
|
+
from typing import Any, NoReturn, Optional, Type
|
40
|
+
|
41
|
+
from aenum import IntEnum as AenumEnum
|
42
|
+
from typing_extensions import Literal
|
43
|
+
|
44
|
+
from pcapkit.protocols.protocol import ProtocolBase as Protocol
|
45
|
+
from pcapkit.protocols.schema.link.vlan import TCIType
|
46
|
+
from pcapkit.protocols.schema.schema import Schema
|
47
|
+
|
48
|
+
__all__ = ['VLAN']
|
49
|
+
|
50
|
+
|
51
|
+
class VLAN(Link[Data_VLAN, Schema_VLAN],
|
52
|
+
schema=Schema_VLAN, data=Data_VLAN):
|
53
|
+
"""This class implements 802.1Q Customer VLAN Tag Type."""
|
54
|
+
|
55
|
+
##########################################################################
|
56
|
+
# Properties.
|
57
|
+
##########################################################################
|
58
|
+
|
59
|
+
@property
|
60
|
+
def name(self) -> 'Literal["802.1Q Customer VLAN Tag Type"]':
|
61
|
+
"""Name of current protocol."""
|
62
|
+
return '802.1Q Customer VLAN Tag Type'
|
63
|
+
|
64
|
+
@property
|
65
|
+
def alias(self) -> 'Literal["802.1Q"]':
|
66
|
+
"""Acronym of corresponding protocol."""
|
67
|
+
return '802.1Q'
|
68
|
+
|
69
|
+
@property
|
70
|
+
def info_name(self) -> 'Literal["c_tag"]':
|
71
|
+
"""Key name of the :attr:`info` dict."""
|
72
|
+
return 'c_tag'
|
73
|
+
|
74
|
+
@property
|
75
|
+
def length(self) -> 'Literal[4]':
|
76
|
+
"""Header length of current protocol."""
|
77
|
+
return 4
|
78
|
+
|
79
|
+
@property
|
80
|
+
def protocol(self) -> 'Enum_EtherType':
|
81
|
+
"""Name of next layer protocol."""
|
82
|
+
return self._info.type
|
83
|
+
|
84
|
+
##########################################################################
|
85
|
+
# Methods.
|
86
|
+
##########################################################################
|
87
|
+
|
88
|
+
def read(self, length: 'Optional[int]' = None, **kwargs: 'Any') -> 'Data_VLAN': # pylint: disable=unused-argument
|
89
|
+
"""Read 802.1Q Customer VLAN Tag Type.
|
90
|
+
|
91
|
+
Structure of 802.1Q Customer VLAN Tag Type [`IEEE 802.1Q <https://standards.ieee.org/ieee/802.1Q/6844/>`__]:
|
92
|
+
|
93
|
+
.. code-block:: text
|
94
|
+
|
95
|
+
0 1 2 3
|
96
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
97
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
98
|
+
| TCI | |
|
99
|
+
|-------------------------------| |
|
100
|
+
| P |D| | Type |
|
101
|
+
| C |E| VID | |
|
102
|
+
| P |I| | |
|
103
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
104
|
+
|
105
|
+
Args:
|
106
|
+
length: Length of packet data.
|
107
|
+
**kwargs: Arbitrary keyword arguments.
|
108
|
+
|
109
|
+
Returns:
|
110
|
+
Parsed packet data.
|
111
|
+
|
112
|
+
"""
|
113
|
+
if length is None:
|
114
|
+
length = len(self)
|
115
|
+
schema = self.__header__
|
116
|
+
|
117
|
+
tci = schema.tci
|
118
|
+
vlan = Data_VLAN(
|
119
|
+
tci=Data_TCI(
|
120
|
+
pcp=Enum_PriorityLevel.get(tci['pcp']),
|
121
|
+
dei=bool(tci['pcp']),
|
122
|
+
vid=int(tci['vid']),
|
123
|
+
),
|
124
|
+
type=schema.type,
|
125
|
+
)
|
126
|
+
return self._decode_next_layer(vlan, schema.type, length - self.length)
|
127
|
+
|
128
|
+
def make(self,
|
129
|
+
tci: 'Optional[Schema_TCI | TCIType]' = None,
|
130
|
+
pcp: 'Enum_PriorityLevel | StdlibEnum | AenumEnum | str | int' = Enum_PriorityLevel.BE,
|
131
|
+
pcp_default: 'Optional[int]' = None,
|
132
|
+
pcp_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
|
133
|
+
pcp_reversed: 'bool' = False,
|
134
|
+
dei: 'bool' = False,
|
135
|
+
vid: 'int' = 0,
|
136
|
+
type: 'Enum_EtherType | StdlibEnum | AenumEnum | str | int' = Enum_EtherType.Internet_Protocol_version_4,
|
137
|
+
type_default: 'Optional[int]' = None,
|
138
|
+
type_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
|
139
|
+
type_reversed: 'bool' = False,
|
140
|
+
payload: 'bytes | Protocol | Schema' = b'',
|
141
|
+
**kwargs: 'Any') -> 'Schema_VLAN':
|
142
|
+
"""Make (construct) packet data.
|
143
|
+
|
144
|
+
Args:
|
145
|
+
tci: TCI field.
|
146
|
+
pcp: Priority Code Point (PCP) field.
|
147
|
+
pcp_default: Default value of PCP field.
|
148
|
+
pcp_namespace: Namespace of PCP field.
|
149
|
+
pcp_reversed: Reversed flag of PCP field.
|
150
|
+
dei: Drop Eligible Indicator (DEI) field.
|
151
|
+
vid: VLAN Identifier (VID) field.
|
152
|
+
type: EtherType field.
|
153
|
+
type_default: Default value of EtherType field.
|
154
|
+
type_namespace: Namespace of EtherType field.
|
155
|
+
type_reversed: Reversed flag of EtherType field.
|
156
|
+
payload: Payload field.
|
157
|
+
**kwargs: Arbitrary keyword arguments.
|
158
|
+
|
159
|
+
Returns:
|
160
|
+
Constructed packet data.
|
161
|
+
|
162
|
+
"""
|
163
|
+
if tci is not None:
|
164
|
+
pcp_value = tci['pcp']
|
165
|
+
dei = tci['dei'] # type: ignore[assignment]
|
166
|
+
vid = tci['vid']
|
167
|
+
else:
|
168
|
+
pcp_value = self._make_index(pcp, pcp_default, namespace=pcp_namespace,
|
169
|
+
reversed=pcp_reversed, pack=False)
|
170
|
+
|
171
|
+
type_value = self._make_index(type, type_default, namespace=type_namespace,
|
172
|
+
reversed=type_reversed, pack=False)
|
173
|
+
|
174
|
+
return Schema_VLAN(
|
175
|
+
tci={
|
176
|
+
'pcp': pcp_value,
|
177
|
+
'dei': dei,
|
178
|
+
'vid': vid,
|
179
|
+
},
|
180
|
+
type=type_value, # type: ignore[arg-type]
|
181
|
+
payload=payload,
|
182
|
+
)
|
183
|
+
|
184
|
+
##########################################################################
|
185
|
+
# Data models.
|
186
|
+
##########################################################################
|
187
|
+
|
188
|
+
def __length_hint__(self) -> 'Literal[4]':
|
189
|
+
"""Return an estimated length for the object."""
|
190
|
+
return 4
|
191
|
+
|
192
|
+
@classmethod
|
193
|
+
def __index__(cls) -> 'NoReturn': # pylint: disable=invalid-index-returned
|
194
|
+
"""Numeral registry index of the protocol.
|
195
|
+
|
196
|
+
Raises:
|
197
|
+
UnsupportedCall: This protocol has no registry entry.
|
198
|
+
|
199
|
+
"""
|
200
|
+
raise UnsupportedCall(f'{cls.__name__!r} object cannot be interpreted as an integer')
|
201
|
+
|
202
|
+
##########################################################################
|
203
|
+
# Utilities.
|
204
|
+
##########################################################################
|
205
|
+
|
206
|
+
@classmethod
|
207
|
+
def _make_data(cls, data: 'Data_VLAN') -> 'dict[str, Any]': # type: ignore[override]
|
208
|
+
"""Create key-value pairs from ``data`` for protocol construction.
|
209
|
+
|
210
|
+
Args:
|
211
|
+
data: protocol data
|
212
|
+
|
213
|
+
Returns:
|
214
|
+
Key-value pairs for protocol construction.
|
215
|
+
|
216
|
+
"""
|
217
|
+
return {
|
218
|
+
'tci': {
|
219
|
+
'pcp': data.tci.pcp,
|
220
|
+
'dei': data.tci.dei,
|
221
|
+
'vid': data.tci.vid,
|
222
|
+
},
|
223
|
+
'type': data.type,
|
224
|
+
'payload': cls._make_payload(data),
|
225
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=unused-wildcard-import
|
3
|
+
"""Auxiliary Protocols
|
4
|
+
=========================
|
5
|
+
|
6
|
+
.. module:: pcapkit.protocols.misc
|
7
|
+
|
8
|
+
:mod:`pcapkit.protocols.misc` contains the auxiliary protocol implementations.
|
9
|
+
Such includes the :class:`~pcapkit.protocols.misc.raw.Raw` class for not-supported
|
10
|
+
protocols, the :class:`~pcapkit.protocols.misc.null.NoPayload` class for
|
11
|
+
indication of empty payload, and PCAP header classes.
|
12
|
+
|
13
|
+
"""
|
14
|
+
|
15
|
+
# PCAP Headers
|
16
|
+
from pcapkit.protocols.misc.pcap import *
|
17
|
+
|
18
|
+
# PCAPNG Format
|
19
|
+
from pcapkit.protocols.misc.pcapng import *
|
20
|
+
|
21
|
+
# Miscellaneous Classes for Protocols
|
22
|
+
from pcapkit.protocols.misc.raw import Raw
|
23
|
+
from pcapkit.protocols.misc.null import NoPayload
|
24
|
+
|
25
|
+
__all__ = [
|
26
|
+
# PCAP Headers
|
27
|
+
'Header', 'Frame',
|
28
|
+
|
29
|
+
# PCAPNG Format
|
30
|
+
'PCAPNG',
|
31
|
+
|
32
|
+
# No Payload
|
33
|
+
'NoPayload',
|
34
|
+
|
35
|
+
# Raw Packet
|
36
|
+
'Raw',
|
37
|
+
]
|