// /** // * 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; namespace ln.skyscanner.crawl { public class CrawledHost { private List ipaddresses = new List(); public List IPAddresses => ipaddresses; public String Name { get; set; } public CIDR PrimaryIP { get; set; } Dictionary hints = new Dictionary(); public DateTime FirstSeen; public DateTime LastSeen; public DateTime LastCheck; public DateTime NextCheck; 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 SnmpEndpoint GetSnmpEndpoint(SNMPEngine engine) { int snmpVersion = GetHint("snmp.version", -1); switch (snmpVersion) { case 1: SnmpV1Endpoint v1 = new SnmpV1Endpoint(engine, new IPEndPoint(PrimaryIP, 161)); v1.CommunityString = GetHint("snmp.community"); return v1; case 2: SnmpV2Endpoint v2 = new SnmpV2Endpoint(engine, new IPEndPoint(PrimaryIP, 161)); v2.CommunityString = GetHint("snmp.community"); return v2; case 3: USMEndpoint endpoint = new USMEndpoint(engine, new IPEndPoint(PrimaryIP, 161)); endpoint.AuthMethod = SnmpV3AuthMethod.SHA; endpoint.Username = GetHint("snmp.username"); endpoint.AuthKeyPhrase = GetHint("snmp.authkey"); return endpoint; default: return null; } } public override string ToString() { return String.Format("[CrawledHost PrimaryIP={0} IPAddresses=({1}) Name={2}]",PrimaryIP,String.Join(", ",IPAddresses),Name); } } }