round40: HTTP-Pruefung offener Ports parallelisiert (behebt sehr lange Scan-Zeiten seit vollstaendigem Portscan)

This commit is contained in:
2026-07-25 09:11:02 +02:00
parent 5deeeaec1d
commit 505353cd26

View File

@@ -124,7 +124,12 @@ export async function scanDeviceServices(
const found: DiscoveredService[] = [];
for (const port of openPorts) {
// Die HTTP-Abfrage je offenem Port läuft PARALLEL, nicht mehr
// nacheinander - bei bis zu 3 HTTP-Versuchen (Protokoll-Fallback +
// Titel-Wiederholung) à 2 Sekunden Timeout summierte sich das bei einem
// Gerät mit vielen offenen Ports (seit dem vollständigen 1-65535-Portscan
// deutlich häufiger) schnell auf mehrere Minuten PRO GERÄT.
async function probePort(port: number): Promise<DiscoveredService | null> {
let isHttps = port === 443 || port === 9443 || port === 8006 || port === 8443;
let baseUrl = `${isHttps ? "https" : "http"}://${address}:${port}`;
let probe = await probeHttp(baseUrl);
@@ -150,7 +155,7 @@ export async function scanDeviceServices(
// solcher Nicht-Web-Ports - die sollen NICHT als (dann meist
// ausgeblendeter) Dienst-Eintrag landen, sondern komplett übersprungen
// werden. "Mich interessieren doch nur Webifs."
if (probe.status === undefined) continue;
if (probe.status === undefined) return null;
const software = detectSoftware({
server: probe.server,
@@ -202,7 +207,7 @@ export async function scanDeviceServices(
// Ladebildschirme landen als ausgeblendeter Dienst im Adminbereich.
const visible = !!softwareResolved || (probe.ok && !titleIsJunkResolved);
found.push({
return {
hostname: address,
url: baseUrl,
https: isHttps,
@@ -214,7 +219,12 @@ export async function scanDeviceServices(
category: softwareResolved?.category,
icon: softwareResolved?.icon,
visible,
});
};
}
const probeResults = await Promise.all(openPorts.map(probePort));
for (const result of probeResults) {
if (result) found.push(result);
}
// Fallback für Dienste ohne bestätigtes Favicon (kein <link rel="icon">