Files
catarrh ec129c4463 Add --format option: timestamp and atr-time TPDU output modes
dump.py: tpdu_timestamp_prefix(), tpdu_atr_time_prefix(),
  format_message() accepts tpdu_prefix parameter,
  FileDumper supports fmt + ATR time tracking

__main__.py: --format/-f flag (hex|timestamp|atr-time),
  atr_time_start tracking in message loop

sniff-start.sh: pass through --format/-f and FORMAT env var
2026-08-10 23:53:38 +03:00

87 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# simtrace2-pysniff startup script
#
# Usage: ./sniff-start.sh [--format FORMAT] [--gsmtap HOST[:PORT]] [--pcap FILE] [--output FILE] [--inactivity-timeout SECONDS]
#
# Options set via environment variables act as defaults; CLI flags override them.
set -euo pipefail
shopt -s nullglob
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
GSMTAP="${GSMTAP:-}"
PCAP="${PCAP:-}"
OUTPUT="${OUTPUT:-}"
FORMAT="${FORMAT:-}"
INACTIVITY_TIMEOUT="${INACTIVITY_TIMEOUT:-0}"
while [[ $# -gt 0 ]]; do
case "$1" in
--gsmtap) GSMTAP="$2"; shift 2 ;;
--pcap) PCAP="$2"; shift 2 ;;
--output|-o) OUTPUT="$2"; shift 2 ;;
--format|-f) FORMAT="$2"; shift 2 ;;
--inactivity-timeout) INACTIVITY_TIMEOUT="$2"; shift 2 ;;
--keep-running|--no-reconnect)
EXTRA_ARGS+=("$1"); shift ;;
*) EXTRA_ARGS+=("$1"); shift ;;
esac
done
check_permissions() {
local bad_perms=0
for devdir in /sys/bus/usb/devices/*/; do
[[ -f "${devdir}busnum" ]] || continue
[[ -f "${devdir}devnum" ]] || continue
[[ -f "${devdir}uevent" ]] || continue
local vid
vid=$(grep -oP 'PRODUCT=\K[a-f0-9]+' "${devdir}uevent" 2>/dev/null || true)
[[ "$vid" == "1d50" ]] || continue
local busnum devnum node
busnum=$(<"${devdir}busnum")
devnum=$(<"${devdir}devnum")
node=$(printf '/dev/bus/usb/%03d/%03d' "$busnum" "$devnum")
if [[ ! -e "$node" ]]; then
continue
fi
if [[ -w "$node" ]]; then
return 0
fi
bad_perms=1
echo "Permission denied on $node" >&2
done
if [[ $bad_perms -eq 1 ]]; then
echo "" >&2
echo "Install the udev rule (then reconnect the device):" >&2
echo "──────────────────────────────────────────────────" >&2
echo " sudo cp '$PROJECT_DIR/70-simtrace2-pysniff.rules' /etc/udev/rules.d/" >&2
echo " sudo udevadm control --reload-rules" >&2
echo " sudo udevadm trigger" >&2
echo "──────────────────────────────────────────────────" >&2
return 1
fi
return 0
}
check_permissions || exit 3
ARGS=()
[[ -n "$GSMTAP" ]] && ARGS+=(--gsmtap "$GSMTAP")
[[ -n "$PCAP" ]] && ARGS+=(--pcap "$PCAP")
[[ -n "$OUTPUT" ]] && ARGS+=(--output "$OUTPUT")
[[ -n "$FORMAT" ]] && ARGS+=(--format "$FORMAT")
[[ "$INACTIVITY_TIMEOUT" != "0" ]] && ARGS+=(--inactivity-timeout "$INACTIVITY_TIMEOUT")
ARGS+=("${EXTRA_ARGS[@]}")
echo "Starting simtrace2-pysniff..." >&2
exec env PYTHONPATH="$PROJECT_DIR" python3 -m simtrace2_pysniff "${ARGS[@]}"