// /** // * File: RFC1213.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 ln.snmp.endpoint; using ln.snmp; using System.Linq; using ln.types; using ln.skyscanner.crawl.service; using System.Configuration; using System.Net.Sockets; namespace ln.skyscanner.crawl.tests { public class RFC1213 : CrawlService { public RFC1213() :base("rfc1213") {} public static void Check(CrawledHost crawledHost) { } public override bool Check(Crawl crawl) { if (!crawl.CheckRequiredOption("snmp")) return false; String[] orIDS = crawl.Host.GetHint("snmp.orids", new string[0]); String prID = crawl.Host.GetHint("snmp.sysObjectID", ""); crawl.Host.SetHint("rfc1213.warning", null); if (orIDS.Contains("1.3.6.1.2.1.31") || prID.Equals("1.3.6.1.4.1.14988.1")) { using (SnmpInterface snmp = SNMP.GetSnmpInterface(crawl.Host)) { try { ln.snmp.rfc1213.RFC1213.Interface[] interfaces = ln.snmp.rfc1213.RFC1213.GetInterfaces(snmp); if (interfaces.Length > 0) { crawl.Host.IPAddresses = interfaces.SelectMany(intf => intf.IPAddresses).ToArray(); crawl.Host.HWAddresses = interfaces.Select(intf => intf.HWAddr).ToArray(); crawl.Host.SetHint("rfc1213.interfaces",interfaces.Select(intf => string.Format("{0};{1};{2}",intf.Name,intf.HWAddr,String.Join(",",intf.IPAddresses.Select(ip=>ip.ToString())))).ToArray()); crawl.Host.SetHint("rfc1213", true); } } catch (TimeoutException) { crawl.Host.SetHint("rfc1213.warning", "Timeout"); crawl.Host.SetHint("rfc1213", false); } } } else { crawl.Host.SetHint("rfc1213", false); } return true; } public override bool HostProvidesOption(Crawl crawl, params object[] parameters) { return crawl.Host.GetHint("rfc1213", false); } } }