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,88 @@
|
|
1
|
+
#
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
"""Pseudo Home Address Acknowledgement Status Codes
|
4
|
+
======================================================
|
5
|
+
|
6
|
+
.. module:: pcapkit.vendor.mh.ack_status_code
|
7
|
+
|
8
|
+
This module contains the vendor crawler for **Pseudo Home Address Acknowledgement Status Codes**,
|
9
|
+
which is automatically generating :class:`pcapkit.const.mh.ack_status_code.ACKStatusCode`.
|
10
|
+
|
11
|
+
"""
|
12
|
+
|
13
|
+
import csv
|
14
|
+
import re
|
15
|
+
import sys
|
16
|
+
|
17
|
+
from pcapkit.vendor.default import Vendor
|
18
|
+
|
19
|
+
__all__ = ['ACKStatusCode']
|
20
|
+
|
21
|
+
|
22
|
+
class ACKStatusCode(Vendor):
|
23
|
+
"""Pseudo Home Address Acknowledgement Status Codes"""
|
24
|
+
|
25
|
+
#: Value limit checker.
|
26
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 255'
|
27
|
+
#: Link to registry.
|
28
|
+
LINK = 'https://www.iana.org/assignments/mobility-parameters/mobility-parameters-4.csv'
|
29
|
+
|
30
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
31
|
+
"""Process CSV data.
|
32
|
+
|
33
|
+
Args:
|
34
|
+
data: CSV data.
|
35
|
+
|
36
|
+
Returns:
|
37
|
+
Enumeration fields and missing fields.
|
38
|
+
|
39
|
+
"""
|
40
|
+
reader = csv.reader(data)
|
41
|
+
next(reader) # header
|
42
|
+
|
43
|
+
enum = [] # type: list[str]
|
44
|
+
miss = [] # type: list[str]
|
45
|
+
for item in reader:
|
46
|
+
long = item[1]
|
47
|
+
rfcs = item[2]
|
48
|
+
|
49
|
+
temp = [] # type: list[str]
|
50
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
51
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
52
|
+
# temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
53
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
54
|
+
else:
|
55
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
56
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
57
|
+
|
58
|
+
split = long.split(' (', 1)
|
59
|
+
if len(split) == 2:
|
60
|
+
name = split[0]
|
61
|
+
cmmt = f" ({split[1]}"
|
62
|
+
else:
|
63
|
+
name, cmmt = long, ''
|
64
|
+
desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
|
65
|
+
|
66
|
+
try:
|
67
|
+
code, _ = item[0], int(item[0])
|
68
|
+
renm = self.rename(name, code, original=long)
|
69
|
+
|
70
|
+
pres = f"{renm} = {code}"
|
71
|
+
sufs = f'#: {desc}'
|
72
|
+
|
73
|
+
# if len(pres) > 74:
|
74
|
+
# sufs = f"\n{' '*80}{sufs}"
|
75
|
+
|
76
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
77
|
+
enum.append(f'{sufs}\n {pres}')
|
78
|
+
except ValueError:
|
79
|
+
start, stop = item[0].split('-')
|
80
|
+
|
81
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
82
|
+
miss.append(f' #: {desc}')
|
83
|
+
miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%d' % value, value)")
|
84
|
+
return enum, miss
|
85
|
+
|
86
|
+
|
87
|
+
if __name__ == '__main__':
|
88
|
+
sys.exit(ACKStatusCode()) # type: ignore[arg-type]
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Access Network Information (ANI) Sub-Option Type Values
|
3
|
+
=============================================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.mh.ani_suboption
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Access Network Information (ANI) Sub-Option Type Values**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.mh.ani_suboption.ANISuboption`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
__all__ = ['ANISuboption']
|
19
|
+
|
20
|
+
|
21
|
+
class ANISuboption(Vendor):
|
22
|
+
"""Access Network Information (ANI) Sub-Option Type Values"""
|
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/mobility-parameters/ani.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
|
+
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
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
56
|
+
|
57
|
+
split = long.split(' (', 1)
|
58
|
+
if len(split) == 2:
|
59
|
+
name = split[0]
|
60
|
+
cmmt = f" ({split[1]}"
|
61
|
+
else:
|
62
|
+
name, cmmt = long, ''
|
63
|
+
desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
|
64
|
+
|
65
|
+
try:
|
66
|
+
code, _ = item[0], int(item[0])
|
67
|
+
renm = self.rename(name.replace('sub-option', '').strip(),
|
68
|
+
code, original=long)
|
69
|
+
|
70
|
+
pres = f"{renm} = {code}"
|
71
|
+
sufs = f'#: {desc}'
|
72
|
+
|
73
|
+
# if len(pres) > 74:
|
74
|
+
# sufs = f"\n{' '*80}{sufs}"
|
75
|
+
|
76
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
77
|
+
enum.append(f'{sufs}\n {pres}')
|
78
|
+
except ValueError:
|
79
|
+
start, stop = item[0].split('-')
|
80
|
+
|
81
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
82
|
+
miss.append(f' #: {desc}')
|
83
|
+
miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%d' % value, value)")
|
84
|
+
return enum, miss
|
85
|
+
|
86
|
+
|
87
|
+
if __name__ == '__main__':
|
88
|
+
sys.exit(ANISuboption()) # type: ignore[arg-type]
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Subtype Field of the MN-HA and MN-AAA Authentication Mobility Options
|
3
|
+
==========================================================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.mh.auth_subtype
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Subtype Field of the MN-HA and MN-AAA Authentication Mobility Options**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.mh.auth_subtype.AuthSubtype`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
__all__ = ['AuthSubtype']
|
19
|
+
|
20
|
+
|
21
|
+
class AuthSubtype(Vendor):
|
22
|
+
"""Subtype Field of the MN-HA and MN-AAA Authentication Mobility Options"""
|
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/mobility-parameters/mobility-parameters-8.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 = [
|
44
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
45
|
+
]
|
46
|
+
for item in reader:
|
47
|
+
long = item[1]
|
48
|
+
rfcs = item[2]
|
49
|
+
|
50
|
+
temp = [] # type: list[str]
|
51
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
52
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
53
|
+
# temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
54
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
55
|
+
else:
|
56
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
57
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
58
|
+
|
59
|
+
split = long.split(' (', 1)
|
60
|
+
if len(split) == 2:
|
61
|
+
name = split[0]
|
62
|
+
cmmt = f" ({split[1]}"
|
63
|
+
else:
|
64
|
+
name, cmmt = long, ''
|
65
|
+
desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
|
66
|
+
|
67
|
+
code, _ = item[0], int(item[0])
|
68
|
+
renm = self.rename(name.replace(' authentication mobility option', ''),
|
69
|
+
code, original=long)
|
70
|
+
|
71
|
+
pres = f"{renm} = {code}"
|
72
|
+
sufs = f'#: {desc}'
|
73
|
+
|
74
|
+
# if len(pres) > 74:
|
75
|
+
# sufs = f"\n{' '*80}{sufs}"
|
76
|
+
|
77
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
78
|
+
enum.append(f'{sufs}\n {pres}')
|
79
|
+
return enum, miss
|
80
|
+
|
81
|
+
|
82
|
+
if __name__ == '__main__':
|
83
|
+
sys.exit(AuthSubtype()) # type: ignore[arg-type]
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Binding Acknowledgment Flags
|
3
|
+
==================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.mh.binding_ack_flag
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Binding Acknowledgment Flags**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.mh.binding_ack_flag.BindingACKFlag`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
from typing import TYPE_CHECKING
|
16
|
+
|
17
|
+
from pcapkit.vendor.default import Vendor
|
18
|
+
|
19
|
+
__all__ = ['BindingACKFlag']
|
20
|
+
|
21
|
+
if TYPE_CHECKING:
|
22
|
+
from typing import Callable
|
23
|
+
|
24
|
+
|
25
|
+
LINE = lambda NAME, DOCS, FLAG, ENUM, MODL: f'''\
|
26
|
+
# -*- coding: utf-8 -*-
|
27
|
+
# pylint: disable=line-too-long,consider-using-f-string
|
28
|
+
"""{(name := DOCS.split(' [', maxsplit=1)[0])}
|
29
|
+
{'=' * (len(name) + 6)}
|
30
|
+
|
31
|
+
.. module:: {MODL.replace('vendor', 'const')}
|
32
|
+
|
33
|
+
This module contains the constant enumeration for **{name}**,
|
34
|
+
which is automatically generated from :class:`{MODL}.{NAME}`.
|
35
|
+
|
36
|
+
"""
|
37
|
+
|
38
|
+
from aenum import IntFlag
|
39
|
+
|
40
|
+
__all__ = ['{NAME}']
|
41
|
+
|
42
|
+
|
43
|
+
class {NAME}(IntFlag):
|
44
|
+
"""[{NAME}] {DOCS}"""
|
45
|
+
|
46
|
+
{ENUM}
|
47
|
+
|
48
|
+
@staticmethod
|
49
|
+
def get(key: 'int | str', default: 'int' = -1) -> '{NAME}':
|
50
|
+
"""Backport support for original codes.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
key: Key to get enum item.
|
54
|
+
default: Default value if not found.
|
55
|
+
|
56
|
+
:meta private:
|
57
|
+
"""
|
58
|
+
if isinstance(key, int):
|
59
|
+
return {NAME}(key)
|
60
|
+
return {NAME}[key] # type: ignore[misc]
|
61
|
+
|
62
|
+
@classmethod
|
63
|
+
def _missing_(cls, value: 'int') -> '{NAME}':
|
64
|
+
"""Lookup function used when value is not found.
|
65
|
+
|
66
|
+
Args:
|
67
|
+
value: Value to get enum item.
|
68
|
+
|
69
|
+
"""
|
70
|
+
if not ({FLAG}):
|
71
|
+
raise ValueError('%r is not a valid %s' % (value, cls.__name__))
|
72
|
+
return cls(value)
|
73
|
+
''' # type: Callable[[str, str, str, str, str], str]
|
74
|
+
|
75
|
+
|
76
|
+
class BindingACKFlag(Vendor):
|
77
|
+
"""Binding Acknowledgment Flags"""
|
78
|
+
|
79
|
+
#: Value limit checker.
|
80
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 0xFF'
|
81
|
+
#: Link to registry.
|
82
|
+
LINK = 'https://www.iana.org/assignments/mobility-parameters/mobility-parameters-12.csv'
|
83
|
+
|
84
|
+
def process(self, data: 'list[str]') -> 'list[str]': # type: ignore[override] # pylint: disable=arguments-differ,arguments-renamed
|
85
|
+
"""Process CSV data.
|
86
|
+
|
87
|
+
Args:
|
88
|
+
data: CSV data.
|
89
|
+
|
90
|
+
Returns:
|
91
|
+
Enumeration fields and missing fields.
|
92
|
+
|
93
|
+
"""
|
94
|
+
reader = csv.reader(data)
|
95
|
+
next(reader) # header
|
96
|
+
|
97
|
+
enum = [] # type: list[str]
|
98
|
+
for item in reader:
|
99
|
+
long = item[0]
|
100
|
+
rfcs = item[2]
|
101
|
+
|
102
|
+
temp = [] # type: list[str]
|
103
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
104
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
105
|
+
# temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
106
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
107
|
+
else:
|
108
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
109
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
110
|
+
|
111
|
+
split = long.split(' (', 1)
|
112
|
+
if len(split) == 2:
|
113
|
+
name = split[0]
|
114
|
+
cmmt = f" ({split[1]}"
|
115
|
+
else:
|
116
|
+
name, cmmt = long, ''
|
117
|
+
desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
|
118
|
+
|
119
|
+
code, code_val = item[1], int(item[1], base=16)
|
120
|
+
renm = self.rename(name, code, original=long)
|
121
|
+
|
122
|
+
pres = f"{renm} = 0x{code_val:02x}"
|
123
|
+
sufs = f'#: {desc}'
|
124
|
+
|
125
|
+
# if len(pres) > 74:
|
126
|
+
# sufs = f"\n{' '*80}{sufs}"
|
127
|
+
|
128
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
129
|
+
enum.append(f'{sufs}\n {pres}')
|
130
|
+
return enum
|
131
|
+
|
132
|
+
def context(self, data: 'list[str]') -> 'str': # pylint: disable=arguments-differ,arguments-renamed
|
133
|
+
"""Generate constant context.
|
134
|
+
|
135
|
+
Args:
|
136
|
+
soup: Parsed HTML source.
|
137
|
+
|
138
|
+
Returns:
|
139
|
+
Constant context.
|
140
|
+
|
141
|
+
"""
|
142
|
+
enum = self.process(data)
|
143
|
+
ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum))
|
144
|
+
return LINE(self.NAME, self.DOCS, self.FLAG, ENUM, self.__module__)
|
145
|
+
|
146
|
+
|
147
|
+
if __name__ == '__main__':
|
148
|
+
sys.exit(BindingACKFlag()) # type: ignore[arg-type]
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Binding Error Status Code
|
3
|
+
===============================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.mh.binding_error
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Binding Error Status Code**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.mh.binding_error.BindingError`.
|
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__ = ['BindingError']
|
22
|
+
|
23
|
+
#: Binding error codes.
|
24
|
+
DATA = {
|
25
|
+
1: 'Unknown binding for Home Address destination option',
|
26
|
+
2: 'Unrecognized MH Type value',
|
27
|
+
} # type: dict[int, str]
|
28
|
+
|
29
|
+
|
30
|
+
class BindingError(Vendor):
|
31
|
+
"""Binding Error Status Code"""
|
32
|
+
|
33
|
+
#: Value limit checker.
|
34
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 255'
|
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.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(BindingError()) # type: ignore[arg-type]
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Binding Revocation Type
|
3
|
+
=============================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.mh.binding_revocation
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Binding Revocation Type**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.mh.binding_revocation.BindingRevocation`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
__all__ = ['BindingRevocation']
|
19
|
+
|
20
|
+
|
21
|
+
class BindingRevocation(Vendor):
|
22
|
+
"""Binding Revocation Type"""
|
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/mobility-parameters/binding-revocation-type.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
|
+
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
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
56
|
+
|
57
|
+
split = long.split(' (', 1)
|
58
|
+
if len(split) == 2:
|
59
|
+
name = split[0]
|
60
|
+
cmmt = f" ({split[1]}"
|
61
|
+
else:
|
62
|
+
name, cmmt = long, ''
|
63
|
+
desc = self.wrap_comment(f'{name}{cmmt}{tmp1}')
|
64
|
+
|
65
|
+
try:
|
66
|
+
code, _ = item[0], int(item[0])
|
67
|
+
renm = self.rename(name, code, original=long)
|
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, '{self.safe_name(name)}_%d' % value, value)")
|
83
|
+
return enum, miss
|
84
|
+
|
85
|
+
|
86
|
+
if __name__ == '__main__':
|
87
|
+
sys.exit(BindingRevocation()) # type: ignore[arg-type]
|