83 lines
3.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
|