mirror of
https://github.com/smittix/intercept.git
synced 2026-07-24 08:58:09 -07:00
Fix tshark capture: add GSMTAP filter, line buffering, stderr capture
- Add capture filter (-f 'udp port 4729') to only capture GSMTAP packets - Add -l flag for line-buffered output on live capture - Add early exit detection for tshark with stderr capture - Add stderr reader thread in monitor_thread for ongoing tshark diagnostics - Clean up grgsm_livemon if tshark fails to start Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+30
-1
@@ -313,7 +313,10 @@ def _start_monitoring_processes(arfcn: int, device_index: int) -> tuple[subproce
|
|||||||
raise FileNotFoundError('tshark not found. Please install wireshark/tshark.')
|
raise FileNotFoundError('tshark not found. Please install wireshark/tshark.')
|
||||||
|
|
||||||
tshark_cmd = [
|
tshark_cmd = [
|
||||||
'tshark', '-i', 'lo',
|
'tshark',
|
||||||
|
'-i', 'lo',
|
||||||
|
'-l', # Line-buffered output for live capture
|
||||||
|
'-f', 'udp port 4729', # Capture filter: only GSMTAP packets
|
||||||
'-Y', 'gsm_a.rr.timing_advance || gsm_a.tmsi || gsm_a.imsi',
|
'-Y', 'gsm_a.rr.timing_advance || gsm_a.tmsi || gsm_a.imsi',
|
||||||
'-T', 'fields',
|
'-T', 'fields',
|
||||||
'-e', 'gsm_a.rr.timing_advance',
|
'-e', 'gsm_a.rr.timing_advance',
|
||||||
@@ -333,6 +336,22 @@ def _start_monitoring_processes(arfcn: int, device_index: int) -> tuple[subproce
|
|||||||
register_process(tshark_proc)
|
register_process(tshark_proc)
|
||||||
logger.info(f"Started tshark (PID: {tshark_proc.pid})")
|
logger.info(f"Started tshark (PID: {tshark_proc.pid})")
|
||||||
|
|
||||||
|
# Check tshark didn't exit immediately
|
||||||
|
time.sleep(1)
|
||||||
|
if tshark_proc.poll() is not None:
|
||||||
|
stderr_output = ''
|
||||||
|
try:
|
||||||
|
stderr_output = tshark_proc.stderr.read()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
exit_code = tshark_proc.returncode
|
||||||
|
logger.error(f"tshark exited immediately (code: {exit_code}). stderr: {stderr_output[:500]}")
|
||||||
|
# Clean up grgsm_livemon since monitoring can't work without tshark
|
||||||
|
safe_terminate(grgsm_proc)
|
||||||
|
unregister_process(grgsm_proc)
|
||||||
|
unregister_process(tshark_proc)
|
||||||
|
raise RuntimeError(f'tshark failed (exit code {exit_code}): {stderr_output[:200]}')
|
||||||
|
|
||||||
return grgsm_proc, tshark_proc
|
return grgsm_proc, tshark_proc
|
||||||
|
|
||||||
|
|
||||||
@@ -1596,8 +1615,18 @@ def monitor_thread(process):
|
|||||||
finally:
|
finally:
|
||||||
output_queue_local.put(('eof', None))
|
output_queue_local.put(('eof', None))
|
||||||
|
|
||||||
|
def read_stderr():
|
||||||
|
try:
|
||||||
|
for line in iter(process.stderr.readline, ''):
|
||||||
|
if line:
|
||||||
|
logger.debug(f"tshark stderr: {line.strip()}")
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
stdout_thread = threading.Thread(target=read_stdout, daemon=True)
|
stdout_thread = threading.Thread(target=read_stdout, daemon=True)
|
||||||
stdout_thread.start()
|
stdout_thread.start()
|
||||||
|
stderr_thread = threading.Thread(target=read_stderr, daemon=True)
|
||||||
|
stderr_thread.start()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
while app_module.gsm_spy_monitor_process:
|
while app_module.gsm_spy_monitor_process:
|
||||||
|
|||||||
Reference in New Issue
Block a user