// /** // * File: CrawledHost.cs // * Author: haraldwolff // * // * This file and it's content is copyrighted by the Author and / or copyright holder. // * Any use wihtout proper permission is illegal and may lead to legal actions. // * // * // **/ using System; using System.Collections.Generic; using System.Security.Cryptography.X509Certificates; using ln.types; using ln.types.sync; using System.Net; using System.IO; using System.Net.NetworkInformation; using ln.logging; using System.Linq; using ln.snmp; using ln.snmp.endpoint; using ln.snmp.rfc1213; using ln.types.odb; namespace ln.skyscanner.crawl { public class CrawledHost : Persistent { private List interfaces = new List(); public RFC1213.Interface[] Interfaces { get => interfaces.ToArray(); set => interfaces = new List(value); } public String[] HWAddresses => interfaces.Select((intf) => intf.HWAddr).ToArray(); public String PrimaryHWAddr => HWAddresses.Where((hwa) => hwa != null && !String.Empty.Equals(hwa)).FirstOrDefault(); public String Name { get; set; } public CIDR PrimaryIP { get; set; } public CIDR[] IPAddresses { get { CIDR[] result = interfaces.Select((intf) => intf.IPAddresses).SelectMany((i) => i).ToArray(); if (result.Length == 0) return new CIDR[] { PrimaryIP }; return result; } } Dictionary hints = new Dictionary(); public DateTime FirstSeen; public DateTime LastSeen; public DateTime LastCheck; public DateTime NextCheck; public TimeSpan LastCheckTime; public bool SnmpDetected => GetHint("snmp.version", -1) != -1; public bool SSHDetected => GetHint("ssh.port", -1) != -1; public bool RFC1213Detected => GetHint("rfc1213", false); public CrawledHost() { Name = "noname"; PrimaryIP = IPAddress.Any; } public KeyValuePair[] Hints => hints.ToArray(); public void SetHint(string name,object value) { hints[name] = value; } public object GetHint(String name) { return hints[name]; } public T GetHint(string name) { return (T)GetHint(name); } public object GetHint(string name,object def) { if (HasHint(name)) return hints[name]; return def; } public T GetHint(string name,T def) { if (HasHint(name)) return (T)hints[name]; return def; } public bool HasHint(string name) { return hints.ContainsKey(name) && (hints[name] != null); } public override string ToString() { return String.Format("[CrawledHost PrimaryIP={0} Name={1}]",PrimaryIP,Name); } } }