Repository navigation
New features
pysap/SAPEPP.py: Added EPP v1–v3 structures, variable items,
SAP-PASSPORTHTTP conversion, and SAP Diag/RFC/NWRFC bindings
(@martingalloar, #107).pysap/SAPPSE.py,bin/pysapgenpse, andextra/pse2john.py: Added plain
PSE certificate export support (@martingalloar, #99).
Enhancements and improvements
- Routed-stream examples now expose a positive
--timeoutfor bounded
connection and response waits. Shared console helpers now provide common
completion primitives and run command files through the full console
connection and cleanup lifecycle (@martingalloar, #108). examples/router_fingerprint.pyand its JSON database: Added two modeled
malformed-route probes, bounded NI timeouts, typed close outcomes, weighted
fuzzy ranking, a static database-version summary, and sanitized fingerprints
for retained builds (@martingalloar, #108).pysap/SAPMS.py,examples/ms_monitor.py, and Message Server docs: Added
monitor operations, structures, enums, response fields, and SNC variants
(@martingalloar, #106).pysap/SAPNI.py,pysap/SAPRFC.py, and docs: Added bounded NI streaming,
timeout controls, and named RFCID constants (@martingalloar, #107).pysap/utils/console.py: Improved argument parsing, logging, cleanup, and
interactive exit handling (@martingalloar, #105).README.md,docs/index.rst: Refreshed project badges and documentation
links.- CI: Updated GitHub Actions and adopted uv (@martingalloar, #98).
Fixes
- Breaking: Split the fixed
SAPMSenvelope from variable Message Server
bodies. Construct structured frames asSAPMS(...) / SAPMSPayload(...)and
forwarded peer frames asSAPMS(...) / SAPMSPeerPayload(...); header-only
frames are now represented bySAPMSwithout a payload. This removes the
SAPMSHeaderOnlyandSAPMSPeerMessagecompatibility subclasses. examples/router_fingerprint.py: Avoided misclassifying control replies as
errors, duplicate-record hit inflation, and exporting matched database rows
in place of actual observations.pysap/SAPMS.py: Decode Message Server-forwarded peer frames with
iflag=0as messages rather than ADM records, avoiding short-message
parser failures inms_listener.py.pysap/SAPMS.pyand Message Server examples: Distinguished forwarded peer,
Dispatcher ADM, ASCS Gateway, and header-only frames; added bounded
connection/response timeouts, reliable cleanup, scripted monitor startup,
and configurable impersonator identity fields (@martingalloar, #108).examples/router_admin.py,examples/router_password_check.py: Accept
password-only info requests without logging the password, bound admin
acknowledgements, and use bounded NI-stream framing for password-check
timings instead of a partial raw read.pysap/SAPRouter.py: Omit route passwords from native-proxy debug logs.examples/router_scanner.py: Serialize expanded network targets as host
strings, distinguish denied routes from unreachable targets, and detect
quick raw-mode closes before reporting a target open.pysap/SAPRouter.py,examples/router_niping.py: Report non-denial router
replies as typedSAPRouterResponseErrorvalues and close failed routed
sockets instead of leaking them or showing an uncaught traceback; the
example now exits nonzero on connection failure.pysap/SAPNI.py: Treat a clean stream EOF as normal NI server-handler
disconnect instead of surfacing an unhandled exception.- Breaking: Replaced the incompatible
SAPRFCTHStructname with
pysap.SAPEPP.SAPEPPand its canonical fields (@martingalloar, #107). pysap/SAPCAR.py: Fixed multi-block extraction (@martingalloar, #104).pysap/SAPRFC.py: Fixed Python 3 string/bytes handling and added
SAPXPG_END_XPGhandling (@Tmm, #103).
Full Changelog: v0.2.0...v0.2.1