Add comprehensive network mapper and workflow script
- comprehensive_mapper.py: Combines network scanning with pfSense XML parsing - run_network_mapping.sh: Complete workflow script for network discovery - Successfully tested with both pfSense XML files and live network scan - Generates comprehensive JSON data and SVG network diagrams - Includes WireGuard VPN topology, static routes, and DHCP mappings
This commit is contained in:
214
run_network_mapping.sh
Executable file
214
run_network_mapping.sh
Executable file
@@ -0,0 +1,214 @@
|
||||
#!/bin/bash
|
||||
# Complete Network Mapping Workflow
|
||||
# This script runs the full network discovery and diagram generation process
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
echo "=========================================="
|
||||
echo "COMPREHENSIVE NETWORK MAPPING WORKFLOW"
|
||||
echo "=========================================="
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
print_step() {
|
||||
echo -e "${BLUE}[STEP]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if required files exist
|
||||
check_requirements() {
|
||||
print_step "Checking requirements..."
|
||||
|
||||
if [ ! -f "network_scanner.py" ]; then
|
||||
print_error "network_scanner.py not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "pfsense_xml_parser.py" ]; then
|
||||
print_error "pfsense_xml_parser.py not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "comprehensive_mapper.py" ]; then
|
||||
print_error "comprehensive_mapper.py not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "svg_generator.py" ]; then
|
||||
print_error "svg_generator.py not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_status "All required scripts found"
|
||||
}
|
||||
|
||||
# Find pfSense XML files
|
||||
find_pfsense_files() {
|
||||
print_step "Looking for pfSense XML configuration files..."
|
||||
|
||||
PFSENSE_FILES=$(ls config-*.xml 2>/dev/null || true)
|
||||
|
||||
if [ -z "$PFSENSE_FILES" ]; then
|
||||
print_warning "No pfSense XML files found in current directory"
|
||||
print_warning "Please place your pfSense backup XML files here"
|
||||
echo "Expected format: config-hostname-timestamp.xml"
|
||||
return 1
|
||||
fi
|
||||
|
||||
print_status "Found pfSense XML files:"
|
||||
echo "$PFSENSE_FILES" | while read -r file; do
|
||||
echo " - $file"
|
||||
done
|
||||
|
||||
# Export for use in other functions
|
||||
export PFSENSE_FILES
|
||||
return 0
|
||||
}
|
||||
|
||||
# Run network scan (optional)
|
||||
run_network_scan() {
|
||||
print_step "Running network scan..."
|
||||
|
||||
if [ -f "config.json" ]; then
|
||||
print_status "Using existing config.json for network scan"
|
||||
python3 network_scanner.py -c config.json -o network_scan.json
|
||||
else
|
||||
print_warning "No config.json found - skipping network scan"
|
||||
print_warning "Create config.json to enable live network scanning"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Run comprehensive mapping
|
||||
run_comprehensive_mapping() {
|
||||
print_step "Running comprehensive network mapping..."
|
||||
|
||||
# Build command with pfSense files
|
||||
CMD="./comprehensive_mapper.py -o comprehensive_network.json --svg comprehensive_network.svg -v"
|
||||
|
||||
if [ -n "$PFSENSE_FILES" ]; then
|
||||
CMD="$CMD -p $PFSENSE_FILES"
|
||||
fi
|
||||
|
||||
if [ -f "network_scan.json" ]; then
|
||||
CMD="$CMD -s network_scan.json"
|
||||
fi
|
||||
|
||||
print_status "Executing: $CMD"
|
||||
eval $CMD
|
||||
}
|
||||
|
||||
# Generate summary report
|
||||
generate_report() {
|
||||
print_step "Generating summary report..."
|
||||
|
||||
if [ -f "comprehensive_network.json" ]; then
|
||||
echo "# Network Mapping Report" > network_report.md
|
||||
echo "Generated on: $(date)" >> network_report.md
|
||||
echo "" >> network_report.md
|
||||
|
||||
# Extract key statistics
|
||||
SEGMENTS=$(jq '.segments | length' comprehensive_network.json)
|
||||
PFSENSE_COUNT=$(jq '.pfsense_firewalls | length' comprehensive_network.json)
|
||||
WG_NETWORKS=$(jq '.wireguard_networks | length' comprehensive_network.json)
|
||||
STATIC_ROUTES=$(jq '.routing_table | length' comprehensive_network.json)
|
||||
DHCP_MAPPINGS=$(jq '.static_mappings | length' comprehensive_network.json)
|
||||
|
||||
echo "## Network Statistics" >> network_report.md
|
||||
echo "- Network Segments: $SEGMENTS" >> network_report.md
|
||||
echo "- pfSense Firewalls: $PFSENSE_COUNT" >> network_report.md
|
||||
echo "- WireGuard Networks: $WG_NETWORKS" >> network_report.md
|
||||
echo "- Static Routes: $STATIC_ROUTES" >> network_report.md
|
||||
echo "- DHCP Static Mappings: $DHCP_MAPPINGS" >> network_report.md
|
||||
echo "" >> network_report.md
|
||||
|
||||
echo "## Generated Files" >> network_report.md
|
||||
echo "- comprehensive_network.json - Complete network data" >> network_report.md
|
||||
echo "- comprehensive_network.svg - Network topology diagram" >> network_report.md
|
||||
echo "- network_report.md - This summary report" >> network_report.md
|
||||
|
||||
print_status "Report generated: network_report.md"
|
||||
else
|
||||
print_error "No comprehensive network data found"
|
||||
fi
|
||||
}
|
||||
|
||||
# Main workflow
|
||||
main() {
|
||||
echo "Starting comprehensive network mapping workflow..."
|
||||
echo ""
|
||||
|
||||
check_requirements
|
||||
|
||||
if ! find_pfsense_files; then
|
||||
print_error "Cannot proceed without pfSense XML files"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Optional network scan
|
||||
if [ -f "config.json" ]; then
|
||||
run_network_scan
|
||||
fi
|
||||
|
||||
# Comprehensive mapping (required)
|
||||
run_comprehensive_mapping
|
||||
|
||||
# Generate report
|
||||
generate_report
|
||||
|
||||
echo ""
|
||||
print_status "Workflow completed successfully!"
|
||||
echo ""
|
||||
echo "Generated files:"
|
||||
echo " 📊 comprehensive_network.json - Complete network data"
|
||||
echo " 🖼️ comprehensive_network.svg - Network topology diagram"
|
||||
echo " 📋 network_report.md - Summary report"
|
||||
echo ""
|
||||
echo "Open comprehensive_network.svg in your browser to view the network diagram"
|
||||
}
|
||||
|
||||
# Handle command line arguments
|
||||
case "${1:-}" in
|
||||
"scan-only")
|
||||
check_requirements
|
||||
run_network_scan
|
||||
;;
|
||||
"map-only")
|
||||
check_requirements
|
||||
find_pfsense_files
|
||||
run_comprehensive_mapping
|
||||
;;
|
||||
"report-only")
|
||||
generate_report
|
||||
;;
|
||||
"help"|"-h"|"--help")
|
||||
echo "Usage: $0 [command]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " (no command) - Run full workflow"
|
||||
echo " scan-only - Run only network scan"
|
||||
echo " map-only - Run only comprehensive mapping"
|
||||
echo " report-only - Generate only summary report"
|
||||
echo " help - Show this help"
|
||||
;;
|
||||
*)
|
||||
main
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user