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,104 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Destination Options and Hop-by-Hop Options
|
3
|
+
================================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.option
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Destination Options and Hop-by-Hop Options**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.option.Option`.
|
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
|
+
|
23
|
+
__all__ = ['Option']
|
24
|
+
|
25
|
+
|
26
|
+
class Option(Vendor):
|
27
|
+
"""Destination Options and Hop-by-Hop Options"""
|
28
|
+
|
29
|
+
#: Value limit checker.
|
30
|
+
FLAG = 'isinstance(value, int) and 0x00 <= value <= 0xFF'
|
31
|
+
#: Link to registry.
|
32
|
+
LINK = 'https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters-2.csv'
|
33
|
+
|
34
|
+
def count(self, data: 'list[str]') -> 'Counter[str]':
|
35
|
+
"""Count field records.
|
36
|
+
|
37
|
+
Args:
|
38
|
+
data: Registry data.
|
39
|
+
|
40
|
+
Returns:
|
41
|
+
Field recordings.
|
42
|
+
|
43
|
+
"""
|
44
|
+
reader = csv.reader(data)
|
45
|
+
next(reader) # header
|
46
|
+
return collections.Counter(map(lambda item: self.safe_name(item[4]), reader))
|
47
|
+
|
48
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
49
|
+
"""Process CSV data.
|
50
|
+
|
51
|
+
Args:
|
52
|
+
data: CSV data.
|
53
|
+
|
54
|
+
Returns:
|
55
|
+
Enumeration fields and missing fields.
|
56
|
+
|
57
|
+
"""
|
58
|
+
reader = csv.reader(data)
|
59
|
+
next(reader) # header
|
60
|
+
|
61
|
+
enum = [] # type: list[str]
|
62
|
+
miss = [
|
63
|
+
"return extend_enum(cls, 'Unassigned_0x%s' % hex(value)[2:].upper().zfill(2), value)",
|
64
|
+
]
|
65
|
+
for item in reader:
|
66
|
+
if not item[0]:
|
67
|
+
continue
|
68
|
+
|
69
|
+
code = item[0]
|
70
|
+
dscp = item[4]
|
71
|
+
rfcs = item[5]
|
72
|
+
|
73
|
+
temp = [] # type: list[str]
|
74
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
75
|
+
if re.match(r'\d+', rfc):
|
76
|
+
continue
|
77
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
78
|
+
#temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
79
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
80
|
+
else:
|
81
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
82
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
83
|
+
|
84
|
+
splt = re.split(r' \[\d+\]', dscp)[0]
|
85
|
+
name = re.sub(r'.* \((.*)\)', r'\1', splt)
|
86
|
+
if re.fullmatch(r'[0-9a-zA-Z]+', name) is None or name.upper() == 'DEPRECATED':
|
87
|
+
name = re.sub(r'(.*) \(.*\)', r'\1', splt)
|
88
|
+
|
89
|
+
desc = self.wrap_comment(re.sub(r'\r*\n', ' ', f'{splt}{tmp1}', re.MULTILINE))
|
90
|
+
renm = self.rename(name or 'Unassigned', code, original=dscp)
|
91
|
+
|
92
|
+
pres = f"{renm} = {code}"
|
93
|
+
sufs = f'#: {desc}'
|
94
|
+
|
95
|
+
#if len(pres) > 74:
|
96
|
+
# sufs = f"\n{' '*80}{sufs}"
|
97
|
+
|
98
|
+
#enum.append(f'{pres.ljust(76)}{sufs}')
|
99
|
+
enum.append(f'{sufs}\n {pres}')
|
100
|
+
return enum, miss
|
101
|
+
|
102
|
+
|
103
|
+
if __name__ == '__main__':
|
104
|
+
sys.exit(Option()) # type: ignore[arg-type]
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Option Actions
|
3
|
+
====================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.option_action
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Option Actions**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.option_action.OptionAction`.
|
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__ = ['OptionAction']
|
22
|
+
|
23
|
+
#: Unknown option action [:rfc:`8200#section-4.2`].
|
24
|
+
DATA = {
|
25
|
+
# skip over this option and continue processing the header.
|
26
|
+
0b00: 'skip',
|
27
|
+
# discard the packet.
|
28
|
+
0b01: 'discard',
|
29
|
+
# discard the packet and, regardless of whether or not the
|
30
|
+
# packet's Destination Address was a multicast address, send an
|
31
|
+
# ICMP Parameter Problem, Code 2, message to the packet's
|
32
|
+
# Source Address, pointing to the unrecognized Option Type.
|
33
|
+
0b10: 'discard_icmp_any',
|
34
|
+
# discard the packet and, only if the packet's Destination
|
35
|
+
# Address was not a multicast address, send an ICMP Parameter
|
36
|
+
# Problem, Code 2, message to the packet's Source Address,
|
37
|
+
# pointing to the unrecognized Option Type.
|
38
|
+
0b11: 'discard_icmp_unicast',
|
39
|
+
} # type: dict[int, str]
|
40
|
+
|
41
|
+
|
42
|
+
class OptionAction(Vendor):
|
43
|
+
"""Option Actions"""
|
44
|
+
|
45
|
+
#: Value limit checker.
|
46
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 3'
|
47
|
+
|
48
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
49
|
+
"""Fetch registry data.
|
50
|
+
|
51
|
+
Returns:
|
52
|
+
Registry data (:data:`~pcapkit.vendor.ipv6.option_action.DATA`).
|
53
|
+
|
54
|
+
"""
|
55
|
+
return DATA
|
56
|
+
|
57
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
58
|
+
"""Count field records.
|
59
|
+
|
60
|
+
Args:
|
61
|
+
data: Registry data.
|
62
|
+
|
63
|
+
Returns:
|
64
|
+
Field recordings.
|
65
|
+
|
66
|
+
"""
|
67
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
68
|
+
|
69
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
70
|
+
"""Process registry data.
|
71
|
+
|
72
|
+
Args:
|
73
|
+
data: Registry data.
|
74
|
+
|
75
|
+
Returns:
|
76
|
+
Enumeration fields and missing fields.
|
77
|
+
|
78
|
+
"""
|
79
|
+
enum = [] # type: list[str]
|
80
|
+
miss = [
|
81
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
82
|
+
]
|
83
|
+
for code, name in DATA.items():
|
84
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
85
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
86
|
+
return enum, miss
|
87
|
+
|
88
|
+
|
89
|
+
if __name__ == '__main__':
|
90
|
+
sys.exit(OptionAction()) # type: ignore[arg-type]
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""QS Functions
|
3
|
+
==================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.qs_function
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **QS Functions**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.qs_function.QSFunction`.
|
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__ = ['QSFunction']
|
22
|
+
|
23
|
+
#: QS function registry.
|
24
|
+
DATA = {
|
25
|
+
0: 'Quick-Start Request',
|
26
|
+
8: 'Report of Approved Rate',
|
27
|
+
} # type: dict[int, str]
|
28
|
+
|
29
|
+
|
30
|
+
class QSFunction(Vendor):
|
31
|
+
"""QS Functions"""
|
32
|
+
|
33
|
+
#: Value limit checker.
|
34
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 8'
|
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.ipv6.qs_function.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) # 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(QSFunction()) # type: ignore[arg-type]
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""IPv6 Router Alert Option Values
|
3
|
+
=====================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.router_alert
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **IPv6 Router Alert Option Values**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.router_alert.RouterAlert`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
__all__ = ['RouterAlert']
|
19
|
+
|
20
|
+
|
21
|
+
class RouterAlert(Vendor):
|
22
|
+
"""IPv6 Router Alert Option Values"""
|
23
|
+
|
24
|
+
#: Value limit checker.
|
25
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 65535'
|
26
|
+
#: Link to registry.
|
27
|
+
LINK = 'https://www.iana.org/assignments/ipv6-routeralert-values/ipv6-routeralert-values-1.csv'
|
28
|
+
|
29
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
30
|
+
"""Process CSV data.
|
31
|
+
|
32
|
+
Args:
|
33
|
+
data: CSV data.
|
34
|
+
|
35
|
+
Returns:
|
36
|
+
Enumeration fields and missing fields.
|
37
|
+
|
38
|
+
"""
|
39
|
+
reader = csv.reader(data)
|
40
|
+
next(reader) # header
|
41
|
+
|
42
|
+
enum = [] # type: list[str]
|
43
|
+
miss = [] # type: list[str]
|
44
|
+
for item in reader:
|
45
|
+
name = item[1]
|
46
|
+
rfcs = item[2]
|
47
|
+
|
48
|
+
temp = [] # type: list[str]
|
49
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
50
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
51
|
+
#temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
52
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
53
|
+
else:
|
54
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
55
|
+
desc = self.wrap_comment(re.sub(r'\r*\n', ' ', '%s %s' % ( # pylint: disable=consider-using-f-string
|
56
|
+
name, ''.join(temp) if rfcs else '',
|
57
|
+
), re.MULTILINE))
|
58
|
+
|
59
|
+
try:
|
60
|
+
code, _ = item[0], int(item[0])
|
61
|
+
renm = self.rename(name, code)
|
62
|
+
|
63
|
+
pres = f"{renm} = {code}"
|
64
|
+
sufs = f'#: {desc}'
|
65
|
+
|
66
|
+
#if len(pres) > 74:
|
67
|
+
# sufs = f"\n{' '*80}{sufs}"
|
68
|
+
|
69
|
+
#enum.append(f'{pres.ljust(76)}{sufs}')
|
70
|
+
enum.append(f'{sufs}\n {pres}')
|
71
|
+
except ValueError:
|
72
|
+
start, stop = map(int, item[0].split('-'))
|
73
|
+
|
74
|
+
if 'Level' in name:
|
75
|
+
base = name.rstrip('s 0-31')
|
76
|
+
for tmp_code in range(start, stop+1):
|
77
|
+
renm = self.safe_name(f'{base}_{tmp_code-start}')
|
78
|
+
pres = f"{renm} = {tmp_code}"
|
79
|
+
|
80
|
+
#if len(pres) > 74:
|
81
|
+
# sufs = f"\n{' '*80}{sufs}"
|
82
|
+
|
83
|
+
#enum.append(f'{pres.ljust(76)}{sufs}')
|
84
|
+
enum.append(f'#: {desc}\n {pres}')
|
85
|
+
else:
|
86
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
87
|
+
miss.append(f' #: {desc}')
|
88
|
+
miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
|
89
|
+
return enum, miss
|
90
|
+
|
91
|
+
|
92
|
+
if __name__ == '__main__':
|
93
|
+
sys.exit(RouterAlert()) # type: ignore[arg-type]
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""IPv6 Routing Types
|
3
|
+
========================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.routing
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **IPv6 Routing Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.routing.Routing`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
__all__ = ['Routing']
|
19
|
+
|
20
|
+
|
21
|
+
class Routing(Vendor):
|
22
|
+
"""IPv6 Routing Types"""
|
23
|
+
|
24
|
+
#: Value limit checker.
|
25
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 255'
|
26
|
+
#: Link to registry.
|
27
|
+
LINK = 'https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters-3.csv'
|
28
|
+
|
29
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
30
|
+
"""Process CSV data.
|
31
|
+
|
32
|
+
Args:
|
33
|
+
data: CSV data.
|
34
|
+
|
35
|
+
Returns:
|
36
|
+
Enumeration fields and missing fields.
|
37
|
+
|
38
|
+
"""
|
39
|
+
reader = csv.reader(data)
|
40
|
+
next(reader) # header
|
41
|
+
|
42
|
+
enum = [] # type: list[str]
|
43
|
+
miss = [] # type: list[str]
|
44
|
+
for item in reader:
|
45
|
+
long = item[1]
|
46
|
+
rfcs = item[2]
|
47
|
+
|
48
|
+
split = long.split(' (')
|
49
|
+
if len(split) == 2:
|
50
|
+
name = re.sub(r'\[\d+\]', '', split[0]).strip()
|
51
|
+
cmmt = f' ({split[1][:-1]})'
|
52
|
+
else:
|
53
|
+
name, cmmt = re.sub(r'\[\d+\]', '', long).strip(), ''
|
54
|
+
|
55
|
+
temp = [] # type: list[str]
|
56
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
57
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
58
|
+
#temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
59
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
60
|
+
else:
|
61
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
62
|
+
lrfc = f" {''.join(temp)}" if rfcs else ''
|
63
|
+
desc = self.wrap_comment(f'{name}{cmmt}{lrfc}')
|
64
|
+
|
65
|
+
try:
|
66
|
+
code = int(item[0])
|
67
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
68
|
+
|
69
|
+
pres = f"{renm} = {code}"
|
70
|
+
sufs = f"#: {desc}"
|
71
|
+
|
72
|
+
#if len(pres) > 74:
|
73
|
+
# sufs = f"\n{' '*80}{sufs}"
|
74
|
+
|
75
|
+
#enum.append(f'{pres.ljust(76)}{sufs}')
|
76
|
+
enum.append(f'{sufs}\n {pres}')
|
77
|
+
except ValueError:
|
78
|
+
start, stop = item[0].split('-')
|
79
|
+
|
80
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
81
|
+
miss.append(f' #: {desc}')
|
82
|
+
miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
|
83
|
+
return enum, miss
|
84
|
+
|
85
|
+
|
86
|
+
if __name__ == '__main__':
|
87
|
+
sys.exit(Routing()) # type: ignore[arg-type]
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Seed-ID Types
|
3
|
+
===================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.seed_id
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Seed-ID Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.seed_id.SeedID`.
|
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__ = ['SeedID']
|
22
|
+
|
23
|
+
#: Seed-ID type registry [:rfc:`7731`].
|
24
|
+
DATA = {
|
25
|
+
0b00: 'IPv6 Source Address', # [RFC 7731]
|
26
|
+
0b01: '16-Bit Unsigned Integer', # [RFC 7731]
|
27
|
+
0b10: '64-Bit Unsigned Integer', # [RFC 7731]
|
28
|
+
0b11: '128-Bit Unsigned Integer', # [RFC 7731]
|
29
|
+
} # type: dict[int, str]
|
30
|
+
|
31
|
+
|
32
|
+
class SeedID(Vendor):
|
33
|
+
"""Seed-ID Types"""
|
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 (:attr:`~pcapkit.vendor.ipv6.seed_id.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 process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
60
|
+
"""Process registry data.
|
61
|
+
|
62
|
+
Args:
|
63
|
+
data: Registry data.
|
64
|
+
|
65
|
+
Returns:
|
66
|
+
Enumeration fields and missing fields.
|
67
|
+
|
68
|
+
"""
|
69
|
+
enum = [] # type: list[str]
|
70
|
+
miss = [
|
71
|
+
"return extend_enum(cls, 'Unassigned_0b%s' % bin(value)[2:].zfill(2), value)",
|
72
|
+
]
|
73
|
+
for code, name in data.items():
|
74
|
+
bncd = f'0b{bin(code)[2:].zfill(2)}'
|
75
|
+
renm = self.rename(name, bncd).upper()
|
76
|
+
enum.append(f"{renm} = {bncd}".ljust(76))
|
77
|
+
return enum, miss
|
78
|
+
|
79
|
+
|
80
|
+
if __name__ == '__main__':
|
81
|
+
sys.exit(SeedID()) # type: ignore[arg-type]
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Simplified Multicast Forwarding Duplicate Packet Detection (``SMF_DPD``) Options
|
3
|
+
======================================================================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.smf_dpd_mode
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Simplified Multicast Forwarding Duplicate Packet Detection (``SMF_DPD``) Options**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.smf_dpd_mode.SMFDPDMode`.
|
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__ = ['SMFDPDMode']
|
22
|
+
|
23
|
+
#: ``SMF_DPD`` mode registry.
|
24
|
+
DATA = {
|
25
|
+
0: 'I-DPD',
|
26
|
+
1: 'H-DPD',
|
27
|
+
} # type: dict[int, str]
|
28
|
+
|
29
|
+
|
30
|
+
class SMFDPDMode(Vendor):
|
31
|
+
"""Simplified Multicast Forwarding Duplicate Packet Detection (``SMF_DPD``) Options"""
|
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.ipv6.smf_dpd_mode.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) # 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(SMFDPDMode()) # type: ignore[arg-type]
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""TaggerID Types
|
3
|
+
====================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ipv6.tagger_id
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **TaggerID Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ipv6.tagger_id.TaggerID`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
__all__ = ['TaggerID']
|
19
|
+
|
20
|
+
|
21
|
+
class TaggerID(Vendor):
|
22
|
+
"""TaggerID Types"""
|
23
|
+
|
24
|
+
#: Value limit checker.
|
25
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 7'
|
26
|
+
#: Link to registry.
|
27
|
+
LINK = 'https://www.iana.org/assignments/ipv6-parameters/taggerId-types.csv'
|
28
|
+
|
29
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
30
|
+
"""Process CSV data.
|
31
|
+
|
32
|
+
Args:
|
33
|
+
data: CSV data.
|
34
|
+
|
35
|
+
Returns:
|
36
|
+
Enumeration fields and missing fields.
|
37
|
+
|
38
|
+
"""
|
39
|
+
reader = csv.reader(data)
|
40
|
+
next(reader) # header
|
41
|
+
|
42
|
+
enum = [] # type: list[str]
|
43
|
+
miss = [] # type: list[str]
|
44
|
+
for item in reader:
|
45
|
+
name = item[1] or item[2]
|
46
|
+
rfcs = item[3]
|
47
|
+
|
48
|
+
temp = [] # type: list[str]
|
49
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
50
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
51
|
+
#temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
52
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
53
|
+
else:
|
54
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
55
|
+
desc = self.wrap_comment(re.sub(r'\r*\n', ' ', '%s %s' % ( # pylint: disable=consider-using-f-string
|
56
|
+
name, ''.join(temp) if rfcs else '',
|
57
|
+
), re.MULTILINE))
|
58
|
+
|
59
|
+
try:
|
60
|
+
code, _ = item[0], int(item[0])
|
61
|
+
renm = self.rename(name, code)
|
62
|
+
|
63
|
+
pres = f"{renm} = {code}"
|
64
|
+
sufs = f'#: {desc}'
|
65
|
+
|
66
|
+
#if len(pres) > 74:
|
67
|
+
# sufs = f"\n{' '*80}{sufs}"
|
68
|
+
|
69
|
+
#enum.append(f'{pres.ljust(76)}{sufs}')
|
70
|
+
enum.append(f'{sufs}\n {pres}')
|
71
|
+
except ValueError:
|
72
|
+
start, stop = item[0].split('-')
|
73
|
+
|
74
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
75
|
+
miss.append(f' #: {desc}')
|
76
|
+
miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
|
77
|
+
return enum, miss
|
78
|
+
|
79
|
+
|
80
|
+
if __name__ == '__main__':
|
81
|
+
sys.exit(TaggerID()) # type: ignore[arg-type]
|