using System; using LanDiscovery.Models; namespace LanDiscovery.Services { public class DeviceClassifier { public DeviceTypeHint Classify(DiscoveredDevice device, string gatewayIp) { // 1. Check if Gateway if (device.IpAddress == gatewayIp) { return DeviceTypeHint.Gateway; } var vendor = device.Vendor?.ToLowerInvariant() ?? ""; var hostname = device.Hostname?.ToLowerInvariant() ?? ""; // 2. Vendor Hints if (vendor.Contains("apple")) return DeviceTypeHint.Mobile; // Or Workstation, but often mobile on WiFi if (vendor.Contains("samsung")) return DeviceTypeHint.Mobile; if (vendor.Contains("xiaomi") || vendor.Contains("pixel")) return DeviceTypeHint.Mobile; if (vendor.Contains("dell") || vendor.Contains("hp") || vendor.Contains("lenovo") || vendor.Contains("intel")) { // Likely Workstation/Laptop unless server if (hostname.Contains("server")) return DeviceTypeHint.Server; return DeviceTypeHint.Workstation; } if (vendor.Contains("synology") || vendor.Contains("qnap")) return DeviceTypeHint.Server; // NAS if (vendor.Contains("ubiquiti") || vendor.Contains("cisco") || vendor.Contains("netgear") || vendor.Contains("tp-link")) return DeviceTypeHint.Switch; // Or AP if (vendor.Contains("epson") || vendor.Contains("canon") || vendor.Contains("brother") || vendor.Contains("xerox")) return DeviceTypeHint.Printer; if (vendor.Contains("raspberry") || vendor.Contains("arduino") || vendor.Contains("espressif")) return DeviceTypeHint.IoT; if (vendor.Contains("vmware") || vendor.Contains("hyper-v") || vendor.Contains("qemu")) return DeviceTypeHint.VirtualMachine; // 3. Hostname Hints if (hostname.Contains("iphone") || hostname.Contains("ipad") || hostname.Contains("android")) return DeviceTypeHint.Mobile; if (hostname.Contains("desktop") || hostname.Contains("laptop")) return DeviceTypeHint.Workstation; if (hostname.Contains("print")) return DeviceTypeHint.Printer; if (hostname.Contains("tv") || hostname.Contains("cast")) return DeviceTypeHint.IoT; return DeviceTypeHint.Unknown; } } }