Replace lightweight async SniffSession with persistent synchronous session using raw pyserial (mirroring SimSession pattern). Background reader thread decodes and prints trace frames live as they arrive. API: session = SniffSession.open() session.start_15693() # live streaming (default) session.start_15693(live=False) # legacy batch mode session.stop() # or button press to pause/resume session.entries # all captured frames session.clear() .pythonstartup.py auto-creates session in sniff mode.
118 lines
3.7 KiB
Python
118 lines
3.7 KiB
Python
"""Auto-imports for interactive REPL sessions.
|
|
|
|
Usage: activate — core imports (Proxmark3, Cmd, etc.)
|
|
activate sim — + SimSession, all transponder models
|
|
activate sniff — + SniffSession, trace decoders
|
|
activate all — everything
|
|
"""
|
|
import os
|
|
import sys
|
|
|
|
_MODE = os.environ.get("PM3PY_MODE", "core")
|
|
|
|
# --- Import groups ---
|
|
|
|
CORE = [
|
|
("pm3py", "Proxmark3"),
|
|
("pm3py", "Cmd"),
|
|
("pm3py", "PM3Status"),
|
|
("pm3py", "PM3Error"),
|
|
("pm3py", "PM3Response"),
|
|
]
|
|
|
|
SIM = [
|
|
("pm3py.sim", "SimSession"),
|
|
("pm3py.sim", "DualInterfaceSession"),
|
|
("pm3py.sim", "SoftwareMedium"),
|
|
("pm3py.sim", "TableCompiler"),
|
|
("pm3py.sim", "RFFrame"),
|
|
# Transponder models
|
|
("pm3py.transponders.hf.iso14443a.base", "Tag14443A_3"),
|
|
("pm3py.transponders.hf.iso14443a.base", "Tag14443A_4"),
|
|
("pm3py.transponders.hf.iso14443a.nxp.mifare_classic", "MifareClassicTag"),
|
|
("pm3py.transponders.hf.iso14443a.nxp.desfire", "DesfireTag"),
|
|
("pm3py.transponders.hf.iso14443a.ndef", "NfcType2Tag"),
|
|
("pm3py.transponders.hf.iso14443a.ndef", "NfcType4Tag"),
|
|
("pm3py.transponders.hf.iso15693.base", "Tag15693"),
|
|
("pm3py.transponders.hf.iso15693.type5", "NfcType5Tag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.nxp_icode", "NxpIcodeTag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.icode_slix", "IcodeSlixTag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.icode_slix2", "IcodeSlix2Tag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.icode3", "Icode3Tag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.icode_dna", "IcodeDnaTag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.ntag5_platform", "Ntag5PlatformTag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.ntag5_switch", "Ntag5SwitchTag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.ntag5_link", "Ntag5LinkTag"),
|
|
("pm3py.transponders.hf.iso15693.nxp.ntag5_boost", "Ntag5BoostTag"),
|
|
("pm3py.transponders.lf.em.em4100", "EM4100Tag"),
|
|
("pm3py.transponders.lf.hid.hid", "HIDProxTag"),
|
|
("pm3py.transponders.lf.atmel.t5577", "T5577Tag"),
|
|
("pm3py.transponders.implants", "xEM"),
|
|
("pm3py.transponders.implants", "xNT"),
|
|
("pm3py.transponders.implants", "xM1"),
|
|
("pm3py.transponders.implants", "FlexDF"),
|
|
("pm3py.transponders.implants", "NExT"),
|
|
]
|
|
|
|
SNIFF = [
|
|
("pm3py.sniff", "SniffSession"),
|
|
("pm3py.trace", "parse_tracelog"),
|
|
("pm3py.trace", "decode_15693"),
|
|
("pm3py.trace", "decode_ndef_annotation"),
|
|
("pm3py.trace", "format_sniff_line"),
|
|
]
|
|
|
|
# --- Mode selection ---
|
|
|
|
MODES = {
|
|
"core": [CORE],
|
|
"sim": [CORE, SIM],
|
|
"sniff": [CORE, SNIFF],
|
|
"all": [CORE, SIM, SNIFF],
|
|
}
|
|
|
|
groups = MODES.get(_MODE, [CORE])
|
|
imports = []
|
|
for group in groups:
|
|
imports.extend(group)
|
|
|
|
# --- Load ---
|
|
|
|
loaded = {}
|
|
failed = {}
|
|
|
|
for module_name, attr_name in imports:
|
|
try:
|
|
module = __import__(module_name, fromlist=[attr_name])
|
|
obj = getattr(module, attr_name)
|
|
globals()[attr_name] = obj
|
|
loaded[attr_name] = module_name
|
|
except Exception as e:
|
|
failed[attr_name] = (module_name, str(e))
|
|
|
|
# --- Report ---
|
|
|
|
if loaded:
|
|
print(f"[pm3py:{_MODE}] Loaded: {', '.join(loaded.keys())}")
|
|
|
|
if _MODE == "core":
|
|
try:
|
|
pm3 = Proxmark3.sync()
|
|
print()
|
|
print("Synchronous connection established")
|
|
print()
|
|
except Exception as e:
|
|
print(f" (Proxmark3 connection failed: {e})")
|
|
|
|
if _MODE == "sniff":
|
|
try:
|
|
session = SniffSession.open()
|
|
print("Sniff session ready -- session.start_15693()")
|
|
except Exception as e:
|
|
print(f" (Sniff session failed: {e})")
|
|
|
|
if failed:
|
|
print(f"\n[pm3py:{_MODE}] Failed:")
|
|
for name, (mod, err) in failed.items():
|
|
print(f" {name} from {mod} -> {err}")
|