generated from Dicken/dickendock
round40: HTTP-Pruefung offener Ports parallelisiert (behebt sehr lange Scan-Zeiten seit vollstaendigem Portscan)
This commit is contained in:
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user