import subprocess import re import ipaddress from flask import jsonify def wakeonlan(mac): # Validate MAC if not re.match(r'^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$', mac): return jsonify({"success": False, "error": f"Invalid MAC: {mac}"}), 400 try: result = subprocess.run( ["wakeonlan", mac], capture_output=True, text=True, check=True ) return jsonify({"success": True, "message": "WOL packet sent", "output": result.stdout.strip()}) except subprocess.CalledProcessError as e: return jsonify({"success": False, "error": "Failed to send WOL packet", "details": e.stderr.strip()}), 500 def traceroute(ip): """ Executes a traceroute to the given IP address. Parameters: ip (str): The target IP address to trace. Returns: JSON response with: - success (bool) - output (str) if successful - error (str) and details (str) if failed """ # -------------------------- # Step 1: Validate IP address # -------------------------- try: ipaddress.ip_address(ip) except ValueError: # Return 400 if IP is invalid return jsonify({"success": False, "error": f"Invalid IP: {ip}"}), 400 # -------------------------- # Step 2: Execute traceroute # -------------------------- try: result = subprocess.run( ["traceroute", ip], # Command and argument capture_output=True, # Capture stdout/stderr text=True, # Return output as string check=True # Raise CalledProcessError on non-zero exit ) # Return success response with traceroute output return jsonify({"success": True, "output": result.stdout.strip()}) # -------------------------- # Step 3: Handle command errors # -------------------------- except subprocess.CalledProcessError as e: # Return 500 if traceroute fails return jsonify({ "success": False, "error": "Traceroute failed", "details": e.stderr.strip() }), 500