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
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
# 802.1X Authentication
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=unused-import,unused-wildcard-import,fixme
|
3
|
+
"""Link Layer Protocols
|
4
|
+
==========================
|
5
|
+
|
6
|
+
.. module:: pcapkit.protocols.link
|
7
|
+
|
8
|
+
:mod:`pcapkit.protocols.link` is collection of all protocols in
|
9
|
+
link layer, with detailed implementation and methods.
|
10
|
+
|
11
|
+
"""
|
12
|
+
# TODO: Implements DSL, EAPOL, FDDI, ISDN, NDP, PPP.
|
13
|
+
|
14
|
+
# Base Class for Link Layer
|
15
|
+
from pcapkit.protocols.link.link import Link
|
16
|
+
|
17
|
+
# Utility Classes for Protocols
|
18
|
+
from pcapkit.protocols.link.arp import ARP, InARP
|
19
|
+
from pcapkit.protocols.link.ethernet import Ethernet
|
20
|
+
from pcapkit.protocols.link.l2tp import L2TP
|
21
|
+
from pcapkit.protocols.link.ospf import OSPF
|
22
|
+
from pcapkit.protocols.link.rarp import RARP, DRARP
|
23
|
+
from pcapkit.protocols.link.vlan import VLAN
|
24
|
+
|
25
|
+
# Link-Layer Header Type Values
|
26
|
+
from pcapkit.const.reg.linktype import LinkType as LINKTYPE
|
27
|
+
|
28
|
+
__all__ = [
|
29
|
+
# Protocol Numbers
|
30
|
+
'LINKTYPE',
|
31
|
+
|
32
|
+
# Link Layer Protocols
|
33
|
+
'ARP', 'DRARP', 'Ethernet', 'InARP', 'L2TP',
|
34
|
+
'OSPF', 'RARP', 'VLAN',
|
35
|
+
]
|
@@ -0,0 +1,421 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""ARP/InARP - (Inverse) Address Resolution Protocol
|
3
|
+
=======================================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.protocols.link.arp
|
6
|
+
|
7
|
+
:mod:`pcapkit.protocols.link.arp` contains
|
8
|
+
:class:`~pcapkit.protocols.link.arp.ARP` only,
|
9
|
+
which implements extractor for (Inverse) Address Resolution
|
10
|
+
Protocol (ARP/InARP) [*]_, whose structure is described as
|
11
|
+
below:
|
12
|
+
|
13
|
+
.. table::
|
14
|
+
|
15
|
+
====== ==== ============= =======================
|
16
|
+
Octets Bits Name Description
|
17
|
+
====== ==== ============= =======================
|
18
|
+
0 0 ``arp.htype`` Hardware Type
|
19
|
+
------ ---- ------------- -----------------------
|
20
|
+
2 16 ``arp.ptype`` Protocol Type
|
21
|
+
------ ---- ------------- -----------------------
|
22
|
+
4 32 ``arp.hlen`` Hardware Address Length
|
23
|
+
------ ---- ------------- -----------------------
|
24
|
+
5 40 ``arp.plen`` Protocol Address Length
|
25
|
+
------ ---- ------------- -----------------------
|
26
|
+
6 48 ``arp.oper`` Operation
|
27
|
+
------ ---- ------------- -----------------------
|
28
|
+
8 64 ``arp.sha`` Sender Hardware Address
|
29
|
+
------ ---- ------------- -----------------------
|
30
|
+
14 112 ``arp.spa`` Sender Protocol Address
|
31
|
+
------ ---- ------------- -----------------------
|
32
|
+
18 144 ``arp.tha`` Target Hardware Address
|
33
|
+
------ ---- ------------- -----------------------
|
34
|
+
24 192 ``arp.tpa`` Target Protocol Address
|
35
|
+
====== ==== ============= =======================
|
36
|
+
|
37
|
+
.. [*] http://en.wikipedia.org/wiki/Address_Resolution_Protocol
|
38
|
+
|
39
|
+
"""
|
40
|
+
import ipaddress
|
41
|
+
import re
|
42
|
+
import sys
|
43
|
+
import textwrap
|
44
|
+
from typing import TYPE_CHECKING
|
45
|
+
|
46
|
+
from pcapkit.const.arp.hardware import Hardware as Enum_Hardware
|
47
|
+
from pcapkit.const.arp.operation import Operation as Enum_Operation
|
48
|
+
from pcapkit.const.reg.ethertype import EtherType as Enum_EtherType
|
49
|
+
from pcapkit.protocols.data.link.arp import ARP as Data_ARP
|
50
|
+
from pcapkit.protocols.data.link.arp import Address as Data_Address
|
51
|
+
from pcapkit.protocols.data.link.arp import Type as Data_Type
|
52
|
+
from pcapkit.protocols.link.link import Link
|
53
|
+
from pcapkit.protocols.schema.link.arp import ARP as Schema_ARP
|
54
|
+
from pcapkit.utilities.compat import cached_property
|
55
|
+
from pcapkit.utilities.exceptions import ProtocolError
|
56
|
+
|
57
|
+
if TYPE_CHECKING:
|
58
|
+
from enum import IntEnum as StdlibEnum
|
59
|
+
from ipaddress import IPv4Address, IPv6Address
|
60
|
+
from typing import Any, Optional, Type
|
61
|
+
|
62
|
+
from aenum import IntEnum as AenumEnum
|
63
|
+
from typing_extensions import Literal
|
64
|
+
|
65
|
+
from pcapkit.protocols.protocol import ProtocolBase as Protocol
|
66
|
+
from pcapkit.protocols.schema.schema import Schema
|
67
|
+
|
68
|
+
__all__ = ['ARP', 'InARP']
|
69
|
+
|
70
|
+
# check Python version
|
71
|
+
py38 = ((version_info := sys.version_info).major >= 3 and version_info.minor >= 8)
|
72
|
+
|
73
|
+
# Ethernet address pattern
|
74
|
+
PAT_MAC_ADDR = re.compile(rb'(?i)(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}')
|
75
|
+
|
76
|
+
|
77
|
+
class ARP(Link[Data_ARP, Schema_ARP],
|
78
|
+
schema=Schema_ARP, data=Data_ARP):
|
79
|
+
"""This class implements all protocols in ARP family.
|
80
|
+
|
81
|
+
- Address Resolution Protocol (:class:`~pcapkit.protocols.link.arp.ARP`) [:rfc:`826`]
|
82
|
+
- Reverse Address Resolution Protocol (:class:`~pcapkit.protocols.link.rarp.RARP`) [:rfc:`903`]
|
83
|
+
- Dynamic Reverse Address Resolution Protocol (:class:`~pcapkit.protocols.link.rarp.DRARP`) [:rfc:`1931`]
|
84
|
+
- Inverse Address Resolution Protocol (:class:`~pcapkit.protocols.link.arp.InARP`) [:rfc:`2390`]
|
85
|
+
|
86
|
+
"""
|
87
|
+
#: Name of corresponding protocol.
|
88
|
+
_name: 'Literal["Address Resolution Protocol", "Inverse Address Resolution Protocol", "Reverse Address Resolution Protocol", "Dynamic Reverse Address Resolution Protocol"]' # pylint: disable=line-too-long
|
89
|
+
#: Acronym of corresponding protocol.
|
90
|
+
_acnm: 'Literal["ARP", "InARP", "RARP", "DRARP"]'
|
91
|
+
|
92
|
+
##########################################################################
|
93
|
+
# Properties.
|
94
|
+
##########################################################################
|
95
|
+
|
96
|
+
@property
|
97
|
+
def name(self) -> 'Literal["Dynamic Reverse Address Resolution Protocol", "Inverse Address Resolution Protocol", "Reverse Address Resolution Protocol", "Address Resolution Protocol"]': # pylint: disable=line-too-long
|
98
|
+
"""Name of current protocol."""
|
99
|
+
return self._name
|
100
|
+
|
101
|
+
@property
|
102
|
+
def alias(self) -> 'Literal["ARP", "InARP", "RARP", "DRARP"]':
|
103
|
+
"""Acronym of corresponding protocol."""
|
104
|
+
return self._acnm
|
105
|
+
|
106
|
+
@property
|
107
|
+
def length(self) -> 'int':
|
108
|
+
"""Header length of current protocol."""
|
109
|
+
return self._info.len
|
110
|
+
|
111
|
+
@cached_property
|
112
|
+
def src(self) -> 'Data_Address':
|
113
|
+
"""Sender hardware & protocol address."""
|
114
|
+
return Data_Address(self._info.sha, self._info.spa)
|
115
|
+
|
116
|
+
@cached_property
|
117
|
+
def dst(self) -> 'Data_Address':
|
118
|
+
"""Target hardware & protocol address."""
|
119
|
+
return Data_Address(self._info.tha, self._info.tpa)
|
120
|
+
|
121
|
+
@cached_property
|
122
|
+
def type(self) -> 'Data_Type':
|
123
|
+
"""Hardware & protocol type."""
|
124
|
+
return Data_Type(self._info.htype, self._info.ptype)
|
125
|
+
|
126
|
+
##########################################################################
|
127
|
+
# Methods.
|
128
|
+
##########################################################################
|
129
|
+
|
130
|
+
@classmethod
|
131
|
+
def id(cls) -> 'tuple[Literal["ARP"]]':
|
132
|
+
"""Index ID of the protocol."""
|
133
|
+
return ('ARP',)
|
134
|
+
|
135
|
+
def read(self, length: 'Optional[int]' = None, **kwargs: 'Any') -> 'Data_ARP': # pylint: disable=unused-argument
|
136
|
+
r"""Read Address Resolution Protocol.
|
137
|
+
|
138
|
+
Data structure of ARP Request header [:rfc:`826`]:
|
139
|
+
|
140
|
+
.. code-block:: text
|
141
|
+
|
142
|
+
0 1 2 3
|
143
|
+
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
|
144
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
145
|
+
| Hdr Type | Proto Type |
|
146
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
147
|
+
| Hdr Len | Proto Len | Operation |
|
148
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
149
|
+
\ Sender Hdr Addr \
|
150
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
151
|
+
\ Sender Proto Addr \
|
152
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
153
|
+
\ Target Hdr Addr \
|
154
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
155
|
+
\ Target Proto Addr \
|
156
|
+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
157
|
+
|
158
|
+
Args:
|
159
|
+
length: Length of packet data.
|
160
|
+
**kwargs: Arbitrary keyword arguments.
|
161
|
+
|
162
|
+
Returns:
|
163
|
+
Parsed packet data.
|
164
|
+
|
165
|
+
"""
|
166
|
+
if length is None:
|
167
|
+
length = self.__len__()
|
168
|
+
schema = self.__header__
|
169
|
+
|
170
|
+
_hwty = schema.htype
|
171
|
+
_ptty = schema.ptype
|
172
|
+
_hlen = schema.hlen
|
173
|
+
_plen = schema.plen
|
174
|
+
_oper = schema.oper
|
175
|
+
_shwa = self._read_addr_resolve(schema.sha, _hwty)
|
176
|
+
_spta = self._read_proto_resolve(schema.spa, _ptty)
|
177
|
+
_thwa = self._read_addr_resolve(schema.tha, _hwty)
|
178
|
+
_tpta = self._read_proto_resolve(schema.tpa, _ptty)
|
179
|
+
|
180
|
+
if _oper in (5, 6, 7):
|
181
|
+
self._acnm = 'DRARP'
|
182
|
+
self._name = 'Dynamic Reverse Address Resolution Protocol'
|
183
|
+
elif _oper in (8, 9):
|
184
|
+
self._acnm = 'InARP'
|
185
|
+
self._name = 'Inverse Address Resolution Protocol'
|
186
|
+
elif _oper in (3, 4):
|
187
|
+
self._acnm = 'RARP'
|
188
|
+
self._name = 'Reverse Address Resolution Protocol'
|
189
|
+
else:
|
190
|
+
self._acnm = 'ARP'
|
191
|
+
self._name = 'Address Resolution Protocol'
|
192
|
+
|
193
|
+
arp = Data_ARP(
|
194
|
+
htype=_hwty,
|
195
|
+
ptype=_ptty,
|
196
|
+
hlen=_hlen,
|
197
|
+
plen=_plen,
|
198
|
+
oper=_oper,
|
199
|
+
sha=_shwa,
|
200
|
+
spa=_spta,
|
201
|
+
tha=_thwa,
|
202
|
+
tpa=_tpta,
|
203
|
+
len=8 + _hlen * 2 + _plen * 2,
|
204
|
+
)
|
205
|
+
return self._decode_next_layer(arp, -1, length - arp.len)
|
206
|
+
|
207
|
+
def make(self, *,
|
208
|
+
htype: 'Enum_Hardware | StdlibEnum | AenumEnum | str | int' = Enum_Hardware.Ethernet,
|
209
|
+
htype_default: 'Optional[int]' = None,
|
210
|
+
htype_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
|
211
|
+
htype_reversed: 'bool' = False,
|
212
|
+
ptype: 'Enum_EtherType | StdlibEnum | AenumEnum | str | int' = Enum_EtherType.Internet_Protocol_version_4,
|
213
|
+
ptype_default: 'Optional[int]' = None,
|
214
|
+
ptype_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
|
215
|
+
ptype_reversed: 'bool' = False,
|
216
|
+
hlen: 'int' = 6,
|
217
|
+
plen: 'int' = 4,
|
218
|
+
oper: 'Enum_Operation | StdlibEnum | AenumEnum | str | int' = Enum_Operation.REQUEST,
|
219
|
+
oper_default: 'Optional[int]' = None,
|
220
|
+
oper_namespace: 'Optional[dict[str, int] | dict[int, str] | Type[StdlibEnum] | Type[AenumEnum]]' = None, # pylint: disable=line-too-long
|
221
|
+
oper_reversed: 'bool' = False,
|
222
|
+
sha: 'str | bytes | bytearray' = '00:00:00:00:00:00',
|
223
|
+
spa: 'IPv4Address | IPv6Address | str | bytes | bytearray' = '0.0.0.0', # nosec: B104
|
224
|
+
tha: 'str | bytes | bytearray' = '00:00:00:00:00:00',
|
225
|
+
tpa: 'IPv4Address | IPv6Address | str | bytes | bytearray' = '0.0.0.0', # nosec: B104
|
226
|
+
payload: 'bytes | Protocol | Schema' = b'',
|
227
|
+
**kwargs: 'Any') -> 'Schema_ARP':
|
228
|
+
"""Make (construct) packet data.
|
229
|
+
|
230
|
+
Args:
|
231
|
+
htype: Hardware type.
|
232
|
+
htype_default: Default value of hardware type.
|
233
|
+
htype_namespace: Namespace of hardware type.
|
234
|
+
htype_reversed: Reversed flag of hardware type.
|
235
|
+
ptype: Protocol type.
|
236
|
+
ptype_default: Default value of protocol type.
|
237
|
+
ptype_namespace: Namespace of protocol type.
|
238
|
+
ptype_reversed: Reversed flag of protocol type.
|
239
|
+
hlen: Hardware address length.
|
240
|
+
plen: Protocol address length.
|
241
|
+
oper: Operation.
|
242
|
+
oper_default: Default value of operation.
|
243
|
+
oper_namespace: Namespace of operation.
|
244
|
+
oper_reversed: Reversed flag of operation.
|
245
|
+
sha: Sender hardware address.
|
246
|
+
spa: Sender protocol address.
|
247
|
+
tha: Target hardware address.
|
248
|
+
tpa: Target protocol address.
|
249
|
+
payload: Payload.
|
250
|
+
**kwargs: Arbitrary keyword arguments.
|
251
|
+
|
252
|
+
Returns:
|
253
|
+
Constructed packet data.
|
254
|
+
|
255
|
+
"""
|
256
|
+
_htype = self._make_index(htype, htype_default, namespace=htype_namespace,
|
257
|
+
reversed=htype_reversed, pack=False)
|
258
|
+
_ptype = self._make_index(ptype, ptype_default, namespace=ptype_namespace,
|
259
|
+
reversed=ptype_reversed, pack=False)
|
260
|
+
_oper = self._make_index(oper, oper_default, namespace=oper_namespace,
|
261
|
+
reversed=oper_reversed, pack=False)
|
262
|
+
|
263
|
+
return Schema_ARP(
|
264
|
+
htype=_htype,
|
265
|
+
ptype=_ptype,
|
266
|
+
hlen=hlen,
|
267
|
+
plen=plen,
|
268
|
+
oper=_oper,
|
269
|
+
sha=self._make_addr_resolve(sha, _htype),
|
270
|
+
spa=self._make_proto_resolve(spa, _ptype),
|
271
|
+
tha=self._make_addr_resolve(tha, _htype),
|
272
|
+
tpa=self._make_proto_resolve(tpa, _ptype),
|
273
|
+
payload=payload,
|
274
|
+
)
|
275
|
+
|
276
|
+
##########################################################################
|
277
|
+
# Data models.
|
278
|
+
##########################################################################
|
279
|
+
|
280
|
+
def __length_hint__(self) -> 'Literal[28]':
|
281
|
+
"""Return an estimated length for the object."""
|
282
|
+
return 28
|
283
|
+
|
284
|
+
@classmethod
|
285
|
+
def __index__(cls) -> 'Enum_EtherType': # pylint: disable=invalid-index-returned
|
286
|
+
"""Numeral registry index of the protocol.
|
287
|
+
|
288
|
+
Returns:
|
289
|
+
Numeral registry index of the protocol in `IANA`_.
|
290
|
+
|
291
|
+
.. _IANA: https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml
|
292
|
+
|
293
|
+
"""
|
294
|
+
return Enum_EtherType.Address_Resolution_Protocol # type: ignore[return-value]
|
295
|
+
|
296
|
+
##########################################################################
|
297
|
+
# Utilities.
|
298
|
+
##########################################################################
|
299
|
+
|
300
|
+
@classmethod
|
301
|
+
def _make_data(cls, data: 'Data_ARP') -> 'dict[str, Any]': # type: ignore[override]
|
302
|
+
"""Create key-value pairs from ``data`` for protocol construction.
|
303
|
+
|
304
|
+
Args:
|
305
|
+
data: protocol data
|
306
|
+
|
307
|
+
Returns:
|
308
|
+
Key-value pairs for protocol construction.
|
309
|
+
|
310
|
+
"""
|
311
|
+
return {
|
312
|
+
'htype': data.htype,
|
313
|
+
'ptype': data.ptype,
|
314
|
+
'hlen': data.hlen,
|
315
|
+
'plen': data.plen,
|
316
|
+
'oper': data.oper,
|
317
|
+
'sha': data.sha,
|
318
|
+
'spa': data.spa,
|
319
|
+
'tha': data.tha,
|
320
|
+
'tpa': data.tpa,
|
321
|
+
'payload': cls._make_payload(data),
|
322
|
+
}
|
323
|
+
|
324
|
+
def _read_addr_resolve(self, addr: 'bytes', htype: 'int') -> 'str':
|
325
|
+
"""Resolve headware address according to protocol.
|
326
|
+
|
327
|
+
Arguments:
|
328
|
+
addr: Hardware address.
|
329
|
+
htype: Hardware type.
|
330
|
+
|
331
|
+
Returns:
|
332
|
+
Hardware address. If ``htype`` is ``1``, i.e. MAC address,
|
333
|
+
returns ``:`` seperated *hex* encoded MAC address.
|
334
|
+
|
335
|
+
"""
|
336
|
+
if htype == Enum_Hardware.Ethernet: # Ethernet
|
337
|
+
if py38:
|
338
|
+
_addr = addr.hex(':')
|
339
|
+
else:
|
340
|
+
_addr = ':'.join(textwrap.wrap(addr.hex(), 2))
|
341
|
+
else:
|
342
|
+
_addr = addr.hex()
|
343
|
+
return _addr
|
344
|
+
|
345
|
+
def _read_proto_resolve(self, addr: 'bytes', ptype: 'int') -> 'str | IPv4Address | IPv6Address':
|
346
|
+
"""Resolve protocol address according to protocol.
|
347
|
+
|
348
|
+
Arguments:
|
349
|
+
addr: Protocol address.
|
350
|
+
ptype: Protocol type.
|
351
|
+
|
352
|
+
Returns:
|
353
|
+
Protocol address. If ``ptype`` is ``0x0800``, i.e. IPv4 adddress,
|
354
|
+
returns an :class:`~ipaddress.IPv4Address` object; if ``ptype`` is
|
355
|
+
``0x86dd``, i.e. IPv6 address, returns an :class:`~ipaddress.IPv6Address`
|
356
|
+
object; otherwise, returns a raw :data:`str` representing the
|
357
|
+
protocol address.
|
358
|
+
|
359
|
+
"""
|
360
|
+
if ptype == Enum_EtherType.Internet_Protocol_version_4: # IPv4
|
361
|
+
return ipaddress.ip_address(addr)
|
362
|
+
if ptype == Enum_EtherType.Internet_Protocol_version_6: # IPv6
|
363
|
+
return ipaddress.ip_address(addr)
|
364
|
+
return addr.hex()
|
365
|
+
|
366
|
+
def _make_addr_resolve(self, addr: 'str | bytes', htype: 'int') -> 'bytes':
|
367
|
+
"""Resolve headware address according to protocol.
|
368
|
+
|
369
|
+
Arguments:
|
370
|
+
addr: Hardware address.
|
371
|
+
|
372
|
+
Returns:
|
373
|
+
Hardware address. If ``htype`` is ``1``, i.e. MAC address,
|
374
|
+
returns ``:`` seperated *hex* encoded MAC address.
|
375
|
+
|
376
|
+
"""
|
377
|
+
_addr = addr.encode() if isinstance(addr, str) else addr
|
378
|
+
|
379
|
+
if htype == Enum_Hardware.Ethernet:
|
380
|
+
if PAT_MAC_ADDR.fullmatch(_addr) is not None:
|
381
|
+
return _addr.replace(b':', b'').replace(b'-', b'')
|
382
|
+
raise ProtocolError(f'Invalid MAC address: {addr!r}')
|
383
|
+
return _addr
|
384
|
+
|
385
|
+
def _make_proto_resolve(self, addr: 'IPv4Address | IPv6Address | str | bytes', ptype: 'int') -> 'bytes':
|
386
|
+
"""Resolve protocol address according to protocol.
|
387
|
+
|
388
|
+
Arguments:
|
389
|
+
addr: Protocol address.
|
390
|
+
|
391
|
+
Returns:
|
392
|
+
Protocol address. If ``ptype`` is ``0x0800``, i.e. IPv4 adddress,
|
393
|
+
returns an :class:`~ipaddress.IPv4Address` object; if ``ptype`` is
|
394
|
+
``0x86dd``, i.e. IPv6 address, returns an :class:`~ipaddress.IPv6Address`
|
395
|
+
object; otherwise, returns a raw :data:`str` representing the
|
396
|
+
protocol address.
|
397
|
+
|
398
|
+
"""
|
399
|
+
if ptype == Enum_EtherType.Internet_Protocol_version_4:
|
400
|
+
return ipaddress.IPv4Address(addr).packed
|
401
|
+
if ptype == Enum_EtherType.Internet_Protocol_version_6:
|
402
|
+
return ipaddress.IPv6Address(addr).packed
|
403
|
+
|
404
|
+
if isinstance(addr, str):
|
405
|
+
return addr.encode()
|
406
|
+
if isinstance(addr, (ipaddress.IPv4Address, ipaddress.IPv6Address)):
|
407
|
+
return addr.packed
|
408
|
+
return addr
|
409
|
+
|
410
|
+
|
411
|
+
class InARP(ARP):
|
412
|
+
"""This class implements Inverse Address Resolution Protocol."""
|
413
|
+
|
414
|
+
##########################################################################
|
415
|
+
# Methods.
|
416
|
+
##########################################################################
|
417
|
+
|
418
|
+
@classmethod
|
419
|
+
def id(cls) -> 'tuple[Literal["InARP"]]': # type: ignore[override]
|
420
|
+
"""Index ID of the protocol."""
|
421
|
+
return ('InARP',)
|