feat: Phase 8 — Network Discovery + Windows Dev-Setup-Skripte
Network Discovery:
- Go Agent: internal/scanner/scanner.go mit TCP-Sweep (Port 445/80/22/443),
ARP-Tabellen-Parser (Windows: arp -a, Linux: /proc/net/arp), Reverse-DNS,
50 gleichzeitige Goroutines mit Semaphore
- Go Agent main.go: COMMAND_TYPE_NETWORK_SCAN Case → scanner.Scan() → JSON stdout
- Backend: NetworkDevice Model (Id, AgentId, IpAddress, MacAddress, Hostname,
Vendor, IsManaged, FirstSeen, LastSeen)
- Backend: EF Migration AddNetworkDevices + Index auf IpAddress + MacAddress
- Backend: NetworkDevicesController GET /api/v1/network-devices + DELETE /{id}
- Backend: AgentGrpcService.ProcessNetworkScanResultAsync — upsert via MAC,
IsManaged=true wenn IP einem bekannten Agent entspricht
- Frontend: NetworkPage.tsx mit Scan-Panel, Device-Tabelle, Filter, Delete
- Frontend: App.tsx — 'Netzwerk' Nav-Eintrag mit Network Icon
Windows Dev-Setup:
- dev-start.ps1 — Startet Docker/Postgres, EF-Migrationen, Backend+Frontend
in separaten PowerShell-Fenstern; Voraussetzungen-Check (docker/dotnet/node/go)
- dev-stop.ps1 — Stoppt alle NexusRMM-Prozesse + PostgreSQL Container
- build-agent.ps1 — Baut nexus-agent.exe (Windows) + optional nexus-agent-linux
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
@@ -16,6 +17,7 @@ import (
|
||||
"nexusrmm.local/agent/internal/deployer"
|
||||
"nexusrmm.local/agent/internal/executor"
|
||||
"nexusrmm.local/agent/internal/meshagent"
|
||||
"nexusrmm.local/agent/internal/scanner"
|
||||
pb "nexusrmm.local/agent/pkg/proto"
|
||||
)
|
||||
|
||||
@@ -142,6 +144,21 @@ func executeCommand(ctx context.Context, client *connection.GrpcClient, agentID
|
||||
result = deployer.Install(ctx, cmd.Payload)
|
||||
case pb.CommandType_COMMAND_TYPE_UNINSTALL_SOFTWARE:
|
||||
result = deployer.Uninstall(ctx, cmd.Payload)
|
||||
case pb.CommandType_COMMAND_TYPE_NETWORK_SCAN:
|
||||
var params struct {
|
||||
Subnet string `json:"subnet"`
|
||||
}
|
||||
_ = json.Unmarshal([]byte(cmd.Payload), ¶ms)
|
||||
devices, err := scanner.Scan(ctx, params.Subnet)
|
||||
if err != nil {
|
||||
result = &executor.Result{ExitCode: 1, Stderr: err.Error()}
|
||||
} else {
|
||||
result = &executor.Result{
|
||||
ExitCode: 0,
|
||||
Stdout: scanner.ToJSON(devices),
|
||||
Success: true,
|
||||
}
|
||||
}
|
||||
default:
|
||||
result = &executor.Result{ExitCode: -1, Stderr: fmt.Sprintf("unknown command type: %v", cmd.Type)}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user