stackforge 0.2.0__tar.gz → 0.4.0__tar.gz
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.
- {stackforge-0.2.0 → stackforge-0.4.0}/.github/workflows/test.yml +2 -2
- {stackforge-0.2.0 → stackforge-0.4.0}/.gitignore +7 -0
- stackforge-0.4.0/CONTRIBUTING.md +238 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/Cargo.lock +679 -8
- {stackforge-0.2.0 → stackforge-0.4.0}/Cargo.toml +3 -1
- stackforge-0.4.0/PKG-INFO +377 -0
- stackforge-0.4.0/README.md +352 -0
- stackforge-0.4.0/cliff.toml +94 -0
- stackforge-0.4.0/cog.toml +13 -0
- stackforge-0.4.0/crates/stackforge-core/Cargo.toml +41 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/error.rs +4 -1
- stackforge-0.4.0/crates/stackforge-core/src/flow/config.rs +54 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/error.rs +25 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/key.rs +455 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/mod.rs +318 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/state.rs +332 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/table.rs +363 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/tcp_reassembly.rs +366 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/tcp_state.rs +451 -0
- stackforge-0.4.0/crates/stackforge-core/src/flow/udp_state.rs +71 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/arp.rs +97 -55
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/bindings.rs +28 -3
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/bitmap.rs +169 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/builder.rs +400 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/edns.rs +453 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/header.rs +440 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/mod.rs +447 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/query.rs +239 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/rdata.rs +2244 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/rr.rs +635 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/svcb.rs +279 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dns/types.rs +906 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/builder.rs +835 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/control.rs +428 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/data.rs +360 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/ie.rs +1620 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/management.rs +1028 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/mod.rs +953 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/radiotap.rs +697 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/security.rs +743 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot11/types.rs +1122 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/beacon.rs +509 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/builder.rs +752 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/command.rs +526 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/crc.rs +109 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/mod.rs +1455 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/security.rs +388 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/dot15d4/types.rs +316 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ethernet.rs +52 -22
- stackforge-0.4.0/crates/stackforge-core/src/layer/field.rs +1578 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/field_ext.rs +538 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/ftp/builder.rs +443 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/ftp/mod.rs +599 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/generic/builder.rs +283 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/generic/mod.rs +515 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http/builder.rs +382 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http/detection.rs +83 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http/mod.rs +682 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http/request.rs +158 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http/response.rs +174 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http2/builder.rs +698 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http2/frames.rs +734 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http2/hpack.rs +1266 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/http2/mod.rs +551 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/builder.rs +23 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/checksum.rs +2 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/error.rs +2 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/extensions.rs +12 -3
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/mod.rs +41 -49
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/icmp/types.rs +2 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/icmpv6/builder.rs +496 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/icmpv6/mod.rs +763 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/imap/builder.rs +466 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/imap/mod.rs +602 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/builder.rs +49 -4
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/checksum.rs +18 -11
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/fragmentation.rs +22 -14
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/header.rs +31 -14
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/options.rs +73 -51
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/protocol.rs +5 -3
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/routing.rs +21 -1
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/ttl.rs +2 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/ipv6/builder.rs +307 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/ipv6/ext_headers.rs +306 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/ipv6/mod.rs +579 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/l2tp/builder.rs +386 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/l2tp/mod.rs +642 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/mod.rs +1733 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/modbus/builder.rs +620 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/modbus/crc.rs +169 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/modbus/mod.rs +866 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/mqtt/builder.rs +781 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/mqtt/mod.rs +1295 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/mqttsn/builder.rs +1095 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/mqttsn/mod.rs +1284 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/neighbor.rs +39 -20
- stackforge-0.4.0/crates/stackforge-core/src/layer/pop3/builder.rs +353 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/pop3/mod.rs +382 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/quic/builder.rs +386 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/quic/frames.rs +651 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/quic/headers.rs +315 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/quic/mod.rs +824 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/quic/varint.rs +202 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/raw.rs +42 -13
- stackforge-0.4.0/crates/stackforge-core/src/layer/smtp/builder.rs +354 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/smtp/mod.rs +544 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/ssh/builder.rs +86 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/ssh/mod.rs +385 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/stack.rs +330 -21
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/builder.rs +66 -7
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/checksum.rs +15 -7
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/flags.rs +22 -7
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/header.rs +28 -29
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/options.rs +82 -45
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/services.rs +4 -1
- stackforge-0.4.0/crates/stackforge-core/src/layer/tftp/builder.rs +262 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tftp/mod.rs +585 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/builder.rs +272 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/cert.rs +201 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/cipher_aead.rs +368 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/cipher_block.rs +311 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/cipher_stream.rs +104 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/compression.rs +54 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/groups.rs +152 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/hash.rs +165 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/hkdf_tls13.rs +311 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/hmac_tls.rs +230 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/mod.rs +31 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/prf.rs +241 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/crypto/suites.rs +539 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/common.rs +163 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/key_share.rs +115 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/mod.rs +166 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/signature_algorithms.rs +49 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/sni.rs +80 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/extensions/supported_versions.rs +69 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/certificate.rs +292 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/client_hello.rs +278 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/finished.rs +41 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/key_exchange.rs +212 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/mod.rs +211 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/handshake/server_hello.rs +216 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/keyexchange/ecdhe.rs +329 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/keyexchange/mod.rs +44 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/mod.rs +150 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/record.rs +406 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/session.rs +301 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/sslv2/handshake.rs +371 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/sslv2/mod.rs +26 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/sslv2/record.rs +123 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/tls/types.rs +548 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/udp/builder.rs +31 -4
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/udp/checksum.rs +12 -8
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/udp/mod.rs +13 -13
- stackforge-0.4.0/crates/stackforge-core/src/layer/zwave/builder.rs +423 -0
- stackforge-0.4.0/crates/stackforge-core/src/layer/zwave/mod.rs +1238 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/lib.rs +48 -1
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/packet.rs +262 -15
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/pcap/reader.rs +3 -3
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/pcap/writer.rs +6 -6
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/bits.rs +5 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/checksum.rs +7 -2
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/compare.rs +8 -10
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/hex.rs +13 -9
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/padding.rs +4 -1
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/random.rs +2 -0
- stackforge-0.4.0/python/stackforge/__init__.py +109 -0
- stackforge-0.4.0/python/stackforge/custom.py +252 -0
- stackforge-0.4.0/rustfmt.toml +22 -0
- stackforge-0.4.0/src/lib.rs +4397 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/mod.rs +2 -0
- stackforge-0.4.0/tests/integration/compat_tests/ssh_compat.rs +40 -0
- stackforge-0.4.0/tests/integration/compat_tests/tls_compat.rs +103 -0
- stackforge-0.4.0/tests/integration/dns.rs +978 -0
- stackforge-0.4.0/tests/integration/dot11.rs +1300 -0
- stackforge-0.4.0/tests/integration/dot15d4.rs +1333 -0
- stackforge-0.4.0/tests/integration/ftp.rs +519 -0
- stackforge-0.4.0/tests/integration/http.rs +620 -0
- stackforge-0.4.0/tests/integration/http2.rs +1330 -0
- stackforge-0.4.0/tests/integration/icmpv6.rs +480 -0
- stackforge-0.4.0/tests/integration/imap.rs +537 -0
- stackforge-0.4.0/tests/integration/ipv6.rs +595 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/main.rs +18 -0
- stackforge-0.4.0/tests/integration/modbus.rs +508 -0
- stackforge-0.4.0/tests/integration/mqtt.rs +384 -0
- stackforge-0.4.0/tests/integration/pop3.rs +490 -0
- stackforge-0.4.0/tests/integration/quic.rs +544 -0
- stackforge-0.4.0/tests/integration/smtp.rs +517 -0
- stackforge-0.4.0/tests/integration/ssh.rs +184 -0
- stackforge-0.4.0/tests/integration/tftp.rs +354 -0
- stackforge-0.4.0/tests/integration/tls.rs +863 -0
- stackforge-0.4.0/tests/integration/zwave.rs +318 -0
- stackforge-0.4.0/tests/python/test_custom.py +370 -0
- stackforge-0.4.0/tests/python/test_dns.py +603 -0
- stackforge-0.4.0/tests/python/test_dot11.py +469 -0
- stackforge-0.4.0/tests/python/test_dot15d4.py +562 -0
- stackforge-0.4.0/tests/python/test_flow.py +370 -0
- stackforge-0.4.0/tests/python/test_ftp.py +469 -0
- stackforge-0.4.0/tests/python/test_http.py +391 -0
- stackforge-0.4.0/tests/python/test_icmpv6.py +299 -0
- stackforge-0.4.0/tests/python/test_imap.py +427 -0
- stackforge-0.4.0/tests/python/test_ipv6.py +362 -0
- stackforge-0.4.0/tests/python/test_l2tp.py +395 -0
- stackforge-0.4.0/tests/python/test_modbus.py +583 -0
- stackforge-0.4.0/tests/python/test_mqtt.py +612 -0
- stackforge-0.4.0/tests/python/test_mqttsn.py +558 -0
- stackforge-0.4.0/tests/python/test_pop3.py +414 -0
- stackforge-0.4.0/tests/python/test_quic.py +473 -0
- stackforge-0.4.0/tests/python/test_smtp.py +452 -0
- stackforge-0.4.0/tests/python/test_ssh.py +89 -0
- stackforge-0.4.0/tests/python/test_tftp.py +263 -0
- stackforge-0.4.0/tests/python/test_tls.py +343 -0
- stackforge-0.4.0/tests/python/test_uts_ftp.py +356 -0
- stackforge-0.4.0/tests/python/test_uts_http.py +430 -0
- stackforge-0.4.0/tests/python/test_uts_http2.py +578 -0
- stackforge-0.4.0/tests/python/test_uts_imap.py +388 -0
- stackforge-0.4.0/tests/python/test_uts_ipv6.py +436 -0
- stackforge-0.4.0/tests/python/test_uts_l2tp.py +370 -0
- stackforge-0.4.0/tests/python/test_uts_modbus.py +568 -0
- stackforge-0.4.0/tests/python/test_uts_mqtt.py +485 -0
- stackforge-0.4.0/tests/python/test_uts_mqttsn.py +593 -0
- stackforge-0.4.0/tests/python/test_uts_pop3.py +386 -0
- stackforge-0.4.0/tests/python/test_uts_quic.py +481 -0
- stackforge-0.4.0/tests/python/test_uts_smtp.py +364 -0
- stackforge-0.4.0/tests/python/test_uts_tftp.py +326 -0
- stackforge-0.4.0/tests/python/test_uts_zwave.py +331 -0
- stackforge-0.4.0/tests/python/test_zwave.py +493 -0
- stackforge-0.4.0/tests/sample_pcap/http2_h2c.pcap +0 -0
- stackforge-0.4.0/tests/sample_pcap/http_chunk.pcap +0 -0
- stackforge-0.4.0/tests/sample_pcap/http_compressed-brotli.pcap +0 -0
- stackforge-0.4.0/tests/sample_pcap/http_compressed-zstd.pcap +0 -0
- stackforge-0.4.0/tests/sample_pcap/http_compressed.pcap +0 -0
- stackforge-0.4.0/tests/sample_pcap/http_content_length.pcap +0 -0
- stackforge-0.4.0/tests/sample_pcap/http_head.pcapng +0 -0
- stackforge-0.4.0/tests/sample_pcap/http_tcp_psh.pcap +0 -0
- stackforge-0.4.0/tests/sample_pcap/ssh_ed25519.pcap +0 -0
- stackforge-0.4.0/tests/uts/dns.uts +522 -0
- stackforge-0.4.0/tests/uts/dns_dnssec.uts +146 -0
- stackforge-0.4.0/tests/uts/dns_edns0.uts +214 -0
- stackforge-0.4.0/tests/uts/dot11.uts +808 -0
- stackforge-0.4.0/tests/uts/dot15d4.uts +876 -0
- stackforge-0.4.0/tests/uts/fields.uts +2347 -0
- stackforge-0.4.0/tests/uts/ftp.uts +119 -0
- stackforge-0.4.0/tests/uts/http.uts +415 -0
- stackforge-0.4.0/tests/uts/http2.uts +2414 -0
- stackforge-0.4.0/tests/uts/imap.uts +147 -0
- stackforge-0.4.0/tests/uts/inet6.uts +2999 -0
- stackforge-0.4.0/tests/uts/modbus.uts +542 -0
- stackforge-0.4.0/tests/uts/mqtt.uts +189 -0
- stackforge-0.4.0/tests/uts/mqttsn.uts +818 -0
- stackforge-0.4.0/tests/uts/pop3.uts +126 -0
- stackforge-0.4.0/tests/uts/quic.uts +117 -0
- stackforge-0.4.0/tests/uts/smtp.uts +128 -0
- stackforge-0.4.0/tests/uts/ssh.uts +37 -0
- stackforge-0.4.0/tests/uts/tftp.uts +92 -0
- stackforge-0.4.0/tests/uts/tls/__init__.py +8 -0
- stackforge-0.4.0/tests/uts/tls/cert.uts +1107 -0
- stackforge-0.4.0/tests/uts/tls/example_client.py +101 -0
- stackforge-0.4.0/tests/uts/tls/example_server.py +68 -0
- stackforge-0.4.0/tests/uts/tls/pki/README.md +9 -0
- stackforge-0.4.0/tests/uts/tls/pki/ca_cert.pem +21 -0
- stackforge-0.4.0/tests/uts/tls/pki/ca_key.pem +28 -0
- stackforge-0.4.0/tests/uts/tls/pki/cli_cert.pem +22 -0
- stackforge-0.4.0/tests/uts/tls/pki/cli_key.pem +28 -0
- stackforge-0.4.0/tests/uts/tls/pki/srv_cert.pem +22 -0
- stackforge-0.4.0/tests/uts/tls/pki/srv_cert_ed25519.pem +17 -0
- stackforge-0.4.0/tests/uts/tls/pki/srv_key.pem +28 -0
- stackforge-0.4.0/tests/uts/tls/pki/srv_key_ed25519.pem +3 -0
- stackforge-0.4.0/tests/uts/tls/sslv2.uts +286 -0
- stackforge-0.4.0/tests/uts/tls/tls.uts +1695 -0
- stackforge-0.4.0/tests/uts/tls/tls13.uts +1309 -0
- stackforge-0.4.0/tests/uts/tls/tlsclientserver.uts +570 -0
- stackforge-0.4.0/tests/uts/zwave.uts +113 -0
- stackforge-0.2.0/CONTRIBUTING.md +0 -63
- stackforge-0.2.0/PKG-INFO +0 -62
- stackforge-0.2.0/README.md +0 -37
- stackforge-0.2.0/crates/stackforge-core/Cargo.toml +0 -22
- stackforge-0.2.0/crates/stackforge-core/src/layer/field.rs +0 -835
- stackforge-0.2.0/crates/stackforge-core/src/layer/mod.rs +0 -955
- stackforge-0.2.0/python/stackforge/__init__.py +0 -41
- stackforge-0.2.0/src/lib.rs +0 -2046
- {stackforge-0.2.0 → stackforge-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/.github/workflows/release.yml +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/.pre-commit-config.yaml +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/.python-version +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/CLAUDE.md +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/CODE_OF_CONDUCT.md +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/LICENSE +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-automata/Cargo.toml +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-automata/src/lib.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/ipv4/mod.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/layer/tcp/mod.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/pcap/mod.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/crates/stackforge-core/src/utils/mod.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/pyproject.toml +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/rust-toolchain.toml +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/arp.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/arp_compat.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/ethernet_compat.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/icmp_compat.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/ipv4_compat.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/tcp_compat.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/compat_tests/udp_compat.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/ethernet.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/field.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/layer.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/packet.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/integration/util.rs +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/__init__.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/conftest.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_arp_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_checksums_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_edge_cases_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_ethernet_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_icmp_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_ipv4_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_pcap_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_stacking_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_tcp_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_udp_compat.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/scapy_compat/test_uts_integration.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/test_core.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/test_pcap.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/python/test_udp_icmp.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/sample_pcap/tcprelay/PCAP.md +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/sample_pcap/tcprelay/smallFlows.pcap +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/sample_pcap/tcprelay/test.pcap +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/scripts/compare_packets.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/scripts/generate_scapy_fixtures.py +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/uts/inet.uts +0 -0
- /stackforge-0.2.0/tests/uts/inet6.uts → /stackforge-0.4.0/tests/uts/inet6 copy.uts +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/uts/l2.uts +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/tests/uts/l2tp.uts +0 -0
- {stackforge-0.2.0 → stackforge-0.4.0}/uv.lock +0 -0
|
@@ -36,10 +36,10 @@ jobs:
|
|
|
36
36
|
uv sync --frozen --no-install-project
|
|
37
37
|
|
|
38
38
|
- name: Build and Install
|
|
39
|
-
run:
|
|
39
|
+
run: uv run maturin develop
|
|
40
40
|
|
|
41
41
|
- name: Test Rust
|
|
42
|
-
run: cargo test
|
|
42
|
+
run: uv run cargo test
|
|
43
43
|
|
|
44
44
|
- name: Test Python
|
|
45
45
|
run: uv run pytest tests/python
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Contributing to Stackforge
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing! We welcome bug reports, feature requests, and pull requests.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- **Rust:** Stable toolchain — install via [rustup](https://rustup.rs/)
|
|
8
|
+
- **Python:** 3.13 or higher
|
|
9
|
+
- **uv:** Fast Python package manager — install via [astral.sh/uv](https://docs.astral.sh/uv/)
|
|
10
|
+
- **cog:** Conventional commit tool — install via `cargo install cocogitto`
|
|
11
|
+
|
|
12
|
+
## Setting Up the Environment
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 1. Clone the repository
|
|
16
|
+
git clone https://github.com/LaBackDoor/stackforge.git
|
|
17
|
+
cd stackforge
|
|
18
|
+
|
|
19
|
+
# 2. Sync Python dependencies
|
|
20
|
+
uv sync
|
|
21
|
+
|
|
22
|
+
# 3. Compile the Rust extension and install in editable mode
|
|
23
|
+
uv run maturin develop
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
> Re-run `uv run maturin develop` any time you change Rust code.
|
|
27
|
+
|
|
28
|
+
## Project Structure
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
stackforge/
|
|
32
|
+
├── crates/
|
|
33
|
+
│ ├── stackforge-core/ # Core Rust library (published to crates.io)
|
|
34
|
+
│ │ └── src/
|
|
35
|
+
│ │ ├── layer/ # Protocol implementations
|
|
36
|
+
│ │ │ ├── mod.rs # LayerKind enum, Layer trait, LayerEnum dispatch
|
|
37
|
+
│ │ │ ├── bindings.rs # Protocol detection rules (ethertype, port → layer)
|
|
38
|
+
│ │ │ ├── field.rs # Field abstractions (MacAddress, BytesField, etc.)
|
|
39
|
+
│ │ │ ├── ethernet.rs
|
|
40
|
+
│ │ │ ├── arp.rs
|
|
41
|
+
│ │ │ ├── ipv4/
|
|
42
|
+
│ │ │ ├── ipv6/
|
|
43
|
+
│ │ │ ├── tcp/
|
|
44
|
+
│ │ │ ├── udp/
|
|
45
|
+
│ │ │ ├── icmp/
|
|
46
|
+
│ │ │ ├── icmpv6/
|
|
47
|
+
│ │ │ ├── dns/
|
|
48
|
+
│ │ │ ├── http/
|
|
49
|
+
│ │ │ ├── http2/
|
|
50
|
+
│ │ │ ├── quic/
|
|
51
|
+
│ │ │ ├── l2tp/
|
|
52
|
+
│ │ │ ├── ssh/
|
|
53
|
+
│ │ │ ├── tls/
|
|
54
|
+
│ │ │ ├── dot11/ # 802.11 Wi-Fi
|
|
55
|
+
│ │ │ ├── dot15d4/ # 802.15.4 Zigbee
|
|
56
|
+
│ │ │ └── generic/ # Runtime custom protocols
|
|
57
|
+
│ │ ├── packet.rs
|
|
58
|
+
│ │ └── lib.rs
|
|
59
|
+
│ └── stackforge-automata/ # Async state machine framework (planned)
|
|
60
|
+
├── src/
|
|
61
|
+
│ └── lib.rs # PyO3 bindings
|
|
62
|
+
├── python/
|
|
63
|
+
│ └── stackforge/
|
|
64
|
+
│ ├── __init__.py # Python re-exports
|
|
65
|
+
│ └── custom.py # CustomLayer + typed fields
|
|
66
|
+
└── tests/
|
|
67
|
+
├── integration/ # Rust integration tests
|
|
68
|
+
├── python/ # Python tests (pytest)
|
|
69
|
+
│ └── scapy_compat/ # Scapy behavioural compatibility tests
|
|
70
|
+
├── uts/ # UTS regression test suites (Scapy-format)
|
|
71
|
+
└── sample_pcap/ # PCAP fixtures
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Running Tests
|
|
75
|
+
|
|
76
|
+
### Rust tests
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# All unit + integration tests
|
|
80
|
+
cargo test
|
|
81
|
+
|
|
82
|
+
# Single test by name
|
|
83
|
+
cargo test test_name
|
|
84
|
+
|
|
85
|
+
# Single integration file
|
|
86
|
+
cargo test --test integration dns
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Python tests
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# All Python tests
|
|
93
|
+
uv run pytest tests/python
|
|
94
|
+
|
|
95
|
+
# Single file
|
|
96
|
+
uv run pytest tests/python/test_dns.py
|
|
97
|
+
|
|
98
|
+
# Single test
|
|
99
|
+
uv run pytest tests/python/test_dns.py::test_dns_query_build
|
|
100
|
+
|
|
101
|
+
# Scapy compatibility tests only
|
|
102
|
+
uv run pytest tests/python/scapy_compat
|
|
103
|
+
|
|
104
|
+
# Verbose output
|
|
105
|
+
uv run pytest -v tests/python
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### UTS regression tests
|
|
109
|
+
|
|
110
|
+
UTS files in `tests/uts/` are Scapy-format regression suites run via the Python test suite:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
uv run pytest tests/python/scapy_compat/test_uts_integration.py
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Linting and Formatting
|
|
117
|
+
|
|
118
|
+
All of the following must pass before submitting a PR:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Rust
|
|
122
|
+
cargo fmt
|
|
123
|
+
cargo clippy
|
|
124
|
+
|
|
125
|
+
# Python
|
|
126
|
+
uv run ruff check .
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Adding a New Protocol Layer
|
|
130
|
+
|
|
131
|
+
Follow the existing pattern used by layers like `dns`, `http`, or `quic`.
|
|
132
|
+
|
|
133
|
+
### 1. Create the layer module
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
crates/stackforge-core/src/layer/<proto>/
|
|
137
|
+
├── mod.rs # Layer struct, parse(), fields, Layer trait impl
|
|
138
|
+
└── builder.rs # (optional) Builder for constructing packets
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The layer struct holds `start`/`end` offsets into a shared `Bytes` buffer — it does **not** copy field values on parse. Fields are read on demand:
|
|
142
|
+
|
|
143
|
+
```rust
|
|
144
|
+
pub struct MyProtoLayer {
|
|
145
|
+
start: usize,
|
|
146
|
+
end: usize,
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
impl MyProtoLayer {
|
|
150
|
+
pub fn my_field<'a>(&self, buf: &'a [u8]) -> u16 {
|
|
151
|
+
u16::from_be_bytes(buf[self.start..self.start + 2].try_into().unwrap())
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 2. Register the `LayerKind` variant
|
|
157
|
+
|
|
158
|
+
In `crates/stackforge-core/src/layer/mod.rs`, add a variant to the `LayerKind` enum and handle it in `LayerEnum`.
|
|
159
|
+
|
|
160
|
+
### 3. Add detection rules
|
|
161
|
+
|
|
162
|
+
In `crates/stackforge-core/src/layer/bindings.rs`, register how the new layer is detected (e.g., from an ethertype, IP protocol number, or TCP/UDP port).
|
|
163
|
+
|
|
164
|
+
### 4. Expose via PyO3
|
|
165
|
+
|
|
166
|
+
If the layer needs Python-accessible fields, add them to the `PyO3` bindings in `src/lib.rs`.
|
|
167
|
+
|
|
168
|
+
### 5. Write tests
|
|
169
|
+
|
|
170
|
+
- **Rust:** Add `tests/integration/<proto>.rs` with parse and build tests.
|
|
171
|
+
- **Python:** Add `tests/python/test_<proto>.py` covering field access, builders, and edge cases.
|
|
172
|
+
- **UTS (optional):** Add `tests/uts/<proto>.uts` for Scapy-format regression tests.
|
|
173
|
+
|
|
174
|
+
## Architecture Notes
|
|
175
|
+
|
|
176
|
+
- **Lazy Zero-Copy View** — `Packet::parse()` only records layer boundaries (offsets). Field values are read directly from the buffer when accessed, with no upfront copying.
|
|
177
|
+
- **Copy-on-Write Mutation** — The underlying `Bytes` buffer is only cloned when a mutation occurs on a shared packet.
|
|
178
|
+
- **`Packet(raw)` is unparsed** — always call `.parse()` before accessing layers or fields.
|
|
179
|
+
- **`Packet::parse()` assumes Ethernet first** — Dot11 and Dot15d4 frames require a dedicated parse entry point.
|
|
180
|
+
|
|
181
|
+
## Commit Messages
|
|
182
|
+
|
|
183
|
+
This project uses [Conventional Commits](https://www.conventionalcommits.org/) enforced by [cocogitto](https://docs.cocogitto.io/) (`cog`). All commits must follow the format:
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
<type>(<scope>): <description>
|
|
187
|
+
|
|
188
|
+
[optional body]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Common types:
|
|
192
|
+
|
|
193
|
+
| Type | When to use |
|
|
194
|
+
|------|-------------|
|
|
195
|
+
| `feat` | New feature or protocol |
|
|
196
|
+
| `fix` | Bug fix |
|
|
197
|
+
| `chore` | Maintenance, dependency updates, CI |
|
|
198
|
+
| `docs` | Documentation only |
|
|
199
|
+
| `test` | Adding or fixing tests |
|
|
200
|
+
| `refactor` | Code restructuring with no behaviour change |
|
|
201
|
+
| `perf` | Performance improvement |
|
|
202
|
+
|
|
203
|
+
Use `cog commit` instead of `git commit` to get an interactive prompt that validates the format:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
cog commit feat "add OSPF layer"
|
|
207
|
+
cog commit fix "correct DNS name compression offset"
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Breaking changes must include a `!` after the type or a `BREAKING CHANGE:` footer:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
cog commit feat! "redesign Layer trait interface"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Versioning and Changelog
|
|
217
|
+
|
|
218
|
+
Versions and the changelog are managed by `cog`. Maintainers cut releases with:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
# Bump version automatically based on commit history (patch / minor / major)
|
|
222
|
+
cog bump --auto
|
|
223
|
+
|
|
224
|
+
# Or bump explicitly
|
|
225
|
+
cog bump --patch
|
|
226
|
+
cog bump --minor
|
|
227
|
+
cog bump --major
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
`cog bump` runs `pre_bump_hooks` (updates `Cargo.toml` version), tags the commit, and regenerates `CHANGELOG.md` from the commit history. Contributors do not need to edit `CHANGELOG.md` manually.
|
|
231
|
+
|
|
232
|
+
## Pull Request Process
|
|
233
|
+
|
|
234
|
+
1. Fork the repo and create your branch from `main`.
|
|
235
|
+
2. Add tests for any new behaviour — both Rust and Python.
|
|
236
|
+
3. Ensure all tests pass: `cargo test` and `uv run pytest tests/python`.
|
|
237
|
+
4. Ensure linting passes: `cargo fmt && cargo clippy && uv run ruff check .`
|
|
238
|
+
5. Open a pull request with a clear description of what changed and why.
|