From 301c25571a20a36603f7e7bd4460609169bfc17b Mon Sep 17 00:00:00 2001 From: Dicken Date: Sat, 25 Jul 2026 09:49:35 +0200 Subject: [PATCH] round41: Portscan-Timeout und Batch-Groesse fuers Heimnetz nachgeschaerft, letzten sequentiellen Rest parallelisiert --- apps/backend/src/scanner/networkScanner.ts | 8 ++++---- apps/backend/src/scanner/ports.ts | 15 +++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/backend/src/scanner/networkScanner.ts b/apps/backend/src/scanner/networkScanner.ts index bd7cf23..9463004 100644 --- a/apps/backend/src/scanner/networkScanner.ts +++ b/apps/backend/src/scanner/networkScanner.ts @@ -117,10 +117,10 @@ export async function scanDeviceServices( // verpassen - das führte zu falschen "nicht mehr gefunden"-Meldungen, // obwohl sich am Gerät nichts geändert hatte. const missedPriorityPorts = priorityPorts.filter((p) => !openPorts.includes(p)); - for (const port of missedPriorityPorts) { - const open = await isPortOpen(device.ip, port, 1500); - if (open) openPorts.push(port); - } + const retryResults = await Promise.all( + missedPriorityPorts.map(async (port) => ({ port, open: await isPortOpen(device.ip, port, 1500) })) + ); + for (const r of retryResults) if (r.open) openPorts.push(r.port); const found: DiscoveredService[] = []; diff --git a/apps/backend/src/scanner/ports.ts b/apps/backend/src/scanner/ports.ts index 9b05ed5..690e8b6 100644 --- a/apps/backend/src/scanner/ports.ts +++ b/apps/backend/src/scanner/ports.ts @@ -42,14 +42,21 @@ export function isPortOpen(host: string, port: number, timeoutMs = 800): Promise * Parallelität - für den vollständigen Portscan (1-65535, siehe * scanDeviceServices mit fullScan=true). Alle Ports auf einmal parallel zu * prüfen wäre bei 65535 Ports zu viel gleichzeitig offener Sockets; komplett - * nacheinander wäre selbst bei schnellen RSTs zu langsam. Ein Batch von 500 - * ist ein guter Mittelweg für ein Gerät im lokalen Netz. + * nacheinander wäre selbst bei schnellen RSTs zu langsam. + * + * Timeout bewusst knapp (300ms): im lokalen Netz (derselbe Subnetz-Bereich) + * liegt die Round-Trip-Zeit normalerweise im niedrigen einstelligen + * Millisekundenbereich - 300ms ist selbst dafür noch großzügig bemessen. + * Der vorherige Wert von 600-800ms war für WAN-Verbindungen gedacht, nicht + * fürs Heimnetz, und hat bei geschlossenen/gefilterten Ports (die den + * vollen Timeout ausschöpfen) über ~131 Batches hinweg spürbar Sekunden + * gekostet. */ export async function scanPortsInBatches( host: string, ports: number[], - batchSize = 500, - timeoutMs = 600 + batchSize = 1000, + timeoutMs = 300 ): Promise { const open: number[] = []; for (let i = 0; i < ports.length; i += batchSize) {