ln.skyscanner/crawl/service/RFC1213.cs

83 lines
3.4 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;
using ln.types.net;
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.Networks = interfaces.SelectMany(intf => intf.IPAddresses).Zip(interfaces.SelectMany(intf => intf.Netmasks), (ip, nm) => new Network4(ip.AsUInt, nm.AsUInt)).ToArray();
crawl.Host.SetHint("rfc1213.interfaces", interfaces.Select(intf => string.Format("{0};{1};{2}",
intf.Name,
intf.HWAddr,
String.Join(",", intf.IPAddresses.Zip(intf.Netmasks,(ip,mask) => String.Format("{0}/{1}",ip.ToString(),mask.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);
}
}
}