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,94 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Block Types
|
3
|
+
=================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.pcapng.block_type
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Block Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.pcapng.block_type.BlockType`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
import bs4
|
17
|
+
|
18
|
+
from pcapkit.vendor.default import Vendor
|
19
|
+
|
20
|
+
__all__ = ['BlockType']
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from collections import Counter
|
24
|
+
|
25
|
+
from bs4.element import Tag
|
26
|
+
|
27
|
+
|
28
|
+
class BlockType(Vendor):
|
29
|
+
"""Block Types"""
|
30
|
+
|
31
|
+
#: Value limit checker.
|
32
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFFFFFF'
|
33
|
+
#: Link to registry.
|
34
|
+
LINK = 'https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html'
|
35
|
+
|
36
|
+
def count(self, data: 'list[str]') -> 'Counter[str]':
|
37
|
+
"""Count field records."""
|
38
|
+
return collections.Counter()
|
39
|
+
|
40
|
+
def request(self, text: 'str') -> 'list[Tag]': # type: ignore[override] # pylint: disable=signature-differs
|
41
|
+
"""Fetch registry table.
|
42
|
+
|
43
|
+
Args:
|
44
|
+
text: Context from :attr:`~LinkType.LINK`.
|
45
|
+
|
46
|
+
Returns:
|
47
|
+
Rows (``tr``) from registry table (``table``).
|
48
|
+
|
49
|
+
"""
|
50
|
+
soup = bs4.BeautifulSoup(text, 'html5lib')
|
51
|
+
table = soup.select('table#table-9')[0]
|
52
|
+
return table.select('tr')[1:]
|
53
|
+
|
54
|
+
def process(self, data: 'list[Tag]') -> 'tuple[list[str], list[str]]':
|
55
|
+
"""Process registry data.
|
56
|
+
|
57
|
+
Args:
|
58
|
+
data: Registry data.
|
59
|
+
|
60
|
+
Returns:
|
61
|
+
Enumeration fields and missing fields.
|
62
|
+
|
63
|
+
"""
|
64
|
+
enum = [] # type: list[str]
|
65
|
+
miss = [] # type: list[str]
|
66
|
+
for content in data:
|
67
|
+
temp = content.select('td')[0].text.strip()
|
68
|
+
desc = ' '.join(content.select('td')[1].stripped_strings)
|
69
|
+
|
70
|
+
if 'Reserved' in desc:
|
71
|
+
name = 'Reserved'
|
72
|
+
else:
|
73
|
+
name = self.safe_name(desc.split('.', maxsplit=1)[0].split('(', maxsplit=1)[0].strip())
|
74
|
+
|
75
|
+
try:
|
76
|
+
code = int(temp, base=16)
|
77
|
+
if name == 'Reserved':
|
78
|
+
name = f'Reserved_0x{code:08x}'
|
79
|
+
|
80
|
+
pref = f'{name} = 0x{code:08x}'
|
81
|
+
sufs = self.wrap_comment(desc)
|
82
|
+
|
83
|
+
enum.append(f'#: {sufs}\n {pref}')
|
84
|
+
except ValueError:
|
85
|
+
start, stop = map(lambda x: int(x, base=16), temp.split('-'))
|
86
|
+
|
87
|
+
miss.append(f'if 0x{start:08x} <= value <= 0x{stop:08x}:')
|
88
|
+
miss.append(f' #: {desc}')
|
89
|
+
miss.append(f" return extend_enum(cls, '{self.safe_name(name)}_%08x' % value, value)")
|
90
|
+
return enum, miss
|
91
|
+
|
92
|
+
|
93
|
+
if __name__ == '__main__':
|
94
|
+
sys.exit(BlockType()) # type: ignore[arg-type]
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Filter Types
|
3
|
+
==================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.pcapng.filter_type
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Filter Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.pcapng.filter_type.FilterType`.
|
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__ = ['FilterType']
|
22
|
+
|
23
|
+
#: Filter type registry.
|
24
|
+
DATA = {
|
25
|
+
# TODO: https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html#section-4.2-28.2.1
|
26
|
+
} # type: dict[int, str]
|
27
|
+
|
28
|
+
|
29
|
+
class FilterType(Vendor):
|
30
|
+
"""Filter Types"""
|
31
|
+
|
32
|
+
#: Value limit checker.
|
33
|
+
FLAG = 'isinstance(value, int) and 0x00<= value <= 0xFF'
|
34
|
+
|
35
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
36
|
+
"""Fetch registry data.
|
37
|
+
|
38
|
+
Returns:
|
39
|
+
Registry data (:data:`~pcapkit.vendor.pcapng.filter_type.DATA`).
|
40
|
+
|
41
|
+
"""
|
42
|
+
return DATA
|
43
|
+
|
44
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
45
|
+
"""Count field records.
|
46
|
+
|
47
|
+
Args:
|
48
|
+
data: Registry data.
|
49
|
+
|
50
|
+
Returns:
|
51
|
+
Field recordings.
|
52
|
+
|
53
|
+
"""
|
54
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
55
|
+
|
56
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
57
|
+
"""Process registry data.
|
58
|
+
|
59
|
+
Args:
|
60
|
+
data: Registry data.
|
61
|
+
|
62
|
+
Returns:
|
63
|
+
Enumeration fields and missing fields.
|
64
|
+
|
65
|
+
"""
|
66
|
+
enum = [] # type: list[str]
|
67
|
+
miss = [
|
68
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
69
|
+
]
|
70
|
+
for code, name in DATA.items():
|
71
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
72
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
73
|
+
return enum, miss
|
74
|
+
|
75
|
+
|
76
|
+
if __name__ == '__main__':
|
77
|
+
sys.exit(FilterType()) # type: ignore[arg-type]
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Hash Algorithms
|
3
|
+
=====================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.pcapng.hash_algorithm
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Hash Algorithms**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.pcapng.hash_algorithm.HashAlgorithm`.
|
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__ = ['HashAlgorithm']
|
22
|
+
|
23
|
+
#: Hash algorithm registry.
|
24
|
+
DATA = {
|
25
|
+
0: "two's complement",
|
26
|
+
1: 'XOR',
|
27
|
+
2: 'CRC32',
|
28
|
+
3: 'MD-5',
|
29
|
+
4: 'SHA-1',
|
30
|
+
5: 'Toeplitz',
|
31
|
+
} # type: dict[int, str]
|
32
|
+
|
33
|
+
|
34
|
+
class HashAlgorithm(Vendor):
|
35
|
+
"""Hash Algorithms"""
|
36
|
+
|
37
|
+
#: Value limit checker.
|
38
|
+
FLAG = 'isinstance(value, int) and 0x00 <= value <= 0xFF'
|
39
|
+
|
40
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
41
|
+
"""Fetch registry data.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
Registry data (:data:`~pcapkit.vendor.pcapng.hash_algorithm.DATA`).
|
45
|
+
|
46
|
+
"""
|
47
|
+
return DATA
|
48
|
+
|
49
|
+
def count(self, data: 'dict[int, str]') -> 'Counter[str]': # type: ignore[override]
|
50
|
+
"""Count field records.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
data: Registry data.
|
54
|
+
|
55
|
+
Returns:
|
56
|
+
Field recordings.
|
57
|
+
|
58
|
+
"""
|
59
|
+
return collections.Counter(map(self.safe_name, data.values()))
|
60
|
+
|
61
|
+
def process(self, data: 'dict[int, str]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
62
|
+
"""Process registry data.
|
63
|
+
|
64
|
+
Args:
|
65
|
+
data: Registry data.
|
66
|
+
|
67
|
+
Returns:
|
68
|
+
Enumeration fields and missing fields.
|
69
|
+
|
70
|
+
"""
|
71
|
+
enum = [] # type: list[str]
|
72
|
+
miss = [
|
73
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
74
|
+
]
|
75
|
+
for code, name in DATA.items():
|
76
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
77
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
78
|
+
return enum, miss
|
79
|
+
|
80
|
+
|
81
|
+
if __name__ == '__main__':
|
82
|
+
sys.exit(HashAlgorithm()) # type: ignore[arg-type]
|
@@ -0,0 +1,287 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Option Types
|
3
|
+
==================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.pcapng.option_type
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Option Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.pcapng.option_type.OptionType`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
import bs4
|
17
|
+
|
18
|
+
from pcapkit.vendor.default import Vendor
|
19
|
+
|
20
|
+
__all__ = ['OptionType']
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from collections import Counter
|
24
|
+
from typing import Callable
|
25
|
+
|
26
|
+
from bs4.element import Tag
|
27
|
+
|
28
|
+
LINE = lambda NAME, DOCS, FLAG, ENUM, MISS, MODL: f'''\
|
29
|
+
# -*- coding: utf-8 -*-
|
30
|
+
# mypy: disable-error-code=assignment
|
31
|
+
# pylint: disable=line-too-long,consider-using-f-string
|
32
|
+
"""{(name := DOCS.split(' [', maxsplit=1)[0])}
|
33
|
+
{'=' * (len(name) + 6)}
|
34
|
+
|
35
|
+
.. module:: {MODL.replace('vendor', 'const')}
|
36
|
+
|
37
|
+
This module contains the constant enumeration for **{name}**,
|
38
|
+
which is automatically generated from :class:`{MODL}.{NAME}`.
|
39
|
+
|
40
|
+
"""
|
41
|
+
from collections import defaultdict
|
42
|
+
from typing import TYPE_CHECKING
|
43
|
+
|
44
|
+
from aenum import StrEnum, extend_enum
|
45
|
+
|
46
|
+
__all__ = ['{NAME}']
|
47
|
+
|
48
|
+
if TYPE_CHECKING:
|
49
|
+
from typing import Any, DefaultDict, Optional, Type
|
50
|
+
|
51
|
+
|
52
|
+
class {NAME}(StrEnum):
|
53
|
+
"""[{NAME}] {DOCS}"""
|
54
|
+
|
55
|
+
if TYPE_CHECKING:
|
56
|
+
#: Short name of the option type.
|
57
|
+
opt_name: 'str'
|
58
|
+
#: Numeric value of the option type.
|
59
|
+
opt_value: 'int'
|
60
|
+
|
61
|
+
#: Mapping of members based on namespace.
|
62
|
+
__members_ns__: 'DefaultDict[str, dict[int, {NAME}]]' = defaultdict(dict)
|
63
|
+
|
64
|
+
def __new__(cls, value: 'int', name: 'str' = 'opt_unknown') -> 'Type[{NAME}]':
|
65
|
+
temp = '%s [%d]' % (name, value)
|
66
|
+
|
67
|
+
obj = str.__new__(cls, temp)
|
68
|
+
obj._value_ = temp
|
69
|
+
|
70
|
+
obj.opt_name = name
|
71
|
+
obj.opt_value = value
|
72
|
+
|
73
|
+
namespace = name.split('_', maxsplit=1)[0]
|
74
|
+
cls.__members_ns__[namespace][value] = obj
|
75
|
+
|
76
|
+
return obj
|
77
|
+
|
78
|
+
def __repr__(self) -> 'str':
|
79
|
+
return "<%s.%s: %d>" % (self.__class__.__name__, self.opt_name, self.opt_value)
|
80
|
+
|
81
|
+
def __str__(self) -> 'str':
|
82
|
+
return '%s [%d]' % (self.opt_name, self.opt_value)
|
83
|
+
|
84
|
+
def __int__(self) -> 'int':
|
85
|
+
return self.opt_value
|
86
|
+
|
87
|
+
def __lt__(self, other: '{NAME}') -> 'bool':
|
88
|
+
return self.opt_value < other
|
89
|
+
|
90
|
+
def __gt__(self, other: '{NAME}') -> 'bool':
|
91
|
+
return self.opt_value > other
|
92
|
+
|
93
|
+
def __le__(self, other: '{NAME}') -> 'bool':
|
94
|
+
return self.opt_value <= other
|
95
|
+
|
96
|
+
def __ge__(self, other: '{NAME}') -> 'bool':
|
97
|
+
return self.opt_value >= other
|
98
|
+
|
99
|
+
def __eq__(self, other: 'Any') -> 'bool':
|
100
|
+
return self.opt_value == other
|
101
|
+
|
102
|
+
def __ne__(self, other: 'Any') -> 'bool':
|
103
|
+
return self.opt_value != other
|
104
|
+
|
105
|
+
def __hash__(self) -> 'int':
|
106
|
+
return hash(self.opt_value)
|
107
|
+
|
108
|
+
{ENUM}
|
109
|
+
|
110
|
+
@staticmethod
|
111
|
+
def get(key: 'int | str', default: 'int' = -1, *, namespace: 'str' = 'opt') -> '{NAME}':
|
112
|
+
"""Backport support for original codes.
|
113
|
+
|
114
|
+
Args:
|
115
|
+
key: Key to get enum item.
|
116
|
+
default: Default value if not found.
|
117
|
+
namespace: Namespace of the enum item.
|
118
|
+
|
119
|
+
:meta private:
|
120
|
+
"""
|
121
|
+
if isinstance(key, int):
|
122
|
+
temp_ns = {NAME}.__members_ns__.get('opt', {{}}).copy()
|
123
|
+
temp_ns.update({NAME}.__members_ns__.get(namespace, {{}}))
|
124
|
+
if key in temp_ns:
|
125
|
+
return temp_ns[key]
|
126
|
+
return extend_enum({NAME}, '%s_unknown_%d' % (namespace, key), key, '%s_unknown' % namespace)
|
127
|
+
if key in {NAME}.__members__:
|
128
|
+
return getattr({NAME}, key)
|
129
|
+
return extend_enum({NAME}, key, default, key)
|
130
|
+
|
131
|
+
@classmethod
|
132
|
+
def _missing_(cls, value: 'int') -> '{NAME}':
|
133
|
+
"""Lookup function used when value is not found.
|
134
|
+
|
135
|
+
Args:
|
136
|
+
value: Value to get enum item.
|
137
|
+
|
138
|
+
"""
|
139
|
+
if not ({FLAG}):
|
140
|
+
raise ValueError('%r is not a valid %s' % (value, cls.__name__))
|
141
|
+
if value in cls.__members_ns__.get('opt', {{}}):
|
142
|
+
return cls.__members_ns__['opt'][value]
|
143
|
+
{MISS}
|
144
|
+
{'' if ''.join(MISS.splitlines()[-1:]).startswith('return') else 'return super()._missing_(value)'}
|
145
|
+
'''.strip() # type: Callable[[str, str, str, str, str, str], str]
|
146
|
+
|
147
|
+
|
148
|
+
class OptionType(Vendor):
|
149
|
+
"""Option Types"""
|
150
|
+
|
151
|
+
#: Value limit checker.
|
152
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFF'
|
153
|
+
#: Link to registry.
|
154
|
+
LINK = 'https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html'
|
155
|
+
|
156
|
+
def count(self, data: 'list[str]') -> 'Counter[str]':
|
157
|
+
"""Count field records."""
|
158
|
+
return collections.Counter()
|
159
|
+
|
160
|
+
def request(self, text: 'str') -> 'dict[str, list[Tag]]': # type: ignore[override] # pylint: disable=signature-differs
|
161
|
+
"""Fetch registry table.
|
162
|
+
|
163
|
+
Args:
|
164
|
+
text: Context from :attr:`~LinkType.LINK`.
|
165
|
+
|
166
|
+
Returns:
|
167
|
+
Rows (``tr``) from registry table (``table``).
|
168
|
+
|
169
|
+
"""
|
170
|
+
soup = bs4.BeautifulSoup(text, 'html5lib')
|
171
|
+
table_1 = soup.select('table#table-1')[0]
|
172
|
+
table_3 = soup.select('table#table-3')[0]
|
173
|
+
table_4 = soup.select('table#table-4')[0]
|
174
|
+
table_7 = soup.select('table#table-7')[0]
|
175
|
+
table_8 = soup.select('table#table-8')[0]
|
176
|
+
table_10 = soup.select('table#table-10')[0]
|
177
|
+
return {
|
178
|
+
'table-1': table_1.select('tr')[1:],
|
179
|
+
'table-3': table_3.select('tr')[1:],
|
180
|
+
'table-4': table_4.select('tr')[1:],
|
181
|
+
'table-7': table_7.select('tr')[1:],
|
182
|
+
'table-8': table_8.select('tr')[1:],
|
183
|
+
'table-10': table_10.select('tr')[1:],
|
184
|
+
}
|
185
|
+
|
186
|
+
def process(self, data: 'dict[str, list[Tag]]') -> 'tuple[list[str], list[str]]': # type: ignore[override]
|
187
|
+
"""Process registry data.
|
188
|
+
|
189
|
+
Args:
|
190
|
+
data: Registry data.
|
191
|
+
|
192
|
+
Returns:
|
193
|
+
Enumeration fields and missing fields.
|
194
|
+
|
195
|
+
"""
|
196
|
+
enum = [] # type: list[str]
|
197
|
+
miss = [
|
198
|
+
"return extend_enum(cls, 'opt_unknown_%d' % value, value, 'opt_unknown')",
|
199
|
+
] # type: list[str]
|
200
|
+
|
201
|
+
for content in data['table-1']:
|
202
|
+
name = content.select('td')[0].text.strip()
|
203
|
+
temp = content.select('td')[1].text.strip()
|
204
|
+
|
205
|
+
try:
|
206
|
+
code = int(temp)
|
207
|
+
|
208
|
+
pref = f"{name}: 'OptionType' = {code}, {name!r}"
|
209
|
+
sufs = self.wrap_comment(name)
|
210
|
+
|
211
|
+
enum.append(f'#: {sufs}\n {pref}')
|
212
|
+
except ValueError:
|
213
|
+
opts = tuple(map(lambda x: int(x), temp.split('/')))
|
214
|
+
|
215
|
+
for code in opts:
|
216
|
+
pref = f"{name}_{code}: 'OptionType' = {code}, {name!r}"
|
217
|
+
sufs = self.wrap_comment(name)
|
218
|
+
|
219
|
+
enum.append(f'#: {sufs}\n {pref}')
|
220
|
+
|
221
|
+
for content in data['table-3']:
|
222
|
+
name = content.select('td')[0].text.strip()
|
223
|
+
code = content.select('td')[1].text.strip()
|
224
|
+
|
225
|
+
pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
|
226
|
+
sufs = self.wrap_comment(name)
|
227
|
+
|
228
|
+
enum.append(f'#: {sufs}\n {pref}')
|
229
|
+
|
230
|
+
for content in data['table-4']:
|
231
|
+
name = content.select('td')[0].text.strip()
|
232
|
+
code = content.select('td')[1].text.strip()
|
233
|
+
|
234
|
+
pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
|
235
|
+
sufs = self.wrap_comment(name)
|
236
|
+
|
237
|
+
enum.append(f'#: {sufs}\n {pref}')
|
238
|
+
|
239
|
+
for content in data['table-7']:
|
240
|
+
name = content.select('td')[0].text.strip()
|
241
|
+
code = content.select('td')[1].text.strip()
|
242
|
+
|
243
|
+
pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
|
244
|
+
sufs = self.wrap_comment(name)
|
245
|
+
|
246
|
+
enum.append(f'#: {sufs}\n {pref}')
|
247
|
+
|
248
|
+
for content in data['table-8']:
|
249
|
+
name = content.select('td')[0].text.strip()
|
250
|
+
code = content.select('td')[1].text.strip()
|
251
|
+
|
252
|
+
pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
|
253
|
+
sufs = self.wrap_comment(name)
|
254
|
+
|
255
|
+
enum.append(f'#: {sufs}\n {pref}')
|
256
|
+
|
257
|
+
for content in data['table-10']:
|
258
|
+
name = content.select('td')[0].text.strip()
|
259
|
+
code = content.select('td')[1].text.strip()
|
260
|
+
|
261
|
+
pref = f"{name}: 'OptionType' = {int(code)}, {name!r}"
|
262
|
+
sufs = self.wrap_comment(name)
|
263
|
+
|
264
|
+
enum.append(f'#: {sufs}\n {pref}')
|
265
|
+
|
266
|
+
return enum, miss
|
267
|
+
|
268
|
+
def context(self, soup: 'dict[str, list[Tag]]') -> 'str': # type: ignore[override]
|
269
|
+
"""Generate constant context.
|
270
|
+
|
271
|
+
Args:
|
272
|
+
data: CSV data.
|
273
|
+
|
274
|
+
Returns:
|
275
|
+
Constant context.
|
276
|
+
|
277
|
+
"""
|
278
|
+
enum, miss = self.process(soup)
|
279
|
+
|
280
|
+
ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum)).strip()
|
281
|
+
MISS = '\n '.join(map(lambda s: s.rstrip(), miss)).strip()
|
282
|
+
|
283
|
+
return LINE(self.NAME, self.DOCS, self.FLAG, ENUM, MISS, self.__module__)
|
284
|
+
|
285
|
+
|
286
|
+
if __name__ == '__main__':
|
287
|
+
sys.exit(OptionType()) # type: ignore[arg-type]
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Record Types
|
3
|
+
==================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.pcapng.record_type
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Record Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.pcapng.record_type.RecordType`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import sys
|
14
|
+
from typing import TYPE_CHECKING
|
15
|
+
|
16
|
+
import bs4
|
17
|
+
|
18
|
+
from pcapkit.vendor.default import Vendor
|
19
|
+
|
20
|
+
__all__ = ['RecordType']
|
21
|
+
|
22
|
+
if TYPE_CHECKING:
|
23
|
+
from collections import Counter
|
24
|
+
|
25
|
+
from bs4.element import Tag
|
26
|
+
|
27
|
+
|
28
|
+
class RecordType(Vendor):
|
29
|
+
"""Record Types"""
|
30
|
+
|
31
|
+
#: Value limit checker.
|
32
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 0xFFFF'
|
33
|
+
#: Link to registry.
|
34
|
+
LINK = 'https://www.ietf.org/staging/draft-tuexen-opsawg-pcapng-02.html'
|
35
|
+
|
36
|
+
def count(self, data: 'list[str]') -> 'Counter[str]':
|
37
|
+
"""Count field records."""
|
38
|
+
return collections.Counter()
|
39
|
+
|
40
|
+
def request(self, text: 'str') -> 'list[Tag]': # type: ignore[override] # pylint: disable=signature-differs
|
41
|
+
"""Fetch registry table.
|
42
|
+
|
43
|
+
Args:
|
44
|
+
text: Context from :attr:`~LinkType.LINK`.
|
45
|
+
|
46
|
+
Returns:
|
47
|
+
Rows (``tr``) from registry table (``table``).
|
48
|
+
|
49
|
+
"""
|
50
|
+
soup = bs4.BeautifulSoup(text, 'html5lib')
|
51
|
+
table_1 = soup.select('table#table-6')[0]
|
52
|
+
return table_1.select('tr')[1:]
|
53
|
+
|
54
|
+
def process(self, data: 'list[Tag]') -> 'tuple[list[str], list[str]]':
|
55
|
+
"""Process registry data.
|
56
|
+
|
57
|
+
Args:
|
58
|
+
data: Registry data.
|
59
|
+
|
60
|
+
Returns:
|
61
|
+
Enumeration fields and missing fields.
|
62
|
+
|
63
|
+
"""
|
64
|
+
enum = [] # type: list[str]
|
65
|
+
miss = [
|
66
|
+
"extend_enum(cls, 'Unassigned_0x%04x' % value, value)",
|
67
|
+
'return cls(value)'
|
68
|
+
]
|
69
|
+
for content in data:
|
70
|
+
name = content.select('td')[0].text.strip()
|
71
|
+
temp = content.select('td')[1].text.strip()
|
72
|
+
|
73
|
+
pref = f'{name} = {temp}'
|
74
|
+
sufs = self.wrap_comment(name)
|
75
|
+
|
76
|
+
enum.append(f'#: {sufs}\n {pref}')
|
77
|
+
return enum, miss
|
78
|
+
|
79
|
+
|
80
|
+
if __name__ == '__main__':
|
81
|
+
sys.exit(RecordType()) # type: ignore[arg-type]
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Secrets Types
|
3
|
+
===================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.pcapng.secrets_type
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Secrets Types**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.pcapng.secrets_type.SecretsType`.
|
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__ = ['SecretsType']
|
22
|
+
|
23
|
+
#: Secrets type registry.
|
24
|
+
DATA = {
|
25
|
+
0x544c534b: 'TLS Key Log', # NSS Key Log Format
|
26
|
+
0x57474b4c: 'WireGuard Key Log',
|
27
|
+
0x5a4e574b: 'ZigBee NWK Key', # ZigBee Specification
|
28
|
+
0x5a415053: 'ZigBee APS Key', # ZigBee Specification
|
29
|
+
} # type: dict[int, str]
|
30
|
+
|
31
|
+
|
32
|
+
class SecretsType(Vendor):
|
33
|
+
"""Secrets Types"""
|
34
|
+
|
35
|
+
#: Value limit checker.
|
36
|
+
FLAG = 'isinstance(value, int) and 0x00000000 <= value <= 0xFFFFFFFF'
|
37
|
+
|
38
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
39
|
+
"""Fetch registry data.
|
40
|
+
|
41
|
+
Returns:
|
42
|
+
Registry data (:data:`~pcapkit.vendor.pcapng.secrets_type.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
|
+
"extend_enum(cls, 'Unassigned_0x%08x' % value, value)",
|
72
|
+
'return cls(value)'
|
73
|
+
]
|
74
|
+
for code, name in DATA.items():
|
75
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
76
|
+
enum.append(f"{renm} = 0x{code:08x}".ljust(76))
|
77
|
+
return enum, miss
|
78
|
+
|
79
|
+
|
80
|
+
if __name__ == '__main__':
|
81
|
+
sys.exit(SecretsType()) # type: ignore[arg-type]
|