generated from Dicken/dickendock
round35: Vollstaendiger Portscan (1-65535) pro Geraet als Option, fuer Geraete mit vielen Diensten auf unueblichen Ports
This commit is contained in:
@@ -5,6 +5,7 @@ import * as categoryRepo from "../db/repositories/categories.js";
|
||||
import * as logRepo from "../db/repositories/logs.js";
|
||||
import * as settingsRepo from "../db/repositories/settings.js";
|
||||
import { scanDeviceServices } from "../scanner/networkScanner.js";
|
||||
import { fullPortRange } from "../scanner/ports.js";
|
||||
import { fetchFritzBoxHosts, type FritzBoxHost } from "../scanner/fritzbox.js";
|
||||
import {
|
||||
startJob,
|
||||
@@ -26,14 +27,14 @@ import type { Device } from "@launchpad/shared";
|
||||
* Einzelgerät-Endpunkt als auch der Sammel-Scan (siehe /api/scan/devices/all
|
||||
* weiter unten) dieselbe Logik nutzen, ohne sie zu duplizieren.
|
||||
*/
|
||||
async function performDeviceScan(device: Device) {
|
||||
async function performDeviceScan(device: Device, fullScan = false) {
|
||||
// Bestehende Dienste dieses Geräts VOR dem Scan merken, um danach zu
|
||||
// erkennen, welche davon diesmal nicht mehr gefunden wurden ("stale").
|
||||
const servicesBeforeScan = serviceRepo.listServicesByDevice(device.id);
|
||||
|
||||
const { services: discovered, suggestedHostname } = await scanDeviceServices(
|
||||
device,
|
||||
undefined,
|
||||
fullScan ? fullPortRange() : undefined,
|
||||
servicesBeforeScan.map((s) => s.port)
|
||||
);
|
||||
|
||||
@@ -138,6 +139,7 @@ async function performDeviceScan(device: Device) {
|
||||
export async function scanRoutes(app: FastifyInstance): Promise<void> {
|
||||
app.post("/api/scan/devices/:id", async (request, reply) => {
|
||||
const { id } = request.params as { id: string };
|
||||
const { full } = request.query as { full?: string };
|
||||
const device = deviceRepo.getDevice(id);
|
||||
if (!device) {
|
||||
return reply.code(404).send({ error: "Gerät nicht gefunden" });
|
||||
@@ -148,7 +150,7 @@ export async function scanRoutes(app: FastifyInstance): Promise<void> {
|
||||
}
|
||||
|
||||
try {
|
||||
return await performDeviceScan(device);
|
||||
return await performDeviceScan(device, full === "true");
|
||||
} catch (err) {
|
||||
const detail = err instanceof Error ? err.message : String(err);
|
||||
logRepo.logScan({
|
||||
|
||||
Reference in New Issue
Block a user