Autarch/web/routes/net_mapper.py
DigiJ 2322f69516 v2.2.0 — Full arsenal expansion: 16 new security modules
Add WiFi Audit, API Fuzzer, Cloud Scanner, Threat Intel, Log Correlator,
Steganography, Anti-Forensics, BLE Scanner, Forensics, RFID/NFC, Malware
Sandbox, Password Toolkit, Web Scanner, Report Engine, Net Mapper, and
C2 Framework. Each module includes CLI interface, Flask routes, and web
UI template. Also includes Go DNS server source + binary, IP Capture
service, SYN Flood, Gone Fishing mail server, and hack hijack modules
from v2.0 work.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 05:20:39 -08:00

86 lines
2.5 KiB
Python

"""Network Topology Mapper — web routes."""
from flask import Blueprint, render_template, request, jsonify
from web.auth import login_required
net_mapper_bp = Blueprint('net_mapper', __name__)
def _svc():
from modules.net_mapper import get_net_mapper
return get_net_mapper()
@net_mapper_bp.route('/net-mapper/')
@login_required
def index():
return render_template('net_mapper.html')
@net_mapper_bp.route('/net-mapper/discover', methods=['POST'])
@login_required
def discover():
data = request.get_json(silent=True) or {}
target = data.get('target', '').strip()
if not target:
return jsonify({'ok': False, 'error': 'Target required'})
return jsonify(_svc().discover_hosts(target, method=data.get('method', 'auto')))
@net_mapper_bp.route('/net-mapper/discover/<job_id>', methods=['GET'])
@login_required
def discover_status(job_id):
return jsonify(_svc().get_job_status(job_id))
@net_mapper_bp.route('/net-mapper/scan-host', methods=['POST'])
@login_required
def scan_host():
data = request.get_json(silent=True) or {}
ip = data.get('ip', '').strip()
if not ip:
return jsonify({'ok': False, 'error': 'IP required'})
return jsonify(_svc().scan_host(ip,
port_range=data.get('port_range', '1-1024'),
service_detection=data.get('service_detection', True),
os_detection=data.get('os_detection', True)))
@net_mapper_bp.route('/net-mapper/topology', methods=['POST'])
@login_required
def build_topology():
data = request.get_json(silent=True) or {}
hosts = data.get('hosts', [])
return jsonify({'ok': True, **_svc().build_topology(hosts)})
@net_mapper_bp.route('/net-mapper/scans', methods=['GET'])
@login_required
def list_scans():
return jsonify({'ok': True, 'scans': _svc().list_scans()})
@net_mapper_bp.route('/net-mapper/scans', methods=['POST'])
@login_required
def save_scan():
data = request.get_json(silent=True) or {}
name = data.get('name', 'unnamed')
hosts = data.get('hosts', [])
return jsonify(_svc().save_scan(name, hosts))
@net_mapper_bp.route('/net-mapper/scans/<filename>', methods=['GET'])
@login_required
def load_scan(filename):
data = _svc().load_scan(filename)
if data:
return jsonify({'ok': True, 'scan': data})
return jsonify({'ok': False, 'error': 'Scan not found'})
@net_mapper_bp.route('/net-mapper/diff', methods=['POST'])
@login_required
def diff_scans():
data = request.get_json(silent=True) or {}
return jsonify(_svc().diff_scans(data.get('scan1', ''), data.get('scan2', '')))