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,95 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""ToS ECN Field
|
3
|
+
===================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv4.tos_ecn
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **ToS ECN Field**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv4.tos_ecn.ToSECN`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
if TYPE_CHECKING:
|
19
|
+
from collections import Counter
|
20
|
+
|
21
|
+
__all__ = ['ToSECN']
|
22
|
+
|
23
|
+
#: ToS registry.
|
24
|
+
DATA = {
|
25
|
+
0b00: 'Not-ECT',
|
26
|
+
0b01: 'ECT(1)',
|
27
|
+
0b10: 'ECT(0)',
|
28
|
+
0b11: 'CE',
|
29
|
+
} # type: dict[int, str]
|
30
|
+
|
31
|
+
|
32
|
+
class ToSECN(Vendor):
|
33
|
+
"""ToS ECN Field"""
|
34
|
+
|
35
|
+
#: Value limit checker.
|
36
|
+
FLAG = 'isinstance(value, int) and 0b00 <= value <= 0b11'
|
37
|
+
|
38
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
39
|
+
"""Fetch registry data.
|
40
|
+
|
41
|
+
Returns:
|
42
|
+
Registry data (:data:`~pcapkit.vendor.ipv4.tos_ecn.DATA`).
|
43
|
+
|
44
|
+
"""
|
45
|
+
return DATA
|
46
|
+
|
47
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
48
|
+
"""Count field records.
|
49
|
+
|
50
|
+
Args:
|
51
|
+
data: Registry data.
|
52
|
+
|
53
|
+
Returns:
|
54
|
+
Field recordings.
|
55
|
+
|
56
|
+
"""
|
57
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
58
|
+
|
59
|
+
def rename(self, name: 'str', code: 'int') -> 'str': # type: ignore[override] # pylint: disable=arguments-differ
|
60
|
+
"""Rename duplicated fields.
|
61
|
+
|
62
|
+
Args:
|
63
|
+
name: Field name.
|
64
|
+
code: Field code.
|
65
|
+
|
66
|
+
Returns:
|
67
|
+
Revised field name.
|
68
|
+
|
69
|
+
"""
|
70
|
+
if self.record[self.safe_name(name)] > 1 or self.safe_name(name).upper() in ['UNASSIGNED', 'RESERVED']:
|
71
|
+
name = f'{name} [0b{bin(code)[2:].zfill(2)}]'
|
72
|
+
return self.safe_name(name)
|
73
|
+
|
74
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
75
|
+
"""Process registry data.
|
76
|
+
|
77
|
+
Args:
|
78
|
+
data: Registry data.
|
79
|
+
|
80
|
+
Returns:
|
81
|
+
Enumeration fields and missing fields.
|
82
|
+
|
83
|
+
"""
|
84
|
+
enum = [] # type: list[str]
|
85
|
+
miss = [
|
86
|
+
"return extend_enum(cls, 'Unassigned_0b%s' % bin(value)[2:].zfill(2), value)",
|
87
|
+
]
|
88
|
+
for code, name in DATA.items():
|
89
|
+
renm = self.rename(name, code)
|
90
|
+
enum.append(f"{renm} = 0b{bin(code)[2:].zfill(2)}".ljust(76))
|
91
|
+
return enum, miss
|
92
|
+
|
93
|
+
|
94
|
+
if __name__ == '__main__':
|
95
|
+
sys.exit(ToSECN()) # type: ignore[arg-type]
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""ToS (DS Field) Precedence
|
3
|
+
===============================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv4.tos_pre
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **ToS (DS Field) Precedence**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv4.tos_pre.ToSPrecedence`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
if TYPE_CHECKING:
|
19
|
+
from collections import Counter
|
20
|
+
|
21
|
+
__all__ = ['ToSPrecedence']
|
22
|
+
|
23
|
+
#: ToS registry.
|
24
|
+
DATA = {
|
25
|
+
0b111: 'Network Control',
|
26
|
+
0b110: 'Internetwork Control',
|
27
|
+
0b101: 'CRITIC/ECP',
|
28
|
+
0b100: 'Flash Override',
|
29
|
+
0b011: 'Flash',
|
30
|
+
0b010: 'Immediate',
|
31
|
+
0b001: 'Priority',
|
32
|
+
0b000: 'Routine',
|
33
|
+
} # type: dict[int, str]
|
34
|
+
|
35
|
+
|
36
|
+
class ToSPrecedence(Vendor):
|
37
|
+
"""ToS (DS Field) Precedence"""
|
38
|
+
|
39
|
+
#: Value limit checker.
|
40
|
+
FLAG = 'isinstance(value, int) and 0b000 <= value <= 0b111'
|
41
|
+
|
42
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
43
|
+
"""Fetch registry data.
|
44
|
+
|
45
|
+
Returns:
|
46
|
+
Registry data (:data:`~pcapkit.vendor.ipv4.tos_pre.DATA`).
|
47
|
+
|
48
|
+
"""
|
49
|
+
return DATA
|
50
|
+
|
51
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
52
|
+
"""Count field records.
|
53
|
+
|
54
|
+
Args:
|
55
|
+
data: Registry data.
|
56
|
+
|
57
|
+
Returns:
|
58
|
+
Field recordings.
|
59
|
+
|
60
|
+
"""
|
61
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
62
|
+
|
63
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
64
|
+
"""Process registry data.
|
65
|
+
|
66
|
+
Args:
|
67
|
+
data: Registry data.
|
68
|
+
|
69
|
+
Returns:
|
70
|
+
Enumeration fields and missing fields.
|
71
|
+
|
72
|
+
"""
|
73
|
+
enum = [] # type: list[str]
|
74
|
+
miss = [
|
75
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
76
|
+
]
|
77
|
+
for code, name in DATA.items():
|
78
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
79
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
80
|
+
return enum, miss
|
81
|
+
|
82
|
+
|
83
|
+
if __name__ == '__main__':
|
84
|
+
sys.exit(ToSPrecedence()) # type: ignore[arg-type]
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""ToS (DS Field) Reliability
|
3
|
+
================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv4.tos_rel
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **ToS (DS Field) Reliability**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv4.tos_rel.ToSReliability`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
if TYPE_CHECKING:
|
19
|
+
from collections import Counter
|
20
|
+
|
21
|
+
__all__ = ['ToSReliability']
|
22
|
+
|
23
|
+
#: ToS registry.
|
24
|
+
DATA = {
|
25
|
+
0: 'Normal',
|
26
|
+
1: 'High',
|
27
|
+
} # type: dict[int, str]
|
28
|
+
|
29
|
+
|
30
|
+
class ToSReliability(Vendor):
|
31
|
+
"""ToS (DS Field) Reliability"""
|
32
|
+
|
33
|
+
#: Value limit checker.
|
34
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 1'
|
35
|
+
|
36
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
37
|
+
"""Fetch registry data.
|
38
|
+
|
39
|
+
Returns:
|
40
|
+
Registry data (:data:`~pcapkit.vendor.ipv4.tos_rel.DATA`).
|
41
|
+
|
42
|
+
"""
|
43
|
+
return DATA
|
44
|
+
|
45
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
46
|
+
"""Count field records.
|
47
|
+
|
48
|
+
Args:
|
49
|
+
data: Registry data.
|
50
|
+
|
51
|
+
Returns:
|
52
|
+
Field recordings.
|
53
|
+
|
54
|
+
"""
|
55
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
56
|
+
|
57
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
58
|
+
"""Process registry data.
|
59
|
+
|
60
|
+
Args:
|
61
|
+
data: Registry data.
|
62
|
+
|
63
|
+
Returns:
|
64
|
+
Enumeration fields and missing fields.
|
65
|
+
|
66
|
+
"""
|
67
|
+
enum = [] # type: list[str]
|
68
|
+
miss = [
|
69
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
70
|
+
]
|
71
|
+
for code, name in DATA.items():
|
72
|
+
renm = self.rename(name, code).upper() # type: ignore[arg-type]
|
73
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
74
|
+
return enum, miss
|
75
|
+
|
76
|
+
|
77
|
+
if __name__ == '__main__':
|
78
|
+
sys.exit(ToSReliability()) # type: ignore[arg-type]
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""ToS (DS Field) Throughput
|
3
|
+
===============================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv4.tos_thr
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **ToS (DS Field) Throughput**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv4.tos_thr.ToSThroughput`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
if TYPE_CHECKING:
|
19
|
+
from collections import Counter
|
20
|
+
|
21
|
+
__all__ = ['ToSThroughput']
|
22
|
+
|
23
|
+
#: ToS registry.
|
24
|
+
DATA = {
|
25
|
+
0: 'Normal',
|
26
|
+
1: 'High',
|
27
|
+
} # type: dict[int, str]
|
28
|
+
|
29
|
+
|
30
|
+
class ToSThroughput(Vendor):
|
31
|
+
"""ToS (DS Field) Throughput"""
|
32
|
+
|
33
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 1'
|
34
|
+
|
35
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
36
|
+
"""Fetch registry data.
|
37
|
+
|
38
|
+
Returns:
|
39
|
+
Registry data (:data:`~pcapkit.vendor.ipv4.tos_thr.DATA`).
|
40
|
+
|
41
|
+
"""
|
42
|
+
return DATA
|
43
|
+
|
44
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
45
|
+
"""Count field records.
|
46
|
+
|
47
|
+
Args:
|
48
|
+
data: Registry data.
|
49
|
+
|
50
|
+
Returns:
|
51
|
+
Field recordings.
|
52
|
+
|
53
|
+
"""
|
54
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
55
|
+
|
56
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
57
|
+
"""Process registry data.
|
58
|
+
|
59
|
+
Args:
|
60
|
+
data: Registry data.
|
61
|
+
|
62
|
+
Returns:
|
63
|
+
Enumeration fields and missing fields.
|
64
|
+
|
65
|
+
"""
|
66
|
+
enum = [] # type: list[str]
|
67
|
+
miss = [
|
68
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
69
|
+
]
|
70
|
+
for code, name in DATA.items():
|
71
|
+
renm = self.rename(name, code).upper() # type: ignore[arg-type]
|
72
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
73
|
+
return enum, miss
|
74
|
+
|
75
|
+
|
76
|
+
if __name__ == '__main__':
|
77
|
+
sys.exit(ToSThroughput()) # type: ignore[arg-type]
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""TS Flag
|
3
|
+
=============
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv4.ts_flag
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **TS Flag**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv4.ts_flag.TSFlag`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
if TYPE_CHECKING:
|
19
|
+
from collections import Counter
|
20
|
+
|
21
|
+
__all__ = ['TSFlag']
|
22
|
+
|
23
|
+
#: TS flag registry [:rfc:`719#section-3.1`].
|
24
|
+
DATA = {
|
25
|
+
0: 'Timestamp Only',
|
26
|
+
1: 'IP with Timestamp',
|
27
|
+
3: 'Prespecified IP with Timestamp',
|
28
|
+
} # type: dict[int, str]
|
29
|
+
|
30
|
+
|
31
|
+
class TSFlag(Vendor):
|
32
|
+
"""TS Flag"""
|
33
|
+
|
34
|
+
#: Value limit checker.
|
35
|
+
FLAG = 'isinstance(value, int) and 0b0000 <= value <= 0b1111'
|
36
|
+
|
37
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
38
|
+
"""Fetch registry data.
|
39
|
+
|
40
|
+
Returns:
|
41
|
+
Registry data (:data:`~pcapkit.vendor.ipv4.tos_pre.DATA`).
|
42
|
+
|
43
|
+
"""
|
44
|
+
return DATA
|
45
|
+
|
46
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
47
|
+
"""Count field records.
|
48
|
+
|
49
|
+
Args:
|
50
|
+
data: Registry data.
|
51
|
+
|
52
|
+
Returns:
|
53
|
+
Field recordings.
|
54
|
+
|
55
|
+
"""
|
56
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
57
|
+
|
58
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
59
|
+
"""Process registry data.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
data: Registry data.
|
63
|
+
|
64
|
+
Returns:
|
65
|
+
Enumeration fields and missing fields.
|
66
|
+
|
67
|
+
"""
|
68
|
+
enum = [] # type: list[str]
|
69
|
+
miss = [
|
70
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
71
|
+
]
|
72
|
+
for code, name in DATA.items():
|
73
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
74
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
75
|
+
return enum, miss
|
76
|
+
|
77
|
+
|
78
|
+
if __name__ == '__main__':
|
79
|
+
sys.exit(TSFlag()) # type: ignore[arg-type]
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=unused-import
|
3
|
+
""":class:`~pcapkit.protocols.internet.ipv6.IPv6` Vendor Crawlers
|
4
|
+
====================================================================
|
5
|
+
|
6
|
+
.. module:: pcapkit.vendor.ipv6
|
7
|
+
|
8
|
+
This module contains all vendor crawlers of
|
9
|
+
:class:`~pcapkit.protocols.internet.ipv6.IPv6` implementations. Available
|
10
|
+
crawlers include:
|
11
|
+
|
12
|
+
.. list-table::
|
13
|
+
|
14
|
+
* - :class:`IPv6_Extension_Header <pcapkit.vendor.ipv6.extension_header.ExtensionHeader>`
|
15
|
+
- IPv6 Extension Header Types [*]_
|
16
|
+
* - :class:`IPv6_Option <pcapkit.vendor.ipv6.option.Option>`
|
17
|
+
- Destination Options and Hop-by-Hop Options [*]_
|
18
|
+
* - :class:`IPv6_OptionAction <pcapkit.vendor.ipv6.option_action.OptionAction>`
|
19
|
+
- Option Actions [*]_
|
20
|
+
* - :class:`IPv6_QSFunction <pcapkit.vendor.ipv6.qs_function.QSFunction>`
|
21
|
+
- IPv6 QS Functions
|
22
|
+
* - :class:`IPv6_RouterAlert <pcapkit.vendor.ipv6.router_alert.RouterAlert>`
|
23
|
+
- IPv6 Router Alert Option Values [*]_
|
24
|
+
* - :class:`IPv6_Routing <pcapkit.vendor.ipv6.routing.Routing>`
|
25
|
+
- Routing Types [*]_
|
26
|
+
* - :class:`IPv6_SeedID <pcapkit.vendor.ipv6.seed_id.SeedID>`
|
27
|
+
- Seed-ID Types
|
28
|
+
* - :class:`IPv6_SMFDPDMode <pcapkit.vendor.ipv6.smf_dpd_mode.SMFDPDMode>`
|
29
|
+
- Simplified Multicast Forwarding Duplicate Packet Detection (``SMF_DPD``) Options
|
30
|
+
* - :class:`IPv6_TaggerID <pcapkit.vendor.ipv6.tagger_id.TaggerID>`
|
31
|
+
- Tagger-ID Types [*]_
|
32
|
+
|
33
|
+
.. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#extension-header
|
34
|
+
.. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-2
|
35
|
+
.. [*] https://www.rfc-editor.org/rfc/rfc8200#section-4.2
|
36
|
+
.. [*] https://www.iana.org/assignments/ipv6-routeralert-values/ipv6-routeralert-values.xhtml#ipv6-routeralert-values-1
|
37
|
+
.. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-3
|
38
|
+
.. [*] https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#taggerId-types
|
39
|
+
|
40
|
+
"""
|
41
|
+
|
42
|
+
from pcapkit.vendor.ipv6.extension_header import ExtensionHeader as IPv6_ExtensionHeader
|
43
|
+
from pcapkit.vendor.ipv6.option import Option as IPv6_Option
|
44
|
+
from pcapkit.vendor.ipv6.option_action import OptionAction as IPv6_OptionAction
|
45
|
+
from pcapkit.vendor.ipv6.qs_function import QSFunction as IPv6_QSFunction
|
46
|
+
from pcapkit.vendor.ipv6.router_alert import RouterAlert as IPv6_RouterAlert
|
47
|
+
from pcapkit.vendor.ipv6.routing import Routing as IPv6_Routing
|
48
|
+
from pcapkit.vendor.ipv6.seed_id import SeedID as IPv6_SeedID
|
49
|
+
from pcapkit.vendor.ipv6.smf_dpd_mode import SMFDPDMode as IPv6_SMFDPDMode
|
50
|
+
from pcapkit.vendor.ipv6.tagger_id import TaggerID as IPv6_TaggerID
|
51
|
+
|
52
|
+
__all__ = ['IPv6_ExtensionHeader', 'IPv6_Option', 'IPv6_QSFunction', 'IPv6_RouterAlert', 'IPv6_Routing',
|
53
|
+
'IPv6_SeedID', 'IPv6_SMFDPDMode', 'IPv6_TaggerID', 'IPv6_OptionAction']
|
@@ -0,0 +1,171 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""IPv6 Extension Header Types
|
3
|
+
=================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.extension_header
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **IPv6 Extension Header Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.extension_header.ExtensionHeader`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import csv
|
14
|
+
import re
|
15
|
+
import sys
|
16
|
+
from typing import TYPE_CHECKING
|
17
|
+
|
18
|
+
from pcapkit.vendor.default import Vendor
|
19
|
+
|
20
|
+
if TYPE_CHECKING:
|
21
|
+
from collections import Counter
|
22
|
+
from typing import Callable
|
23
|
+
|
24
|
+
__all__ = ['ExtensionHeader']
|
25
|
+
|
26
|
+
LINE = lambda NAME, DOCS, ENUM, MODL: f'''\
|
27
|
+
# -*- coding: utf-8 -*-
|
28
|
+
# pylint: disable=line-too-long,consider-using-f-string
|
29
|
+
"""{(name := DOCS.split(' [', maxsplit=1)[0])}
|
30
|
+
{'=' * (len(name) + 6)}
|
31
|
+
|
32
|
+
.. module:: {MODL.replace('vendor', 'const')}
|
33
|
+
|
34
|
+
This module contains the constant enumeration for **{name}**,
|
35
|
+
which is automatically generated from :class:`{MODL}.{NAME}`.
|
36
|
+
|
37
|
+
"""
|
38
|
+
|
39
|
+
from aenum import IntEnum, extend_enum
|
40
|
+
|
41
|
+
__all__ = ['{NAME}']
|
42
|
+
|
43
|
+
|
44
|
+
class {NAME}(IntEnum):
|
45
|
+
"""[{NAME}] {DOCS}"""
|
46
|
+
|
47
|
+
{ENUM}
|
48
|
+
|
49
|
+
@staticmethod
|
50
|
+
def get(key: 'int | str', default: 'int' = -1) -> '{NAME}':
|
51
|
+
"""Backport support for original codes.
|
52
|
+
|
53
|
+
Args:
|
54
|
+
key: Key to get enum item.
|
55
|
+
default: Default value if not found.
|
56
|
+
|
57
|
+
:meta private:
|
58
|
+
"""
|
59
|
+
if isinstance(key, int):
|
60
|
+
return {NAME}(key)
|
61
|
+
return {NAME}[key] # type: ignore[misc]
|
62
|
+
''' # type: Callable[[str, str, str, str], str]
|
63
|
+
|
64
|
+
|
65
|
+
class ExtensionHeader(Vendor):
|
66
|
+
"""IPv6 Extension Header Types"""
|
67
|
+
|
68
|
+
#: Link to registry.
|
69
|
+
LINK = 'https://www.iana.org/assignments/protocol-numbers/protocol-numbers-1.csv'
|
70
|
+
|
71
|
+
def count(self, data: 'list[str]') -> 'Counter[str]':
|
72
|
+
"""Count field records.
|
73
|
+
|
74
|
+
Args:
|
75
|
+
data: CSV data.
|
76
|
+
|
77
|
+
Returns:
|
78
|
+
Field recordings.
|
79
|
+
|
80
|
+
"""
|
81
|
+
reader = csv.reader(data)
|
82
|
+
next(reader) # header
|
83
|
+
return collections.Counter(map(lambda item: self.safe_name(item[1] or item[2]),
|
84
|
+
filter(lambda item: len(item[0].split('-')) != 2, reader)))
|
85
|
+
|
86
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
87
|
+
"""Process CSV data.
|
88
|
+
|
89
|
+
Args:
|
90
|
+
data: CSV data.
|
91
|
+
|
92
|
+
Returns:
|
93
|
+
Enumeration fields and missing fields.
|
94
|
+
|
95
|
+
"""
|
96
|
+
reader = csv.reader(data)
|
97
|
+
next(reader) # header
|
98
|
+
|
99
|
+
enum = [] # type: list[str]
|
100
|
+
miss = [] # type: list[str]
|
101
|
+
for item in reader:
|
102
|
+
flag = item[3]
|
103
|
+
if flag != 'Y':
|
104
|
+
continue
|
105
|
+
|
106
|
+
name = item[1]
|
107
|
+
rfcs = item[4]
|
108
|
+
|
109
|
+
temp = [] # type: list[str]
|
110
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
111
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
112
|
+
#temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
113
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
114
|
+
else:
|
115
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
116
|
+
lrfc = re.sub(r'( )( )*', ' ', f" {''.join(temp)}".replace('\n', ' ')) if rfcs else ''
|
117
|
+
|
118
|
+
subd = re.sub(r'( )( )*', ' ', item[2].replace('\n', ' '))
|
119
|
+
tmp1 = f' {subd}' if item[2] else ''
|
120
|
+
|
121
|
+
split = name.split(' (', 1)
|
122
|
+
if len(split) == 2:
|
123
|
+
name, cmmt = split[0], f" ({split[1]}"
|
124
|
+
else:
|
125
|
+
name, cmmt = name, '' # pylint: disable=self-assigning-variable
|
126
|
+
|
127
|
+
if name:
|
128
|
+
tmp1 = f',{tmp1}' if tmp1 else ''
|
129
|
+
else:
|
130
|
+
name, tmp1 = item[2], ''
|
131
|
+
desc = self.wrap_comment(f'{name}{tmp1}{lrfc}{cmmt}')
|
132
|
+
|
133
|
+
try:
|
134
|
+
code, _ = item[0], int(item[0])
|
135
|
+
if not name:
|
136
|
+
name, desc = item[2], ''
|
137
|
+
renm = self.rename(name, code, original=item[1])
|
138
|
+
|
139
|
+
pres = f"{renm} = {code}"
|
140
|
+
sufs = f"#: {desc}"
|
141
|
+
|
142
|
+
#if len(pres) > 74:
|
143
|
+
# sufs = f"\n{' '*80}{sufs}"
|
144
|
+
|
145
|
+
#enum.append(f'{pres.ljust(76)}{sufs}')
|
146
|
+
enum.append(f'{sufs}\n {pres}')
|
147
|
+
except ValueError:
|
148
|
+
start, stop = item[0].split('-')
|
149
|
+
|
150
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
151
|
+
miss.append(f' #: {desc}')
|
152
|
+
miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%d' % value, value)")
|
153
|
+
return enum, miss
|
154
|
+
|
155
|
+
def context(self, data: 'list[str]') -> 'str':
|
156
|
+
"""Generate constant context.
|
157
|
+
|
158
|
+
Args:
|
159
|
+
data: CSV data.
|
160
|
+
|
161
|
+
Returns:
|
162
|
+
Constant context.
|
163
|
+
|
164
|
+
"""
|
165
|
+
enum, _ = self.process(data)
|
166
|
+
ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum))
|
167
|
+
return LINE(self.NAME, self.DOCS, ENUM, self.__module__)
|
168
|
+
|
169
|
+
|
170
|
+
if __name__ == '__main__':
|
171
|
+
sys.exit(ExtensionHeader()) # type: ignore[arg-type]
|