mirror of
https://github.com/smittix/intercept.git
synced 2026-05-18 05:44:49 -07:00
Added ARFCN to Frequency Conversion
This commit is contained in:
@@ -82,6 +82,30 @@ def can_use_api():
|
|||||||
return current_usage < config.GSM_API_DAILY_LIMIT
|
return current_usage < config.GSM_API_DAILY_LIMIT
|
||||||
|
|
||||||
|
|
||||||
|
def arfcn_to_frequency(arfcn):
|
||||||
|
"""Convert ARFCN to downlink frequency in Hz.
|
||||||
|
|
||||||
|
Uses REGIONAL_BANDS to determine the correct band and conversion formula.
|
||||||
|
Returns frequency in Hz (e.g., 925800000 for 925.8 MHz).
|
||||||
|
"""
|
||||||
|
arfcn = int(arfcn)
|
||||||
|
|
||||||
|
# Search all bands to find which one this ARFCN belongs to
|
||||||
|
for region_bands in REGIONAL_BANDS.values():
|
||||||
|
for band_name, band_info in region_bands.items():
|
||||||
|
arfcn_start = band_info['arfcn_start']
|
||||||
|
arfcn_end = band_info['arfcn_end']
|
||||||
|
|
||||||
|
if arfcn_start <= arfcn <= arfcn_end:
|
||||||
|
# Found the right band, calculate frequency
|
||||||
|
# Downlink frequency = band_start + (arfcn - arfcn_start) * 200kHz
|
||||||
|
freq_hz = band_info['start'] + (arfcn - arfcn_start) * 200000
|
||||||
|
return int(freq_hz)
|
||||||
|
|
||||||
|
# If ARFCN not found in any band, raise error
|
||||||
|
raise ValueError(f"ARFCN {arfcn} not found in any known GSM band")
|
||||||
|
|
||||||
|
|
||||||
@gsm_spy_bp.route('/dashboard')
|
@gsm_spy_bp.route('/dashboard')
|
||||||
def dashboard():
|
def dashboard():
|
||||||
"""Render GSM Spy dashboard."""
|
"""Render GSM Spy dashboard."""
|
||||||
@@ -123,19 +147,19 @@ def start_scanner():
|
|||||||
bands = REGIONAL_BANDS.get(region, REGIONAL_BANDS['Americas'])
|
bands = REGIONAL_BANDS.get(region, REGIONAL_BANDS['Americas'])
|
||||||
|
|
||||||
# Build grgsm_scanner command
|
# Build grgsm_scanner command
|
||||||
# Example: grgsm_scanner -d 0 --freq-range 869000000:894000000
|
# Example: grgsm_scanner --args="rtl=0" -b GSM850 -b PCS1900
|
||||||
freq_ranges = []
|
|
||||||
for band_name, band_info in bands.items():
|
|
||||||
freq_ranges.append(f"{int(band_info['start'])}:{int(band_info['end'])}")
|
|
||||||
|
|
||||||
freq_range_arg = ','.join(freq_ranges)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cmd = [
|
cmd = ['grgsm_scanner']
|
||||||
'grgsm_scanner',
|
|
||||||
'-d', str(device_index),
|
# Add device argument (--args for RTL-SDR device selection)
|
||||||
'--freq-range', freq_range_arg
|
cmd.extend(['--args', f'rtl={device_index}'])
|
||||||
]
|
|
||||||
|
# Add band arguments (grgsm_scanner uses band names, not frequencies)
|
||||||
|
# Map EGSM900 to GSM900 since that's what grgsm_scanner expects
|
||||||
|
for band_name in bands.keys():
|
||||||
|
# Normalize band name (EGSM900 -> GSM900)
|
||||||
|
normalized_band = band_name.replace('EGSM', 'GSM')
|
||||||
|
cmd.extend(['-b', normalized_band])
|
||||||
|
|
||||||
logger.info(f"Starting GSM scanner: {' '.join(cmd)}")
|
logger.info(f"Starting GSM scanner: {' '.join(cmd)}")
|
||||||
|
|
||||||
@@ -193,11 +217,15 @@ def start_monitor():
|
|||||||
return jsonify({'error': 'ARFCN required'}), 400
|
return jsonify({'error': 'ARFCN required'}), 400
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# grgsm_livemon -a ARFCN -d DEVICE | tshark -i lo -Y "gsm_a.rr.timing_advance || gsm_a.tmsi || gsm_a.imsi"
|
# Convert ARFCN to frequency
|
||||||
|
frequency_hz = arfcn_to_frequency(arfcn)
|
||||||
|
frequency_mhz = frequency_hz / 1e6
|
||||||
|
|
||||||
|
# grgsm_livemon --args="rtl=0" -f 925.8M | tshark -i lo -Y "..."
|
||||||
grgsm_cmd = [
|
grgsm_cmd = [
|
||||||
'grgsm_livemon',
|
'grgsm_livemon',
|
||||||
'-a', str(arfcn),
|
'--args', f'rtl={device_index}',
|
||||||
'-d', str(device_index)
|
'-f', f'{frequency_mhz}M'
|
||||||
]
|
]
|
||||||
|
|
||||||
tshark_cmd = [
|
tshark_cmd = [
|
||||||
@@ -972,11 +1000,15 @@ def auto_start_monitor(tower_data):
|
|||||||
|
|
||||||
device_index = app_module.gsm_spy_active_device or 0
|
device_index = app_module.gsm_spy_active_device or 0
|
||||||
|
|
||||||
|
# Convert ARFCN to frequency
|
||||||
|
frequency_hz = arfcn_to_frequency(arfcn)
|
||||||
|
frequency_mhz = frequency_hz / 1e6
|
||||||
|
|
||||||
# Start grgsm_livemon
|
# Start grgsm_livemon
|
||||||
grgsm_cmd = [
|
grgsm_cmd = [
|
||||||
'grgsm_livemon',
|
'grgsm_livemon',
|
||||||
'-a', str(arfcn),
|
'--args', f'rtl={device_index}',
|
||||||
'-d', str(device_index)
|
'-f', f'{frequency_mhz}M'
|
||||||
]
|
]
|
||||||
|
|
||||||
tshark_cmd = [
|
tshark_cmd = [
|
||||||
|
|||||||
Reference in New Issue
Block a user