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,244 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""FTP Command
|
3
|
+
=================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ftp.command
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **FTP Command**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ftp.command.Command`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
import collections
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
from typing import TYPE_CHECKING, cast
|
16
|
+
|
17
|
+
from pcapkit.vendor.default import Vendor
|
18
|
+
|
19
|
+
if TYPE_CHECKING:
|
20
|
+
from collections import OrderedDict
|
21
|
+
from typing import Callable
|
22
|
+
|
23
|
+
__all__ = ['Command']
|
24
|
+
|
25
|
+
#: Command type.
|
26
|
+
KIND = {
|
27
|
+
'a': 'CommandType.A',
|
28
|
+
'p': 'CommandType.P',
|
29
|
+
's': 'CommandType.S',
|
30
|
+
} # type: dict[str, str]
|
31
|
+
|
32
|
+
#: Conformance requirements.
|
33
|
+
CONF = {
|
34
|
+
'm': 'ConformanceRequirement.M',
|
35
|
+
'o': 'ConformanceRequirement.O',
|
36
|
+
'h': 'ConformanceRequirement.H',
|
37
|
+
} # type: dict[str, str]
|
38
|
+
|
39
|
+
#: Default constant template of enumerate registry from IANA CSV.
|
40
|
+
LINE = lambda NAME, DOCS, ENUM, MODL: f'''\
|
41
|
+
# -*- coding: utf-8 -*-
|
42
|
+
# mypy: disable-error-code=assignment
|
43
|
+
# pylint: disable=line-too-long,consider-using-f-string
|
44
|
+
"""{(name := DOCS.split(' [', maxsplit=1)[0])}
|
45
|
+
{'=' * (len(name) + 6)}
|
46
|
+
|
47
|
+
.. module:: {MODL.replace('vendor', 'const')}
|
48
|
+
|
49
|
+
This module contains the constant enumeration for **{name}**,
|
50
|
+
which is automatically generated from :class:`{MODL}.{NAME}`.
|
51
|
+
|
52
|
+
"""
|
53
|
+
|
54
|
+
from typing import TYPE_CHECKING
|
55
|
+
|
56
|
+
from aenum import IntEnum, IntFlag, StrEnum, auto, extend_enum
|
57
|
+
|
58
|
+
if TYPE_CHECKING:
|
59
|
+
from typing import Optional, Type
|
60
|
+
|
61
|
+
__all__ = ['{NAME}']
|
62
|
+
|
63
|
+
|
64
|
+
class FEATCode(StrEnum):
|
65
|
+
"""Keyword returned in FEAT response line for this command/extension,
|
66
|
+
c.f., :rfc:`5797#secion-3`."""
|
67
|
+
|
68
|
+
#: FTP standard commands [:rfc:`0959`].
|
69
|
+
base = '<base>'
|
70
|
+
#: Historic experimental commands [:rfc:`0775`][:rfc:`1639`].
|
71
|
+
hist = '<hist>'
|
72
|
+
#: FTP Security Extensions [:rfc:`2228`].
|
73
|
+
secu = '<secu>'
|
74
|
+
#: FTP Feature Negotiation [:rfc:`2389`].
|
75
|
+
feat = '<feat>'
|
76
|
+
#: FTP Extensions for NAT/IPv6 [:rfc:`2428`].
|
77
|
+
nat6 = '<nat6>'
|
78
|
+
|
79
|
+
def __repr__(self) -> 'str':
|
80
|
+
return "<%s [%s]>" % (self.__class__.__name__, self._name_)
|
81
|
+
|
82
|
+
@classmethod
|
83
|
+
def _missing_(cls, value: 'str') -> 'FEATCode':
|
84
|
+
"""Lookup function used when value is not found.
|
85
|
+
|
86
|
+
Args:
|
87
|
+
value: Value to get enum item.
|
88
|
+
|
89
|
+
"""
|
90
|
+
return extend_enum(cls, value.upper(), value)
|
91
|
+
|
92
|
+
|
93
|
+
class CommandType(IntFlag):
|
94
|
+
"""Type of "kind" of command, based on :rfc:`959#section-4.1`."""
|
95
|
+
|
96
|
+
undefined = 0
|
97
|
+
|
98
|
+
#: Access control.
|
99
|
+
A = auto()
|
100
|
+
#: Parameter setting.
|
101
|
+
P = auto()
|
102
|
+
#: Service execution.
|
103
|
+
S = auto()
|
104
|
+
|
105
|
+
|
106
|
+
class ConformanceRequirement(IntEnum):
|
107
|
+
"""Expectation for support in modern FTP implementations."""
|
108
|
+
|
109
|
+
#: Mandatory to implement.
|
110
|
+
M = auto()
|
111
|
+
#: Optional.
|
112
|
+
O = auto()
|
113
|
+
#: Historic.
|
114
|
+
H = auto()
|
115
|
+
|
116
|
+
|
117
|
+
class {NAME}(StrEnum):
|
118
|
+
"""[{NAME}] {DOCS}"""
|
119
|
+
|
120
|
+
if TYPE_CHECKING:
|
121
|
+
#: Feature code. Keyword returned in FEAT response line for this command/extension,
|
122
|
+
#: c.f., :rfc:`5797#secion-2.2`.
|
123
|
+
feat: 'Optional[FEATCode]'
|
124
|
+
#: Brief description of command / extension.
|
125
|
+
desc: 'Optional[str]'
|
126
|
+
#: Type of "kind" of command, based on :rfc:`959#section-4.1`.
|
127
|
+
type: 'CommandType'
|
128
|
+
#: Expectation for support in modern FTP implementations.
|
129
|
+
conf: 'ConformanceRequirement'
|
130
|
+
|
131
|
+
def __new__(cls, name: 'str', feat: 'Optional[FEATCode]' = None,
|
132
|
+
desc: 'Optional[str]' = None, type: 'CommandType' = CommandType.undefined,
|
133
|
+
conf: 'ConformanceRequirement' = ConformanceRequirement.O) -> 'Type[{NAME}]':
|
134
|
+
obj = str.__new__(cls, name)
|
135
|
+
obj._value_ = name
|
136
|
+
|
137
|
+
obj.feat = feat
|
138
|
+
obj.desc = desc
|
139
|
+
obj.type = type
|
140
|
+
obj.conf = conf
|
141
|
+
|
142
|
+
return obj
|
143
|
+
|
144
|
+
def __repr__(self) -> 'str':
|
145
|
+
return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, self.desc)
|
146
|
+
|
147
|
+
{ENUM}
|
148
|
+
|
149
|
+
@staticmethod
|
150
|
+
def get(key: 'str', default: 'Optional[str]' = None) -> '{NAME}':
|
151
|
+
"""Backport support for original codes.
|
152
|
+
|
153
|
+
Args:
|
154
|
+
key: Key to get enum item.
|
155
|
+
default: Default value if not found.
|
156
|
+
|
157
|
+
:meta private:
|
158
|
+
"""
|
159
|
+
if key not in {NAME}._member_map_: # pylint: disable=no-member
|
160
|
+
return extend_enum({NAME}, key.upper(), default if default is not None else key)
|
161
|
+
return {NAME}[key] # type: ignore[misc]
|
162
|
+
|
163
|
+
@classmethod
|
164
|
+
def _missing_(cls, value: 'str') -> '{NAME}':
|
165
|
+
"""Lookup function used when value is not found.
|
166
|
+
|
167
|
+
Args:
|
168
|
+
value: Value to get enum item.
|
169
|
+
|
170
|
+
"""
|
171
|
+
return extend_enum(cls, value.upper(), value)
|
172
|
+
'''.strip() # type: Callable[[str, str, str, str], str]
|
173
|
+
|
174
|
+
|
175
|
+
class Command(Vendor):
|
176
|
+
"""FTP Command"""
|
177
|
+
|
178
|
+
#: Link to registry.
|
179
|
+
LINK = 'https://www.iana.org/assignments/ftp-commands-extensions/ftp-commands-extensions-2.csv'
|
180
|
+
|
181
|
+
def process(self, data: 'list[str]') -> 'list[str]': # type: ignore[override]
|
182
|
+
"""Process CSV data.
|
183
|
+
|
184
|
+
Args:
|
185
|
+
data: CSV data.
|
186
|
+
|
187
|
+
Returns:
|
188
|
+
Enumeration fields.
|
189
|
+
|
190
|
+
"""
|
191
|
+
reader = csv.reader(data)
|
192
|
+
next(reader) # header
|
193
|
+
|
194
|
+
enum = collections.OrderedDict() # type: OrderedDict[str, str]
|
195
|
+
for item in reader:
|
196
|
+
cmmd = item[0].strip('+')
|
197
|
+
feat = item[1] or None
|
198
|
+
desc = re.sub(r'{.*}', r'', item[2]).strip() or None
|
199
|
+
kind = ' | '.join(KIND[s] for s in item[3].split('/') if s in KIND) or None
|
200
|
+
conf = CONF.get(item[4].split()[0])
|
201
|
+
|
202
|
+
temp = [] # type: list[str]
|
203
|
+
#for rfc in filter(lambda s: 'RFC' in s, re.split(r'\[|\]', item[5])):
|
204
|
+
# temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
205
|
+
for rfc in filter(None, map(lambda s: s.strip(), re.split(r'\[|\]', item[5]))):
|
206
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
207
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
208
|
+
else:
|
209
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
210
|
+
cmmt = self.wrap_comment('%s %s' % (desc, ''.join(temp))) # pylint: disable=consider-using-f-string
|
211
|
+
|
212
|
+
if cmmd == '-N/A-':
|
213
|
+
cmmd = cast('str', feat)
|
214
|
+
|
215
|
+
if isinstance(feat, str):
|
216
|
+
if not feat.isupper():
|
217
|
+
feat = f'FEATCode.{feat}'
|
218
|
+
else:
|
219
|
+
feat = f'FEATCode({feat!r})'
|
220
|
+
|
221
|
+
pres = f"{cmmd}: 'Command' = {cmmd!r}, {feat}, {desc!r}, {kind or 0}, {conf}"
|
222
|
+
sufs = f'#: {cmmt}'
|
223
|
+
|
224
|
+
enum[cmmd] = f'{sufs}\n {pres}'
|
225
|
+
return list(enum.values())
|
226
|
+
|
227
|
+
def context(self, data: 'list[str]') -> 'str':
|
228
|
+
"""Generate constant context.
|
229
|
+
|
230
|
+
Args:
|
231
|
+
data: CSV data.
|
232
|
+
|
233
|
+
Returns:
|
234
|
+
Constant context.
|
235
|
+
|
236
|
+
"""
|
237
|
+
enum = self.process(data)
|
238
|
+
ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum)).strip()
|
239
|
+
|
240
|
+
return LINE(self.NAME, self.DOCS, ENUM, self.__module__)
|
241
|
+
|
242
|
+
|
243
|
+
if __name__ == '__main__':
|
244
|
+
sys.exit(Command()) # type: ignore[arg-type]
|
@@ -0,0 +1,256 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""FTP Server Return Code
|
3
|
+
============================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.ftp.return_code
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **FTP Server Return Code**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.ftp.return_code.ReturnCode`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
from typing import TYPE_CHECKING
|
16
|
+
|
17
|
+
import bs4
|
18
|
+
|
19
|
+
from pcapkit.vendor.default import Vendor
|
20
|
+
|
21
|
+
if TYPE_CHECKING:
|
22
|
+
from collections import Counter
|
23
|
+
from typing import Callable
|
24
|
+
|
25
|
+
from bs4 import BeautifulSoup
|
26
|
+
|
27
|
+
__all__ = ['ReturnCode']
|
28
|
+
|
29
|
+
LINE = lambda NAME, DOCS, FLAG, ENUM, MODL: f'''\
|
30
|
+
# -*- coding: utf-8 -*-
|
31
|
+
# mypy: disable-error-code=assignment
|
32
|
+
# pylint: disable=line-too-long,consider-using-f-string
|
33
|
+
"""{(name := DOCS.split(' [', maxsplit=1)[0])}
|
34
|
+
{'=' * (len(name) + 6)}
|
35
|
+
|
36
|
+
.. module:: {MODL.replace('vendor', 'const')}
|
37
|
+
|
38
|
+
This module contains the constant enumeration for **{name}**,
|
39
|
+
which is automatically generated from :class:`{MODL}.{NAME}`.
|
40
|
+
|
41
|
+
"""
|
42
|
+
|
43
|
+
from typing import TYPE_CHECKING
|
44
|
+
|
45
|
+
from aenum import IntEnum, extend_enum
|
46
|
+
|
47
|
+
if TYPE_CHECKING:
|
48
|
+
from typing import Optional, Type
|
49
|
+
|
50
|
+
__all__ = ['{NAME}']
|
51
|
+
|
52
|
+
#: Grouping information.
|
53
|
+
INFO = {{
|
54
|
+
'0': 'Syntax',
|
55
|
+
'1': 'Information',
|
56
|
+
'2': 'Connections',
|
57
|
+
'3': 'Authentication and accounting',
|
58
|
+
'4': 'Unspecified', # [RFC 959]
|
59
|
+
'5': 'File system',
|
60
|
+
}} # type: dict[str, str]
|
61
|
+
|
62
|
+
|
63
|
+
class ResponseKind(IntEnum):
|
64
|
+
"""Response kind; whether the response is good, bad or incomplete."""
|
65
|
+
|
66
|
+
PositivePreliminary = 1
|
67
|
+
PositiveCompletion = 2
|
68
|
+
PositiveIntermediate = 3
|
69
|
+
TransientNegativeCompletion = 4
|
70
|
+
PermanentNegativeCompletion = 5
|
71
|
+
Protected = 6
|
72
|
+
|
73
|
+
def _missing_(cls, value: 'int') -> 'ResponseKind':
|
74
|
+
"""Lookup function used when value is not found.
|
75
|
+
|
76
|
+
Args:
|
77
|
+
value: Value to lookup.
|
78
|
+
|
79
|
+
"""
|
80
|
+
if isinstance(value, int) and 0 <= value <= 9:
|
81
|
+
return extend_enum(cls, 'Unknown_%d' % value, value)
|
82
|
+
return super()._missing_(value)
|
83
|
+
|
84
|
+
|
85
|
+
class GroupingInformation(IntEnum):
|
86
|
+
"""Grouping information."""
|
87
|
+
|
88
|
+
Syntax = 0
|
89
|
+
Information = 1
|
90
|
+
Connections = 2
|
91
|
+
AuthenticationAccounting = 3
|
92
|
+
Unspecified = 4
|
93
|
+
FileSystem = 5
|
94
|
+
|
95
|
+
def _missing_(cls, value: 'int') -> 'GroupingInformation':
|
96
|
+
"""Lookup function used when value is not found.
|
97
|
+
|
98
|
+
Args:
|
99
|
+
value: Value to lookup.
|
100
|
+
|
101
|
+
"""
|
102
|
+
if isinstance(value, int) and 0 <= value <= 9:
|
103
|
+
return extend_enum(cls, 'Unknown_%d' % value, value)
|
104
|
+
return super()._missing_(value)
|
105
|
+
|
106
|
+
|
107
|
+
class {NAME}(IntEnum):
|
108
|
+
"""[{NAME}] {DOCS}"""
|
109
|
+
|
110
|
+
if TYPE_CHECKING:
|
111
|
+
#: Description of the return code.
|
112
|
+
description: 'Optional[str]'
|
113
|
+
#: Response kind.
|
114
|
+
kind: 'ResponseKind'
|
115
|
+
#: Grouping information.
|
116
|
+
group: 'GroupingInformation'
|
117
|
+
|
118
|
+
def __new__(cls, value: 'int', description: 'Optional[str]' = None) -> 'Type[{NAME}]':
|
119
|
+
obj = int.__new__(cls, value)
|
120
|
+
obj._value_ = value
|
121
|
+
|
122
|
+
code = str(value)
|
123
|
+
obj.description = description
|
124
|
+
obj.kind = ResponseKind(int(code[0]))
|
125
|
+
obj.group = GroupingInformation(int(code[1]))
|
126
|
+
|
127
|
+
return obj
|
128
|
+
|
129
|
+
def __repr__(self) -> 'str':
|
130
|
+
return "<%s [%s]>" % (self.__class__.__name__, self._value_)
|
131
|
+
|
132
|
+
def __str__(self) -> 'str':
|
133
|
+
return "[%s] %s" % (self._value_, self.description)
|
134
|
+
|
135
|
+
{ENUM}
|
136
|
+
|
137
|
+
@staticmethod
|
138
|
+
def get(key: 'int | str', default: 'int' = -1) -> '{NAME}':
|
139
|
+
"""Backport support for original codes.
|
140
|
+
|
141
|
+
Args:
|
142
|
+
key: Key to get enum item.
|
143
|
+
default: Default value if not found.
|
144
|
+
|
145
|
+
:meta private:
|
146
|
+
"""
|
147
|
+
if isinstance(key, int):
|
148
|
+
return {NAME}(key)
|
149
|
+
if key not in {NAME}._member_map_: # pylint: disable=no-member
|
150
|
+
return extend_enum({NAME}, key, default)
|
151
|
+
return {NAME}[key] # type: ignore[misc]
|
152
|
+
|
153
|
+
@classmethod
|
154
|
+
def _missing_(cls, value: 'int') -> '{NAME}':
|
155
|
+
"""Lookup function used when value is not found.
|
156
|
+
|
157
|
+
Args:
|
158
|
+
value: Value to get enum item.
|
159
|
+
|
160
|
+
"""
|
161
|
+
if not ({FLAG}):
|
162
|
+
raise ValueError('%r is not a valid %s' % (value, cls.__name__))
|
163
|
+
return extend_enum(cls, 'CODE_%s' % value, value)
|
164
|
+
''' # type: Callable[[str, str, str, str, str], str]
|
165
|
+
|
166
|
+
|
167
|
+
class ReturnCode(Vendor):
|
168
|
+
"""FTP Server Return Code"""
|
169
|
+
|
170
|
+
#: Value limit checker.
|
171
|
+
FLAG = 'isinstance(value, int) and 100 <= value <= 659'
|
172
|
+
#: Link to registry.
|
173
|
+
LINK = 'https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes'
|
174
|
+
|
175
|
+
def request(self, text: 'str') -> 'BeautifulSoup': # type: ignore[override] # pylint: disable=signature-differs
|
176
|
+
"""Fetch registry data.
|
177
|
+
|
178
|
+
Args:
|
179
|
+
text: Context from :attr:`~ReturnCode.LINK`.
|
180
|
+
|
181
|
+
Returns:
|
182
|
+
Parsed HTML source.
|
183
|
+
|
184
|
+
"""
|
185
|
+
return bs4.BeautifulSoup(text, 'html5lib')
|
186
|
+
|
187
|
+
def context(self, soup: 'BeautifulSoup') -> 'str': # pylint: disable=arguments-differ,arguments-renamed
|
188
|
+
"""Generate constant context.
|
189
|
+
|
190
|
+
Args:
|
191
|
+
soup: Parsed HTML source.
|
192
|
+
|
193
|
+
Returns:
|
194
|
+
Constant context.
|
195
|
+
|
196
|
+
"""
|
197
|
+
enum = self.process(soup)
|
198
|
+
ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum))
|
199
|
+
return LINE(self.NAME, self.DOCS, self.FLAG, ENUM, self.__module__)
|
200
|
+
|
201
|
+
def process(self, soup: 'BeautifulSoup') -> 'list[str]': # type: ignore[override] # pylint: disable=arguments-differ,arguments-renamed
|
202
|
+
"""Process registry data.
|
203
|
+
|
204
|
+
Args:
|
205
|
+
soup: Parsed HTML source.
|
206
|
+
|
207
|
+
Returns:
|
208
|
+
Enumeration fields.
|
209
|
+
|
210
|
+
"""
|
211
|
+
table = soup.find_all('table', class_='wikitable')[2]
|
212
|
+
content = filter(lambda item: isinstance(item, bs4.element.Tag), table.tbody)
|
213
|
+
next(content) # header
|
214
|
+
|
215
|
+
enum = [] # type: list[str]
|
216
|
+
for item in content:
|
217
|
+
line = item.find_all('td')
|
218
|
+
|
219
|
+
code = ' '.join(line[0].stripped_strings)
|
220
|
+
if len(code) != 3:
|
221
|
+
continue
|
222
|
+
|
223
|
+
#desc = f"{' '.join(line[1].stripped_strings).split('.')[0].strip()}."
|
224
|
+
#enum.append(f'{self.NAME}[{self.rename(desc, code)!r}] = {code}')
|
225
|
+
|
226
|
+
cmmt = re.sub(r' +', r' ', '. '.join(map(lambda s: s.strip(), ' '.join(
|
227
|
+
line[1].stripped_strings).split('.'))).replace('e. g. ,', 'e.g.,').strip())
|
228
|
+
sufs = self.wrap_comment(cmmt) # pylint: disable=line-too-long
|
229
|
+
|
230
|
+
desc = re.sub(r'\(.*\)', r'', cmmt.split('.', maxsplit=1)[0]).strip() + '.'
|
231
|
+
pref = f"CODE_{code}: 'ReturnCode' = {code}, {desc!r}"
|
232
|
+
|
233
|
+
enum.append(f'#: {sufs}\n {pref}')
|
234
|
+
return enum
|
235
|
+
|
236
|
+
def count(self, soup: 'BeautifulSoup') -> 'Counter[str]': # pylint: disable=arguments-differ,arguments-renamed,unused-argument
|
237
|
+
"""Count field records."""
|
238
|
+
#table = soup.find_all('table', class_='wikitable')[2]
|
239
|
+
#content = filter(lambda item: isinstance(item, bs4.element.Tag), table.tbody)
|
240
|
+
#next(content) # header
|
241
|
+
|
242
|
+
#temp = list()
|
243
|
+
#for item in content:
|
244
|
+
# line = item.find_all('td')
|
245
|
+
|
246
|
+
# code = ' '.join(line[0].stripped_strings)
|
247
|
+
# if len(code) != 3:
|
248
|
+
# continue
|
249
|
+
# desc = f"{' '.join(line[1].stripped_strings).split('.')[0].strip()}."
|
250
|
+
# temp.append(desc)
|
251
|
+
#return collections.Counter(temp)
|
252
|
+
return collections.Counter()
|
253
|
+
|
254
|
+
|
255
|
+
if __name__ == '__main__':
|
256
|
+
sys.exit(ReturnCode()) # type: ignore[arg-type]
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=unused-import
|
3
|
+
""":class:`~pcapkit.protocols.internet.hip.HIP` Vendor crawlers
|
4
|
+
========================================================================
|
5
|
+
|
6
|
+
.. module:: pcapkit.const.hip
|
7
|
+
|
8
|
+
This module contains all vendor crawlers of
|
9
|
+
:class:`~pcapkit.protocols.internet.hip.HIP` implementations. Available
|
10
|
+
crawlers include:
|
11
|
+
|
12
|
+
.. list-table::
|
13
|
+
|
14
|
+
* - :class:`HIP_Certificate <pcapkit.vendor.hip.certificate.Certificate>`
|
15
|
+
- HIP Certificate Types [*]_
|
16
|
+
* - :class:`HIP_Cipher <pcapkit.vendor.hip.cipher.Cipher>`
|
17
|
+
- HIP Cipher IDs [*]_
|
18
|
+
* - :class:`HIP_DITypes <pcapkit.vendor.hip.di.DITypes>`
|
19
|
+
- DI-Types [*]_
|
20
|
+
* - :class:`HIP_ECDSACurve <pcapkit.vendor.hip.ecdsa_curve.ECDSACurve>`
|
21
|
+
- ECDSA Curve Label [*]_
|
22
|
+
* - :class:`HIP_ECDSALowCurve <pcapkit.vendor.hip.ecdsa_low_curve.ECDSALowCurve>`
|
23
|
+
- ECDSA_LOW Curve Label [*]_
|
24
|
+
* - :class:`HIP_EdDSACurve <pcapkit.vendor.hip.eddsa_curve.EdDSACurve>`
|
25
|
+
- EdDSA Curve Label [*]_
|
26
|
+
* - :class:`HIP_ESPTransformSuite <pcapkit.vendor.hip.esp_transform_suite.ESPTransformSuite>`
|
27
|
+
- ESP Transform Suite IDs [*]_
|
28
|
+
* - :class:`HIP_Group <pcapkit.vendor.hip.group.Group>`
|
29
|
+
- Group IDs [*]_
|
30
|
+
* - :class:`HIP_HIAlgorithm <pcapkit.vendor.hip.hi_algorithm.HIAlgorithm>`
|
31
|
+
- HI Algorithm [*]_
|
32
|
+
* - :class:`HIP_HITSuite <pcapkit.vendor.hip.hit_suite.HITSuite>`
|
33
|
+
- HIT Suite IDs [*]_
|
34
|
+
* - :class:`HIP_NATTraversal <pcapkit.vendor.hip.nat_traversal.NATTraversal>`
|
35
|
+
- HIP NAT Traversal Modes [*]_
|
36
|
+
* - :class:`HIP_NotifyMessage <pcapkit.vendor.hip.notify_message.NotifyMessage>`
|
37
|
+
- Notify Message Types [*]_
|
38
|
+
* - :class:`HIP_Packet <pcapkit.vendor.hip.packet.Packet>`
|
39
|
+
- Packet Types [*]_
|
40
|
+
* - :class:`HIP_Parameter <pcapkit.vendor.hip.parameter.Parameter>`
|
41
|
+
- Parameter Types [*]_
|
42
|
+
* - :class:`HIP_Registration <pcapkit.vendor.hip.registration.Registration>`
|
43
|
+
- Registration Types [*]_
|
44
|
+
* - :class:`HIP_RegistrationFailure <pcapkit.vendor.hip.registration_failure.RegistrationFailure>`
|
45
|
+
- Registration Failure Types [*]_
|
46
|
+
* - :class:`HIP_Suite <pcapkit.vendor.hip.suite.Suite>`
|
47
|
+
- Suite IDs [*]_
|
48
|
+
* - :class:`HIP_Transport <pcapkit.vendor.hip.transport.Transport>`
|
49
|
+
- HIP Transport Modes [*]_
|
50
|
+
|
51
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#certificate-types
|
52
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-cipher-id
|
53
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-7
|
54
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#ecdsa-curve-label
|
55
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#ecdsa-low-curve-label
|
56
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#eddsa-curve-label
|
57
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#esp-transform-suite-ids
|
58
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-5
|
59
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hi-algorithm
|
60
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hit-suite-id
|
61
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#nat-traversal
|
62
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-9
|
63
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-1
|
64
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-4
|
65
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-11
|
66
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-13
|
67
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#hip-parameters-6
|
68
|
+
.. [*] https://www.iana.org/assignments/hip-parameters/hip-parameters.xhtml#transport-modes
|
69
|
+
|
70
|
+
"""
|
71
|
+
|
72
|
+
from pcapkit.vendor.hip.certificate import Certificate as HIP_Certificate
|
73
|
+
from pcapkit.vendor.hip.cipher import Cipher as HIP_Cipher
|
74
|
+
from pcapkit.vendor.hip.di import DITypes as HIP_DITypes
|
75
|
+
from pcapkit.vendor.hip.ecdsa_curve import ECDSACurve as HIP_ECDSACurve
|
76
|
+
from pcapkit.vendor.hip.ecdsa_low_curve import ECDSALowCurve as HIP_ECDSALowCurve
|
77
|
+
from pcapkit.vendor.hip.eddsa_curve import EdDSACurve as HIP_EdDSACurve
|
78
|
+
from pcapkit.vendor.hip.esp_transform_suite import ESPTransformSuite as HIP_ESPTransformSuite
|
79
|
+
from pcapkit.vendor.hip.group import Group as HIP_Group
|
80
|
+
from pcapkit.vendor.hip.hi_algorithm import HIAlgorithm as HIP_HIAlgorithm
|
81
|
+
from pcapkit.vendor.hip.hit_suite import HITSuite as HIP_HITSuite
|
82
|
+
from pcapkit.vendor.hip.nat_traversal import NATTraversal as HIP_NATTraversal
|
83
|
+
from pcapkit.vendor.hip.notify_message import NotifyMessage as HIP_NotifyMessage
|
84
|
+
from pcapkit.vendor.hip.packet import Packet as HIP_Packet
|
85
|
+
from pcapkit.vendor.hip.parameter import Parameter as HIP_Parameter
|
86
|
+
from pcapkit.vendor.hip.registration import Registration as HIP_Registration
|
87
|
+
from pcapkit.vendor.hip.registration_failure import RegistrationFailure as HIP_RegistrationFailure
|
88
|
+
from pcapkit.vendor.hip.suite import Suite as HIP_Suite
|
89
|
+
from pcapkit.vendor.hip.transport import Transport as HIP_Transport
|
90
|
+
|
91
|
+
__all__ = ['HIP_Certificate', 'HIP_Cipher', 'HIP_DITypes', 'HIP_ECDSACurve', 'HIP_ECDSALowCurve',
|
92
|
+
'HIP_ESPTransformSuite', 'HIP_Group', 'HIP_HIAlgorithm', 'HIP_HITSuite', 'HIP_NATTraversal',
|
93
|
+
'HIP_NotifyMessage', 'HIP_Packet', 'HIP_Parameter', 'HIP_Registration', 'HIP_RegistrationFailure',
|
94
|
+
'HIP_Suite', 'HIP_Transport', 'HIP_EdDSACurve']
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""HIP Certificate Types
|
3
|
+
===========================
|
4
|
+
|
5
|
+
.. module:: pcapkit.const.hip.certificate
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **HIP Certificate Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.hip.certificate.Certificate`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import sys
|
13
|
+
|
14
|
+
from pcapkit.vendor.default import Vendor
|
15
|
+
|
16
|
+
__all__ = ['Certificate']
|
17
|
+
|
18
|
+
|
19
|
+
class Certificate(Vendor):
|
20
|
+
"""HIP Certificate Types"""
|
21
|
+
|
22
|
+
#: Value limit checker.
|
23
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 255'
|
24
|
+
#: Link to registry.
|
25
|
+
LINK = 'https://www.iana.org/assignments/hip-parameters/certificate-types.csv'
|
26
|
+
|
27
|
+
|
28
|
+
if __name__ == '__main__':
|
29
|
+
sys.exit(Certificate()) # type: ignore[arg-type]
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Cipher IDs
|
3
|
+
================
|
4
|
+
|
5
|
+
.. module:: pcapkit.const.hip.cipher
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Cipher IDs**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.hip.cipher.Cipher`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import sys
|
13
|
+
|
14
|
+
from pcapkit.vendor.default import Vendor
|
15
|
+
|
16
|
+
__all__ = ['Cipher']
|
17
|
+
|
18
|
+
|
19
|
+
class Cipher(Vendor):
|
20
|
+
"""Cipher IDs"""
|
21
|
+
|
22
|
+
#: Value limit checker.
|
23
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 65535'
|
24
|
+
#: Link to registry.
|
25
|
+
LINK = 'https://www.iana.org/assignments/hip-parameters/hip-cipher-id.csv'
|
26
|
+
|
27
|
+
|
28
|
+
if __name__ == '__main__':
|
29
|
+
sys.exit(Cipher()) # type: ignore[arg-type]
|
pcapkit/vendor/hip/di.py
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""DI-Types
|
3
|
+
==============
|
4
|
+
|
5
|
+
.. module:: pcapkit.const.hip.di
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **DI-Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.hip.di.DITypes`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import sys
|
13
|
+
|
14
|
+
from pcapkit.vendor.default import Vendor
|
15
|
+
|
16
|
+
__all__ = ['DITypes']
|
17
|
+
|
18
|
+
|
19
|
+
class DITypes(Vendor):
|
20
|
+
"""DI-Types"""
|
21
|
+
|
22
|
+
#: Value limit checker.
|
23
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 15'
|
24
|
+
#: Link to registry.
|
25
|
+
LINK = 'https://www.iana.org/assignments/hip-parameters/hip-parameters-7.csv'
|
26
|
+
|
27
|
+
|
28
|
+
if __name__ == '__main__':
|
29
|
+
sys.exit(DITypes()) # type: ignore[arg-type]
|