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,111 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Transport Layer Protocol Numbers
|
3
|
+
======================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.reg.transtype
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Transport Layer Protocol Numbers**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.reg.transtype.TransType`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import csv
|
14
|
+
import re
|
15
|
+
import sys
|
16
|
+
from typing import TYPE_CHECKING
|
17
|
+
|
18
|
+
from pcapkit.vendor.default import Vendor
|
19
|
+
|
20
|
+
if TYPE_CHECKING:
|
21
|
+
from collections import Counter
|
22
|
+
|
23
|
+
__all__ = ['TransType']
|
24
|
+
|
25
|
+
|
26
|
+
class TransType(Vendor):
|
27
|
+
"""Transport Layer Protocol Numbers"""
|
28
|
+
|
29
|
+
#: Value limit checker.
|
30
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 255'
|
31
|
+
#: Link to registry.
|
32
|
+
LINK = 'https://www.iana.org/assignments/protocol-numbers/protocol-numbers-1.csv'
|
33
|
+
|
34
|
+
def count(self, data: 'list[str]') -> 'Counter[str]':
|
35
|
+
"""Count field records.
|
36
|
+
|
37
|
+
Args:
|
38
|
+
data: CSV data.
|
39
|
+
|
40
|
+
Returns:
|
41
|
+
Field recordings.
|
42
|
+
|
43
|
+
"""
|
44
|
+
reader = csv.reader(data)
|
45
|
+
next(reader) # header
|
46
|
+
return collections.Counter(map(lambda item: self.safe_name(item[1] or item[2]),
|
47
|
+
filter(lambda item: len(item[0].split('-')) != 2, reader)))
|
48
|
+
|
49
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
50
|
+
"""Process CSV data.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
data: CSV data.
|
54
|
+
|
55
|
+
Returns:
|
56
|
+
Enumeration fields and missing fields.
|
57
|
+
|
58
|
+
"""
|
59
|
+
reader = csv.reader(data)
|
60
|
+
next(reader) # header
|
61
|
+
|
62
|
+
enum = [] # type: list[str]
|
63
|
+
miss = [] # type: list[str]
|
64
|
+
for item in reader:
|
65
|
+
long = item[1]
|
66
|
+
rfcs = item[4]
|
67
|
+
|
68
|
+
temp = [] # type: list[str]
|
69
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
70
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
71
|
+
#temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
72
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
73
|
+
else:
|
74
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
75
|
+
lrfc = re.sub(r'( )( )*', ' ', f" {''.join(temp)}".replace('\n', ' ')) if rfcs else ''
|
76
|
+
|
77
|
+
subd = re.sub(r'( )( )*', ' ', item[2].replace('\n', ' '))
|
78
|
+
tmp1 = subd if item[2] else ''
|
79
|
+
|
80
|
+
split = long.split(' (', 1)
|
81
|
+
if len(split) == 2:
|
82
|
+
name, cmmt = split[0], f" ({split[1]})"
|
83
|
+
else:
|
84
|
+
name, cmmt = long, ''
|
85
|
+
if not name:
|
86
|
+
name, desc = item[2], ''
|
87
|
+
desc = self.wrap_comment(f'{tmp1}{cmmt}{lrfc}')
|
88
|
+
|
89
|
+
try:
|
90
|
+
code, _ = item[0], int(item[0])
|
91
|
+
renm = self.rename(name, code, original=long)
|
92
|
+
|
93
|
+
pres = f"{renm} = {code}"
|
94
|
+
sufs = f"#: {desc}"
|
95
|
+
|
96
|
+
# if len(pres) > 74:
|
97
|
+
# sufs = f"\n{' '*80}{sufs}"
|
98
|
+
|
99
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
100
|
+
enum.append(f'{sufs}\n {pres}')
|
101
|
+
except ValueError:
|
102
|
+
start, stop = item[0].split('-')
|
103
|
+
|
104
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
105
|
+
miss.append(f' #: {desc}')
|
106
|
+
miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
|
107
|
+
return enum, miss
|
108
|
+
|
109
|
+
|
110
|
+
if __name__ == '__main__':
|
111
|
+
sys.exit(TransType()) # type: ignore[arg-type]
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=unused-import
|
3
|
+
""":class:`~pcapkit.protocols.transport.tcp.TCP` Vendor Crawlers
|
4
|
+
===================================================================
|
5
|
+
|
6
|
+
.. module:: pcapkit.vendor.tcp
|
7
|
+
|
8
|
+
This module contains all vendor crawlers of
|
9
|
+
:class:`~pcapkit.protocols.transport.tcp.TCP` implementations. Available
|
10
|
+
enumerations include:
|
11
|
+
|
12
|
+
.. list-table::
|
13
|
+
|
14
|
+
* - :class:`TCP_Checksum <pcapkit.vendor.tcp.checksum.Checksum>`
|
15
|
+
- TCP Checksum [*]_
|
16
|
+
* - :class:`TCP_MPTCPOption <pcapkit.vendor.tcp.mp_tcp_option.MPTCPOption>`
|
17
|
+
- Multipath TCP options [*]_
|
18
|
+
* - :class:`TCP_Option <pcapkit.vendor.tcp.option.Option>`
|
19
|
+
- TCP Option Kind Numbers [*]_
|
20
|
+
* - :class:`TCP_Flags <pcapkit.vendor.tcp.flags.Flags>`
|
21
|
+
- TCP Header Flags [*]_
|
22
|
+
|
23
|
+
.. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-2
|
24
|
+
.. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#mptcp-option-subtypes
|
25
|
+
.. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-1
|
26
|
+
.. [*] https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-header-flags
|
27
|
+
|
28
|
+
"""
|
29
|
+
|
30
|
+
from pcapkit.vendor.tcp.checksum import Checksum as TCP_Checksum
|
31
|
+
from pcapkit.vendor.tcp.flags import Flags as TCP_Flags
|
32
|
+
from pcapkit.vendor.tcp.mp_tcp_option import MPTCPOption as TCP_MPTCPOption
|
33
|
+
from pcapkit.vendor.tcp.option import Option as TCP_Option
|
34
|
+
|
35
|
+
__all__ = ['TCP_Checksum', 'TCP_Option', 'TCP_MPTCPOption', 'TCP_Flags']
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""TCP Checksum
|
3
|
+
==================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.tcp.checksum
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **TCP Checksum**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.tcp.checksum.Checksum`.
|
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__ = ['Checksum']
|
22
|
+
|
23
|
+
#: TCP checksum options.
|
24
|
+
DATA = {
|
25
|
+
0: 'TCP checksum',
|
26
|
+
1: "8-bit Fletcher's algorithm",
|
27
|
+
2: "16-bit Fletcher's algorithm",
|
28
|
+
3: 'Redundant Checksum Avoidance',
|
29
|
+
} # type: dict[int, str]
|
30
|
+
|
31
|
+
|
32
|
+
class Checksum(Vendor):
|
33
|
+
"""TCP Checksum [:rfc:`1146`]"""
|
34
|
+
|
35
|
+
#: Value limit checker.
|
36
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 255'
|
37
|
+
|
38
|
+
def request(self) -> 'dict[int, str]': # type: ignore[override] # pylint: disable=arguments-differ
|
39
|
+
"""Fetch registry data.
|
40
|
+
|
41
|
+
Returns:
|
42
|
+
TCP checksum options, i.e. :data:`~pcapkit.vendor.tcp.checksum.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 CSV data.
|
61
|
+
|
62
|
+
Args:
|
63
|
+
data: Registry data.
|
64
|
+
|
65
|
+
Returns:
|
66
|
+
Enumeration fields and missing fields.
|
67
|
+
|
68
|
+
"""
|
69
|
+
enum = [] # type: list[str]
|
70
|
+
miss = [
|
71
|
+
"return extend_enum(cls, 'Unassigned_%d' % value, value)",
|
72
|
+
]
|
73
|
+
for code, name in data.items():
|
74
|
+
renm = self.rename(name, code) # type: ignore[arg-type]
|
75
|
+
enum.append(f"{renm} = {code}".ljust(76))
|
76
|
+
return enum, miss
|
77
|
+
|
78
|
+
|
79
|
+
if __name__ == '__main__':
|
80
|
+
sys.exit(Checksum()) # type: ignore[arg-type]
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""TCP Header Flags
|
3
|
+
======================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.tcp.flags
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **TCP Header Flags**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.tcp.flags.Flags`.
|
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
|
+
if TYPE_CHECKING:
|
20
|
+
from typing import Callable
|
21
|
+
|
22
|
+
__all__ = ['Flags']
|
23
|
+
|
24
|
+
#: TCP header flags' abbreviation.
|
25
|
+
DATA = {
|
26
|
+
15: 'FIN',
|
27
|
+
14: 'SYN',
|
28
|
+
13: 'RST',
|
29
|
+
12: 'PSH',
|
30
|
+
11: 'ACK',
|
31
|
+
10: 'URG',
|
32
|
+
9: 'ECE',
|
33
|
+
8: 'CWR',
|
34
|
+
}
|
35
|
+
|
36
|
+
#: Default constant template of enumerate registry from IANA CSV.
|
37
|
+
LINE = lambda NAME, DOCS, ENUM, MODL: f'''\
|
38
|
+
# -*- coding: utf-8 -*-
|
39
|
+
# pylint: disable=line-too-long,consider-using-f-string
|
40
|
+
"""{(name := DOCS.split(' [', maxsplit=1)[0])}
|
41
|
+
{'=' * (len(name) + 6)}
|
42
|
+
|
43
|
+
.. module:: {MODL.replace('vendor', 'const')}
|
44
|
+
|
45
|
+
This module contains the constant enumeration for **{name}**,
|
46
|
+
which is automatically generated from :class:`{MODL}.{NAME}`.
|
47
|
+
|
48
|
+
"""
|
49
|
+
|
50
|
+
from typing import TYPE_CHECKING
|
51
|
+
|
52
|
+
from aenum import IntFlag
|
53
|
+
|
54
|
+
if TYPE_CHECKING:
|
55
|
+
from typing import Optional
|
56
|
+
|
57
|
+
__all__ = ['{NAME}']
|
58
|
+
|
59
|
+
class {NAME}(IntFlag):
|
60
|
+
"""[{NAME}] {DOCS}"""
|
61
|
+
|
62
|
+
{ENUM}
|
63
|
+
|
64
|
+
@staticmethod
|
65
|
+
def get(key: 'int | str', default: 'Optional[int]' = -1) -> '{NAME}':
|
66
|
+
"""Backport support for original codes.
|
67
|
+
|
68
|
+
Args:
|
69
|
+
key: Key to get enum item.
|
70
|
+
default: Default value if not found.
|
71
|
+
|
72
|
+
:meta private:
|
73
|
+
"""
|
74
|
+
if isinstance(key, int):
|
75
|
+
return Flags(key)
|
76
|
+
return {NAME}[key] # type: ignore[misc]
|
77
|
+
'''.strip() # type: Callable[[str, str, str, str], str]
|
78
|
+
|
79
|
+
|
80
|
+
class Flags(Vendor):
|
81
|
+
"""TCP Header Flags"""
|
82
|
+
|
83
|
+
#: Value limit checker.
|
84
|
+
FLAG = 'isinstance(value, int) and 4 <= value <= 15'
|
85
|
+
#: Link to registry.
|
86
|
+
LINK = 'https://www.iana.org/assignments/tcp-parameters/tcp-header-flags.csv'
|
87
|
+
|
88
|
+
def process(self, data: 'list[str]') -> 'list[str]': # type: ignore[override]
|
89
|
+
"""Process CSV data.
|
90
|
+
|
91
|
+
Args:
|
92
|
+
data: CSV data.
|
93
|
+
|
94
|
+
Returns:
|
95
|
+
Enumeration fields.
|
96
|
+
|
97
|
+
"""
|
98
|
+
reader = csv.reader(data)
|
99
|
+
next(reader) # header
|
100
|
+
|
101
|
+
enum = [] # type: list[str]
|
102
|
+
for item in reader:
|
103
|
+
dscp = item[1]
|
104
|
+
rfcs = item[2]
|
105
|
+
|
106
|
+
temp = [] # type: list[str]
|
107
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
108
|
+
if re.match(r'\d+', rfc):
|
109
|
+
continue
|
110
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
111
|
+
# temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
112
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
113
|
+
else:
|
114
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
115
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
116
|
+
desc = self.wrap_comment(re.sub(r'\r*\n', ' ', f'{dscp}{tmp1}', re.MULTILINE))
|
117
|
+
|
118
|
+
code = item[0]
|
119
|
+
name = DATA.get(int(code), dscp.split(' (')[0]).replace('Reserved for future use', 'Reserved')
|
120
|
+
renm = self.rename(name or 'Unassigned', code, original=dscp)
|
121
|
+
|
122
|
+
pres = f"{renm} = 1 << {code}"
|
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':
|
133
|
+
"""Generate constant context.
|
134
|
+
|
135
|
+
Args:
|
136
|
+
data: CSV data.
|
137
|
+
|
138
|
+
Returns:
|
139
|
+
Constant context.
|
140
|
+
|
141
|
+
"""
|
142
|
+
enum = self.process(data)
|
143
|
+
ENUM = '\n\n '.join(map(lambda s: s.rstrip(), enum)).strip()
|
144
|
+
|
145
|
+
return LINE(self.NAME, self.DOCS, ENUM, self.__module__)
|
146
|
+
|
147
|
+
|
148
|
+
if __name__ == '__main__':
|
149
|
+
sys.exit(Flags()) # type: ignore[arg-type]
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Multipath TCP options
|
3
|
+
===========================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.tcp.mp_tcp_option
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Multipath TCP options**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.tcp.mp_tcp_option.MPTCPOption`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import csv
|
13
|
+
import re
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from pcapkit.vendor.default import Vendor
|
17
|
+
|
18
|
+
__all__ = ['MPTCPOption']
|
19
|
+
|
20
|
+
|
21
|
+
class MPTCPOption(Vendor):
|
22
|
+
"""Multipath TCP options [:rfc:`6824`]"""
|
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/tcp-parameters/mptcp-option-subtypes.csv'
|
28
|
+
|
29
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
30
|
+
"""Process CSV data.
|
31
|
+
|
32
|
+
Args:
|
33
|
+
data: Registry 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
|
+
dscp = item[2]
|
46
|
+
rfcs = item[3]
|
47
|
+
|
48
|
+
temp = [] # type: list[str]
|
49
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
50
|
+
if re.match(r'\d+', rfc):
|
51
|
+
continue
|
52
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
53
|
+
# temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
54
|
+
match = re.fullmatch(r'RFC(?P<rfc>\d+)(, Section (?P<sec>.*?))?', rfc)
|
55
|
+
if match is None:
|
56
|
+
temp.append(f'[{rfc}]')
|
57
|
+
else:
|
58
|
+
if match.group('sec') is not None:
|
59
|
+
temp.append(f'[:rfc:`{match.group("rfc")}#{match.group("sec")}`]')
|
60
|
+
else:
|
61
|
+
temp.append(f'[:rfc:`{match.group("rfc")}`]')
|
62
|
+
else:
|
63
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
64
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
65
|
+
desc = self.wrap_comment(re.sub(r'\r*\n', ' ', f'{dscp}{tmp1}', re.MULTILINE))
|
66
|
+
|
67
|
+
name = item[1]
|
68
|
+
try:
|
69
|
+
code, _ = item[0], int(item[0], base=16)
|
70
|
+
renm = self.rename(name or 'Unassigned', code, original=dscp)
|
71
|
+
|
72
|
+
pres = f"{renm} = {code}"
|
73
|
+
sufs = f'#: {desc}'
|
74
|
+
|
75
|
+
# if len(pres) > 74:
|
76
|
+
# sufs = f"\n{' '*80}{sufs}"
|
77
|
+
|
78
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
79
|
+
enum.append(f'{sufs}\n {pres}')
|
80
|
+
except ValueError:
|
81
|
+
start, stop = item[0].split('-')
|
82
|
+
|
83
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
84
|
+
miss.append(f' #: {desc}')
|
85
|
+
miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
|
86
|
+
return enum, miss
|
87
|
+
|
88
|
+
|
89
|
+
if __name__ == '__main__':
|
90
|
+
sys.exit(MPTCPOption()) # type: ignore[arg-type]
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""TCP Option Kind Numbers
|
3
|
+
=============================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.tcp.option
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **TCP Option Kind Numbers**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.tcp.option.Option`.
|
9
|
+
|
10
|
+
"""
|
11
|
+
|
12
|
+
import collections
|
13
|
+
import csv
|
14
|
+
import re
|
15
|
+
import sys
|
16
|
+
from typing import TYPE_CHECKING
|
17
|
+
|
18
|
+
from pcapkit.vendor.default import Vendor
|
19
|
+
|
20
|
+
if TYPE_CHECKING:
|
21
|
+
from collections import Counter
|
22
|
+
|
23
|
+
__all__ = ['Option']
|
24
|
+
|
25
|
+
|
26
|
+
class Option(Vendor):
|
27
|
+
"""TCP Option Kind Numbers"""
|
28
|
+
|
29
|
+
#: Value limit checker.
|
30
|
+
FLAG = 'isinstance(value, int) and 0 <= value <= 255'
|
31
|
+
#: Link to registry.
|
32
|
+
LINK = 'https://www.iana.org/assignments/tcp-parameters/tcp-parameters-1.csv'
|
33
|
+
|
34
|
+
def count(self, data: 'list[str]') -> 'Counter[str]':
|
35
|
+
"""Count field records.
|
36
|
+
|
37
|
+
Args:
|
38
|
+
data: Registry data.
|
39
|
+
|
40
|
+
Returns:
|
41
|
+
Field recordings.
|
42
|
+
|
43
|
+
"""
|
44
|
+
reader = csv.reader(data)
|
45
|
+
next(reader) # header
|
46
|
+
return collections.Counter(map(lambda item: self.safe_name(item[2]), reader))
|
47
|
+
|
48
|
+
def process(self, data: 'list[str]') -> 'tuple[list[str], list[str]]':
|
49
|
+
"""Process CSV data.
|
50
|
+
|
51
|
+
Args:
|
52
|
+
data: CSV data.
|
53
|
+
|
54
|
+
Returns:
|
55
|
+
Enumeration fields and missing fields.
|
56
|
+
|
57
|
+
"""
|
58
|
+
reader = csv.reader(data)
|
59
|
+
next(reader) # header
|
60
|
+
|
61
|
+
enum = [] # type: list[str]
|
62
|
+
miss = [] # type: list[str]
|
63
|
+
for item in reader:
|
64
|
+
dscp = item[2]
|
65
|
+
rfcs = item[3]
|
66
|
+
|
67
|
+
temp = [] # type: list[str]
|
68
|
+
for rfc in filter(None, re.split(r'\[|\]', rfcs)):
|
69
|
+
if re.match(r'\d+', rfc):
|
70
|
+
continue
|
71
|
+
if 'RFC' in rfc and re.match(r'\d+', rfc[3:]):
|
72
|
+
#temp.append(f'[{rfc[:3]} {rfc[3:]}]')
|
73
|
+
temp.append(f'[:rfc:`{rfc[3:]}`]')
|
74
|
+
else:
|
75
|
+
temp.append(f'[{rfc}]'.replace('_', ' '))
|
76
|
+
tmp1 = f" {''.join(temp)}" if rfcs else ''
|
77
|
+
desc = self.wrap_comment(re.sub(r'(\[(\*+)\])|(\[(\d+)\])', r'',
|
78
|
+
re.sub(r'\r*\n', ' ', f'{dscp}{tmp1}', re.MULTILINE)))
|
79
|
+
|
80
|
+
name = dscp.split(' (')[0]
|
81
|
+
try:
|
82
|
+
code, _ = item[0], int(item[0])
|
83
|
+
renm = self.rename(name or 'Unassigned', code, original=dscp)
|
84
|
+
|
85
|
+
pres = f"{renm} = {code}"
|
86
|
+
sufs = f'#: {desc}'
|
87
|
+
|
88
|
+
# if len(pres) > 74:
|
89
|
+
# sufs = f"\n{' '*80}{sufs}"
|
90
|
+
|
91
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
92
|
+
enum.append(f'{sufs}\n {pres}')
|
93
|
+
except ValueError:
|
94
|
+
start, stop = item[0].split('-')
|
95
|
+
|
96
|
+
miss.append(f'if {start} <= value <= {stop}:')
|
97
|
+
miss.append(f' #: {desc}')
|
98
|
+
miss.append(f" return extend_enum(cls, '{name}_%d' % value, value)")
|
99
|
+
return enum, miss
|
100
|
+
|
101
|
+
|
102
|
+
if __name__ == '__main__':
|
103
|
+
sys.exit(Option()) # type: ignore[arg-type]
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# pylint: disable=unused-import
|
3
|
+
""":class:`~pcapkit.protocols.link.vlan.VLAN` Vendor Crawlers
|
4
|
+
================================================================
|
5
|
+
|
6
|
+
.. module:: pcapkit.vendor.vlan
|
7
|
+
|
8
|
+
This module contains all vendor crawlers of
|
9
|
+
:class:`~pcapkit.protocols.link.vlan.VLAN` implementations. Available
|
10
|
+
enumerations include:
|
11
|
+
|
12
|
+
.. list-table::
|
13
|
+
|
14
|
+
* - :const:`VLAN_PriorityLevel <pcapkit.const.vlan.priority_level.PriorityLevel>`
|
15
|
+
- Priority Levels [*]_
|
16
|
+
|
17
|
+
.. [*] https://en.wikipedia.org/wiki/IEEE_P802.1p#Priority_levels
|
18
|
+
|
19
|
+
"""
|
20
|
+
|
21
|
+
from pcapkit.vendor.vlan.priority_level import PriorityLevel as VLAN_PriorityLevel
|
22
|
+
|
23
|
+
__all__ = ['VLAN_PriorityLevel']
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Priority levels defined in IEEE 802.1p
|
3
|
+
============================================
|
4
|
+
|
5
|
+
.. module:: pcapkit.vendor.vlan.priority_level
|
6
|
+
|
7
|
+
This module contains the vendor crawler for **Priority levels defined in IEEE 802.1p**,
|
8
|
+
which is automatically generating :class:`pcapkit.const.vlan.priority_level.PriorityLevel`.
|
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
|
+
|
24
|
+
from bs4 import BeautifulSoup
|
25
|
+
|
26
|
+
__all__ = ['PriorityLevel']
|
27
|
+
|
28
|
+
|
29
|
+
class PriorityLevel(Vendor):
|
30
|
+
"""Priority levels defined in IEEE 802.1p"""
|
31
|
+
|
32
|
+
#: Value limit checker.
|
33
|
+
FLAG = 'isinstance(value, int) and 0b000 <= value <= 0b111'
|
34
|
+
#: Link to registry.
|
35
|
+
LINK = 'https://en.wikipedia.org/wiki/IEEE_P802.1p#Priority_levels'
|
36
|
+
|
37
|
+
def request(self, text: 'str') -> 'BeautifulSoup': # type: ignore[override] # pylint: disable=signature-differs,arguments-renamed
|
38
|
+
"""Fetch registry table.
|
39
|
+
|
40
|
+
Args:
|
41
|
+
text: Context from :attr:`~LinkType.LINK`.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
Parsed HTML source.
|
45
|
+
|
46
|
+
"""
|
47
|
+
return bs4.BeautifulSoup(text, 'html5lib')
|
48
|
+
|
49
|
+
def count(self, soup: 'BeautifulSoup') -> 'Counter[str]': # pylint: disable=signature-differs,arguments-renamed,unused-argument
|
50
|
+
"""Count field records."""
|
51
|
+
return collections.Counter()
|
52
|
+
|
53
|
+
def process(self, soup: 'BeautifulSoup') -> 'tuple[list[str], list[str]]': # pylint: disable=arguments-differ,arguments-renamed,unused-argument
|
54
|
+
"""Process HTML data.
|
55
|
+
|
56
|
+
Args:
|
57
|
+
data: Parsed HTML source.
|
58
|
+
|
59
|
+
Returns:
|
60
|
+
Enumeration fields and missing fields.
|
61
|
+
|
62
|
+
"""
|
63
|
+
table = soup.find_all('table', class_='wikitable')[0]
|
64
|
+
content = filter(lambda item: isinstance(item, bs4.element.Tag), table.tbody)
|
65
|
+
next(content) # header
|
66
|
+
|
67
|
+
enum = [] # type: list[str]
|
68
|
+
miss = [
|
69
|
+
"return extend_enum(cls, 'Unassigned [0b%s]' % bin(value)[2:].zfill(3), value)",
|
70
|
+
]
|
71
|
+
for item in content:
|
72
|
+
line = item.find_all('td')
|
73
|
+
|
74
|
+
pval = ' '.join(line[0].stripped_strings)
|
75
|
+
prio = ' '.join(line[1].stripped_strings)
|
76
|
+
abbr = ' '.join(line[2].stripped_strings)
|
77
|
+
desc = ' '.join(line[3].stripped_strings)
|
78
|
+
|
79
|
+
match = re.match(r'(\d) *(\(.*\))*', prio)
|
80
|
+
group = match.groups() # type: ignore[union-attr]
|
81
|
+
|
82
|
+
code = f'0b{bin(int(pval))[2:].zfill(3)}'
|
83
|
+
tmp1 = self.wrap_comment(f"{desc} {group[1] or ''}")
|
84
|
+
|
85
|
+
pres = f"{abbr} = {code}"
|
86
|
+
sufs = f"#: {tmp1}"
|
87
|
+
|
88
|
+
# if len(pres) > 74:
|
89
|
+
# sufs = f"\n{' '*80}{sufs}"
|
90
|
+
|
91
|
+
# enum.append(f'{pres.ljust(76)}{sufs}')
|
92
|
+
enum.append(f'{sufs}\n {pres}')
|
93
|
+
return enum, miss
|
94
|
+
|
95
|
+
|
96
|
+
if __name__ == '__main__':
|
97
|
+
sys.exit(PriorityLevel()) # type: ignore[arg-type]
|