mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
api layer v0.2.4 - /nettools/traceroute endpoint
This commit is contained in:
@@ -7,7 +7,7 @@ from .devices_endpoint import get_all_devices, delete_unknown_devices, delete_al
|
||||
from .events_endpoint import delete_events, delete_events_30, get_events
|
||||
from .history_endpoint import delete_online_history
|
||||
from .prometheus_endpoint import getMetricStats
|
||||
from .nettools_endpoint import wakeonlan
|
||||
from .nettools_endpoint import wakeonlan, traceroute
|
||||
from .sync_endpoint import handle_sync_post, handle_sync_get
|
||||
import sys
|
||||
|
||||
@@ -200,6 +200,13 @@ def api_wakeonlan():
|
||||
mac = request.json.get("devMac")
|
||||
return wakeonlan(mac)
|
||||
|
||||
@app.route("/nettools/traceroute", methods=["POST"])
|
||||
def api_traceroute():
|
||||
if not is_authorized():
|
||||
return jsonify({"error": "Forbidden"}), 403
|
||||
ip = request.json.get("devLastIP")
|
||||
return traceroute(ip)
|
||||
|
||||
# --------------------------
|
||||
# Online history
|
||||
# --------------------------
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import subprocess
|
||||
import re
|
||||
import ipaddress
|
||||
from flask import jsonify
|
||||
|
||||
def wakeonlan(mac):
|
||||
@@ -19,3 +20,48 @@ def wakeonlan(mac):
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user