ln.skyscanner/crawl/service/RFC1213.cs

76 lines
2.5 KiB
C#

// /**
// * 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<String[]>("snmp.orids", new string[0]);
String prID = crawl.Host.GetHint<string>("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);
}
}
}