Add pfSense XML integration and complete workflow automation
- Add pfsense_integrator.py for automatic XML parsing and integration - Add complete_workflow.sh for one-command network discovery - Enhance integrated_scanner.py to auto-integrate pfSense XML files - Update README with pfSense XML features and workflow - Generate comprehensive network summaries from XML configs - Support for WireGuard, OpenVPN, IPsec, routing, DHCP, firewall rules
This commit is contained in:
@@ -10,6 +10,8 @@ import argparse
|
||||
from datetime import datetime
|
||||
from network_scanner import NetworkScanner, NetworkSegment
|
||||
from pfsense_scanner import PfSenseScanner
|
||||
from dataclasses import asdict
|
||||
from network_scanner import Device
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
@@ -33,11 +35,91 @@ class IntegratedNetworkScanner:
|
||||
# Run base network scan
|
||||
self.base_scanner.scan_all()
|
||||
|
||||
# Check for pfSense XML files and integrate them
|
||||
self._integrate_pfsense_xml()
|
||||
|
||||
# Identify and enhance pfSense devices
|
||||
self._scan_pfsense_devices()
|
||||
|
||||
logger.info("Integrated scan complete")
|
||||
|
||||
def _integrate_pfsense_xml(self):
|
||||
"""Automatically integrate pfSense XML files if present"""
|
||||
import glob
|
||||
from pfsense_integrator import PfSenseIntegrator
|
||||
|
||||
# Look for XML files in current directory
|
||||
xml_files = glob.glob("*.xml")
|
||||
if not xml_files:
|
||||
logger.info("No pfSense XML files found, skipping XML integration")
|
||||
return
|
||||
|
||||
logger.info(f"Found {len(xml_files)} pfSense XML files, integrating...")
|
||||
|
||||
try:
|
||||
integrator = PfSenseIntegrator(xml_files)
|
||||
integrator.load_pfsense_configs()
|
||||
|
||||
# Create temporary scan file for integration
|
||||
import tempfile
|
||||
import os
|
||||
|
||||
temp_scan = tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False)
|
||||
try:
|
||||
# Export current scan data
|
||||
temp_data = {
|
||||
'scan_timestamp': None,
|
||||
'segments': [
|
||||
{
|
||||
'name': seg.name,
|
||||
'cidr': seg.cidr,
|
||||
'gateway': seg.gateway,
|
||||
'is_vpn': seg.is_vpn,
|
||||
'devices': [asdict(dev) for dev in seg.devices]
|
||||
}
|
||||
for seg in self.base_scanner.segments
|
||||
]
|
||||
}
|
||||
json.dump(temp_data, temp_scan)
|
||||
temp_scan.close()
|
||||
|
||||
# Integrate pfSense data
|
||||
integrator.integrate_with_scan(temp_scan.name, temp_scan.name + '_enhanced')
|
||||
|
||||
# Load enhanced data back
|
||||
with open(temp_scan.name + '_enhanced', 'r') as f:
|
||||
enhanced_data = json.load(f)
|
||||
|
||||
# Update segments
|
||||
self.base_scanner.segments = []
|
||||
for seg_data in enhanced_data.get('segments', []):
|
||||
segment = NetworkSegment(
|
||||
name=seg_data['name'],
|
||||
cidr=seg_data['cidr'],
|
||||
gateway=seg_data['gateway'],
|
||||
is_vpn=seg_data['is_vpn'],
|
||||
devices=[]
|
||||
)
|
||||
|
||||
for dev_data in seg_data['devices']:
|
||||
device = Device(**dev_data)
|
||||
segment.devices.append(device)
|
||||
|
||||
self.base_scanner.segments.append(segment)
|
||||
|
||||
logger.info(f"Integrated {len(integrator.pfsense_configs)} pfSense configurations")
|
||||
|
||||
finally:
|
||||
# Clean up temp files
|
||||
try:
|
||||
os.unlink(temp_scan.name)
|
||||
os.unlink(temp_scan.name + '_enhanced')
|
||||
except:
|
||||
pass
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error integrating pfSense XML: {e}")
|
||||
|
||||
def _scan_pfsense_devices(self):
|
||||
"""Find and deeply scan pfSense devices"""
|
||||
logger.info("Looking for pfSense devices...")
|
||||
|
||||
Reference in New Issue
Block a user