WIP
parent
e124f5e885
commit
081d118ced
|
@ -31,6 +31,7 @@ using System.Threading;
|
||||||
using System.Net.NetworkInformation;
|
using System.Net.NetworkInformation;
|
||||||
using ln.skyscanner.crawl.tests;
|
using ln.skyscanner.crawl.tests;
|
||||||
using Castle.DynamicProxy;
|
using Castle.DynamicProxy;
|
||||||
|
using ln.types.odb;
|
||||||
|
|
||||||
namespace ln.skyscanner
|
namespace ln.skyscanner
|
||||||
{
|
{
|
||||||
|
@ -55,6 +56,12 @@ namespace ln.skyscanner
|
||||||
|
|
||||||
private static void Initialize()
|
private static void Initialize()
|
||||||
{
|
{
|
||||||
|
//ODB<CrawlPool> dB = new ODB<CrawlPool>("testdb");
|
||||||
|
|
||||||
|
//dB.Root.HostForIP(CIDR.Parse("1.2.3.4"));
|
||||||
|
//dB.Root.HostForIP(CIDR.Parse("2.3.4.5"));
|
||||||
|
|
||||||
|
//dB.SavePersistent(dB.RootObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,13 @@ using ln.types;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using ln.skyscanner.entities;
|
using ln.skyscanner.entities;
|
||||||
|
using ln.types.odb;
|
||||||
namespace ln.skyscanner.crawl
|
namespace ln.skyscanner.crawl
|
||||||
{
|
{
|
||||||
public class CrawlPool
|
public class CrawlPool : Persistent
|
||||||
{
|
{
|
||||||
private List<CrawledHost> hosts = new List<CrawledHost>();
|
private List<CrawledHost> hosts = new List<CrawledHost>();
|
||||||
private List<Subnet> subnets = new List<Subnet>();
|
private List<CrawledSubnet> subnets = new List<CrawledSubnet>();
|
||||||
|
|
||||||
public CrawlPool()
|
public CrawlPool()
|
||||||
{
|
{
|
||||||
|
@ -30,7 +31,7 @@ namespace ln.skyscanner.crawl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Subnet[] Subnets
|
public CrawledSubnet[] Subnets
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
@ -62,17 +63,22 @@ namespace ln.skyscanner.crawl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Subnet GetSubnet(CIDR network)
|
public void RemoveHost(CrawledHost crawledHost)
|
||||||
|
{
|
||||||
|
hosts.Remove(crawledHost);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CrawledSubnet GetSubnet(CIDR network)
|
||||||
{
|
{
|
||||||
lock (this)
|
lock (this)
|
||||||
{
|
{
|
||||||
foreach (Subnet subnet in subnets)
|
foreach (CrawledSubnet subnet in subnets)
|
||||||
{
|
{
|
||||||
if (subnet.Network.Equals(network))
|
if (subnet.Network.Equals(network))
|
||||||
return subnet;
|
return subnet;
|
||||||
}
|
}
|
||||||
|
|
||||||
Subnet net = new Subnet(network);
|
CrawledSubnet net = new CrawledSubnet(network);
|
||||||
subnets.Add(net);
|
subnets.Add(net);
|
||||||
return net;
|
return net;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,11 @@ using System.Linq;
|
||||||
using ln.snmp;
|
using ln.snmp;
|
||||||
using ln.snmp.endpoint;
|
using ln.snmp.endpoint;
|
||||||
using ln.snmp.rfc1213;
|
using ln.snmp.rfc1213;
|
||||||
|
using ln.types.odb;
|
||||||
|
|
||||||
namespace ln.skyscanner.crawl
|
namespace ln.skyscanner.crawl
|
||||||
{
|
{
|
||||||
public class CrawledHost
|
public class CrawledHost : Persistent
|
||||||
{
|
{
|
||||||
private List<RFC1213.Interface> interfaces = new List<RFC1213.Interface>();
|
private List<RFC1213.Interface> interfaces = new List<RFC1213.Interface>();
|
||||||
public RFC1213.Interface[] Interfaces
|
public RFC1213.Interface[] Interfaces
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// /**
|
||||||
|
// * File: Subnet.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.types;
|
||||||
|
using ln.types.odb;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
namespace ln.skyscanner.entities
|
||||||
|
{
|
||||||
|
public class CrawledSubnet : Persistent
|
||||||
|
{
|
||||||
|
public readonly CIDR Network;
|
||||||
|
public String Name;
|
||||||
|
|
||||||
|
public DateTime FirstSeen;
|
||||||
|
|
||||||
|
public DateTime LastScan;
|
||||||
|
public DateTime NextScan;
|
||||||
|
|
||||||
|
|
||||||
|
private CrawledSubnet()
|
||||||
|
{
|
||||||
|
FirstSeen = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CrawledSubnet(CIDR cidr)
|
||||||
|
{
|
||||||
|
Network = cidr;
|
||||||
|
Name = Network.ToString();
|
||||||
|
FirstSeen = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Network.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,7 @@ using System.Threading;
|
||||||
using ln.snmp.types;
|
using ln.snmp.types;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Converters;
|
using Newtonsoft.Json.Converters;
|
||||||
|
using ln.types.odb;
|
||||||
|
|
||||||
namespace ln.skyscanner.crawl
|
namespace ln.skyscanner.crawl
|
||||||
{
|
{
|
||||||
|
@ -37,6 +38,7 @@ namespace ln.skyscanner.crawl
|
||||||
|
|
||||||
public String BasePath { get; set; }
|
public String BasePath { get; set; }
|
||||||
public String PerfPath => Path.Combine(BasePath, "perfdb");
|
public String PerfPath => Path.Combine(BasePath, "perfdb");
|
||||||
|
public string PoolPath => Path.Combine(BasePath, "pool");
|
||||||
|
|
||||||
bool stopping;
|
bool stopping;
|
||||||
|
|
||||||
|
@ -45,16 +47,18 @@ namespace ln.skyscanner.crawl
|
||||||
public PoolJob[] CurrentJobs => crawlThreadPool.CurrentPoolJobs;
|
public PoolJob[] CurrentJobs => crawlThreadPool.CurrentPoolJobs;
|
||||||
public PoolJob[] QueuedJobs => crawlThreadPool.QueuedJobs;
|
public PoolJob[] QueuedJobs => crawlThreadPool.QueuedJobs;
|
||||||
|
|
||||||
public DiskObject<CrawlPool> _CrawlPool;
|
public CrawlPool CrawlPool => dbCrawlPool?.Root;
|
||||||
public CrawlPool CrawlPool => _CrawlPool?.Instance;
|
public ODB<CrawlPool> DBCrawlPool => dbCrawlPool;
|
||||||
|
|
||||||
|
|
||||||
//public SNMPEngine SNMPEngine { get; private set; }
|
|
||||||
|
|
||||||
[JsonConverter(typeof(StringEnumConverter))]
|
[JsonConverter(typeof(StringEnumConverter))]
|
||||||
public ComponentState CrawlerState { get; private set; }
|
public ComponentState CrawlerState { get; private set; }
|
||||||
|
|
||||||
Thread threadScheduler;
|
Thread threadScheduler;
|
||||||
|
|
||||||
|
private ODB<CrawlPool> dbCrawlPool;
|
||||||
|
|
||||||
public Crawler(SkyScanner skyScanner)
|
public Crawler(SkyScanner skyScanner)
|
||||||
{
|
{
|
||||||
SkyScanner = skyScanner;
|
SkyScanner = skyScanner;
|
||||||
|
@ -83,8 +87,7 @@ namespace ln.skyscanner.crawl
|
||||||
{
|
{
|
||||||
stopping = false;
|
stopping = false;
|
||||||
|
|
||||||
if (_CrawlPool == null)
|
dbCrawlPool = new ODB<CrawlPool>(PoolPath);
|
||||||
_CrawlPool = new DiskObject<CrawlPool>(String.Format("{0}/pool", BasePath));
|
|
||||||
|
|
||||||
if (crawlThreadPool == null)
|
if (crawlThreadPool == null)
|
||||||
crawlThreadPool = new Pool(128);
|
crawlThreadPool = new Pool(128);
|
||||||
|
@ -126,7 +129,7 @@ namespace ln.skyscanner.crawl
|
||||||
|
|
||||||
crawlThreadPool.Close();
|
crawlThreadPool.Close();
|
||||||
|
|
||||||
_CrawlPool.Save();
|
Sync();
|
||||||
|
|
||||||
stopping = false;
|
stopping = false;
|
||||||
CrawlerState = ComponentState.STOPPED;
|
CrawlerState = ComponentState.STOPPED;
|
||||||
|
@ -139,10 +142,14 @@ namespace ln.skyscanner.crawl
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Sync()
|
public void Sync()
|
||||||
|
{
|
||||||
|
Sync(CrawlPool);
|
||||||
|
}
|
||||||
|
public void Sync(IPersistent persistent)
|
||||||
{
|
{
|
||||||
lock (CrawlPool)
|
lock (CrawlPool)
|
||||||
{
|
{
|
||||||
_CrawlPool.Save();
|
dbCrawlPool.SavePersistent(persistent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,7 +170,7 @@ namespace ln.skyscanner.crawl
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Subnet subnet = CrawlPool.GetSubnet(cidr);
|
CrawledSubnet subnet = CrawlPool.GetSubnet(cidr);
|
||||||
SubnetCrawl crawlSubnet = new SubnetCrawl(this, subnet);
|
SubnetCrawl crawlSubnet = new SubnetCrawl(this, subnet);
|
||||||
crawlThreadPool.Enqueue(crawlSubnet);
|
crawlThreadPool.Enqueue(crawlSubnet);
|
||||||
}
|
}
|
||||||
|
@ -179,13 +186,18 @@ namespace ln.skyscanner.crawl
|
||||||
{
|
{
|
||||||
foreach (CrawledHost crawledHost in CrawlPool.Hosts)
|
foreach (CrawledHost crawledHost in CrawlPool.Hosts)
|
||||||
{
|
{
|
||||||
if (crawledHost.NextCheck < DateTime.Now)
|
CrawledHost crawledHost2 = CrawlPool.HostForIP(crawledHost.PrimaryIP);
|
||||||
|
|
||||||
|
if (crawledHost != crawledHost2)
|
||||||
|
{
|
||||||
|
CrawlPool.RemoveHost(crawledHost);
|
||||||
|
} else if (crawledHost.NextCheck < DateTime.Now)
|
||||||
{
|
{
|
||||||
Crawl(crawledHost.PrimaryIP);
|
Crawl(crawledHost.PrimaryIP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Subnet subnet in CrawlPool.Subnets.ToArray())
|
foreach (CrawledSubnet subnet in CrawlPool.Subnets.ToArray())
|
||||||
{
|
{
|
||||||
if (subnet.NextScan < (DateTime.Now - TimeSpan.FromDays(1)) && subnet.Network.MaskWidth >= 24)
|
if (subnet.NextScan < (DateTime.Now - TimeSpan.FromDays(1)) && subnet.Network.MaskWidth >= 24)
|
||||||
{
|
{
|
||||||
|
|
|
@ -55,6 +55,8 @@ namespace ln.skyscanner.crawl
|
||||||
CrawledHost.LastCheckTime = DateTime.Now - dateTime;
|
CrawledHost.LastCheckTime = DateTime.Now - dateTime;
|
||||||
CrawledHost.LastCheck = dateTime;
|
CrawledHost.LastCheck = dateTime;
|
||||||
CrawledHost.NextCheck = dateTime + TimeSpan.FromHours(1);
|
CrawledHost.NextCheck = dateTime + TimeSpan.FromHours(1);
|
||||||
|
|
||||||
|
Crawler.Sync(CrawledHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
|
|
|
@ -15,18 +15,20 @@ using System.Net.NetworkInformation;
|
||||||
using ln.logging;
|
using ln.logging;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using ln.types.odb;
|
||||||
namespace ln.skyscanner.crawl
|
namespace ln.skyscanner.crawl
|
||||||
{
|
{
|
||||||
public class SubnetCrawl : PoolJob
|
public class SubnetCrawl : PoolJob, IPersistent
|
||||||
{
|
{
|
||||||
[JsonIgnoreAttribute]
|
[JsonIgnoreAttribute]
|
||||||
public Crawler Crawler { get; }
|
public Crawler Crawler { get; }
|
||||||
public Subnet Subnet { get; }
|
public CrawledSubnet Subnet { get; }
|
||||||
|
|
||||||
public CIDR Network { get; }
|
public CIDR Network { get; }
|
||||||
|
|
||||||
|
|
||||||
public SubnetCrawl(Crawler crawler, Subnet subnet)
|
|
||||||
|
public SubnetCrawl(Crawler crawler, CrawledSubnet subnet)
|
||||||
{
|
{
|
||||||
Crawler = crawler;
|
Crawler = crawler;
|
||||||
Subnet = subnet;
|
Subnet = subnet;
|
||||||
|
@ -34,7 +36,7 @@ namespace ln.skyscanner.crawl
|
||||||
|
|
||||||
Name = String.Format("Subnet crawl {0}", subnet.Network);
|
Name = String.Format("Subnet crawl {0}", subnet.Network);
|
||||||
}
|
}
|
||||||
public SubnetCrawl(Crawler crawler, Subnet subnet,CIDR network)
|
public SubnetCrawl(Crawler crawler, CrawledSubnet subnet,CIDR network)
|
||||||
{
|
{
|
||||||
Crawler = crawler;
|
Crawler = crawler;
|
||||||
Subnet = subnet;
|
Subnet = subnet;
|
||||||
|
@ -99,6 +101,9 @@ namespace ln.skyscanner.crawl
|
||||||
Subnet.LastScan = startTime;
|
Subnet.LastScan = startTime;
|
||||||
Subnet.NextScan = startTime + TimeSpan.FromHours(24);
|
Subnet.NextScan = startTime + TimeSpan.FromHours(24);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Crawler.Sync(Subnet);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
|
@ -116,5 +121,10 @@ namespace ln.skyscanner.crawl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Guid PersistenceID = Guid.NewGuid();
|
||||||
|
public Guid GetPersistenceID()
|
||||||
|
{
|
||||||
|
return PersistenceID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace ln.skyscanner.crawl.tests
|
||||||
{
|
{
|
||||||
if (!TestCurrentHints(crawledHost))
|
if (!TestCurrentHints(crawledHost))
|
||||||
{
|
{
|
||||||
|
return TestDefaults(crawledHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -228,11 +228,15 @@ namespace ln.skyscanner.crawl.tests
|
||||||
v2.CommunityString = crawledHost.GetHint<string>("snmp.community");
|
v2.CommunityString = crawledHost.GetHint<string>("snmp.community");
|
||||||
return v2;
|
return v2;
|
||||||
case 3:
|
case 3:
|
||||||
USMEndpoint endpoint = new USMEndpoint(SNMPEngine.DefaultEngine, new System.Net.IPEndPoint(snmpAddress, 161));
|
if (crawledHost.GetHint<string>("snmp.username", null) != null)
|
||||||
endpoint.AuthMethod = SnmpV3AuthMethod.SHA;
|
{
|
||||||
endpoint.Username = crawledHost.GetHint<string>("snmp.username");
|
USMEndpoint endpoint = new USMEndpoint(SNMPEngine.DefaultEngine, new System.Net.IPEndPoint(snmpAddress, 161));
|
||||||
endpoint.AuthKeyPhrase = crawledHost.GetHint<string>("snmp.authkey");
|
endpoint.AuthMethod = SnmpV3AuthMethod.SHA;
|
||||||
return endpoint;
|
endpoint.Username = crawledHost.GetHint<string>("snmp.username");
|
||||||
|
endpoint.AuthKeyPhrase = crawledHost.GetHint<string>("snmp.authkey");
|
||||||
|
return endpoint;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace ln.skyscanner.crawl.tests
|
||||||
string sshUser = crawledHost.GetHint<string>("ssh.login", null);
|
string sshUser = crawledHost.GetHint<string>("ssh.login", null);
|
||||||
string sshPassword = crawledHost.GetHint<string>("ssh.password", null);
|
string sshPassword = crawledHost.GetHint<string>("ssh.password", null);
|
||||||
|
|
||||||
if ((sshPort == -1) || !CanConnect(crawledHost,sshIP.Host.ToString(),sshPort,sshUser,sshPassword))
|
if ((sshPort == -1) || !CanConnect(crawledHost,sshIP.Host,sshPort,sshUser,sshPassword))
|
||||||
{
|
{
|
||||||
if (!Scan(crawledHost))
|
if (!Scan(crawledHost))
|
||||||
{
|
{
|
||||||
|
@ -64,7 +64,7 @@ namespace ln.skyscanner.crawl.tests
|
||||||
{
|
{
|
||||||
foreach (string password in defaultPasswords)
|
foreach (string password in defaultPasswords)
|
||||||
{
|
{
|
||||||
if (CanConnect(crawledHost, ip.Host.ToString(), port, "skytron", password))
|
if (CanConnect(crawledHost, ip.Host, port, "skytron", password))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,9 +72,9 @@ namespace ln.skyscanner.crawl.tests
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool CanConnect(CrawledHost crawledHost, String host, int port, string username, string password)
|
private static bool CanConnect(CrawledHost crawledHost, CIDR host, int port, string username, string password)
|
||||||
{
|
{
|
||||||
using (SshClient client = new SshClient(host, port, username, password))
|
using (SshClient client = new SshClient(host.ToString(), port, username, password))
|
||||||
{
|
{
|
||||||
client.ConnectionInfo.Timeout = TimeSpan.FromSeconds(1);
|
client.ConnectionInfo.Timeout = TimeSpan.FromSeconds(1);
|
||||||
try
|
try
|
||||||
|
@ -82,7 +82,7 @@ namespace ln.skyscanner.crawl.tests
|
||||||
client.Connect();
|
client.Connect();
|
||||||
|
|
||||||
crawledHost.SetHint("ssh.port", client.ConnectionInfo.Port);
|
crawledHost.SetHint("ssh.port", client.ConnectionInfo.Port);
|
||||||
crawledHost.SetHint("ssh.ip", client.ConnectionInfo.Host);
|
crawledHost.SetHint("ssh.ip", host);
|
||||||
crawledHost.SetHint("ssh.login", client.ConnectionInfo.Username);
|
crawledHost.SetHint("ssh.login", client.ConnectionInfo.Username);
|
||||||
crawledHost.SetHint("ssh.password", password);
|
crawledHost.SetHint("ssh.password", password);
|
||||||
crawledHost.SetHint("ssh.version", client.ConnectionInfo.ServerVersion);
|
crawledHost.SetHint("ssh.version", client.ConnectionInfo.ServerVersion);
|
||||||
|
@ -95,6 +95,7 @@ namespace ln.skyscanner.crawl.tests
|
||||||
}
|
}
|
||||||
catch (SocketException)
|
catch (SocketException)
|
||||||
{
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Security;
|
||||||
|
|
||||||
|
namespace ln.skyscanner.entities
|
||||||
|
{
|
||||||
|
public class GlobalNetwork
|
||||||
|
{
|
||||||
|
public IEnumerable<Subnet> Subnets => subnets;
|
||||||
|
public IEnumerable<Node> Nodes => nodes;
|
||||||
|
|
||||||
|
|
||||||
|
private List<Node> nodes = new List<Node>();
|
||||||
|
private List<Subnet> subnets = new List<Subnet>();
|
||||||
|
|
||||||
|
public GlobalNetwork()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
// /**
|
||||||
|
// * File: Router.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 ln.types;
|
||||||
|
using ln.skyscanner.crawl;
|
||||||
|
namespace ln.skyscanner.entities
|
||||||
|
{
|
||||||
|
public class NetworkInterface
|
||||||
|
{
|
||||||
|
public Node Node { get; private set; } = null;
|
||||||
|
public string Name { get; private set; } = "";
|
||||||
|
|
||||||
|
public CIDR[] IPs { get; set; } = new CIDR[0];
|
||||||
|
|
||||||
|
private NetworkInterface()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public NetworkInterface(Node node)
|
||||||
|
{
|
||||||
|
Node = node;
|
||||||
|
}
|
||||||
|
public NetworkInterface(Node node,String name)
|
||||||
|
{
|
||||||
|
Node = node;
|
||||||
|
Name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return Node.GetHashCode() ^ Name.GetHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
if (obj is NetworkInterface)
|
||||||
|
{
|
||||||
|
NetworkInterface networkInterface = obj as NetworkInterface;
|
||||||
|
return Node.Equals(networkInterface.Node) && Name.Equals(networkInterface.Name);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -10,27 +10,53 @@
|
||||||
using System;
|
using System;
|
||||||
using ln.types;
|
using ln.types;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
namespace ln.skyscanner.entities
|
namespace ln.skyscanner.entities
|
||||||
{
|
{
|
||||||
public class Node
|
public class Node
|
||||||
{
|
{
|
||||||
public CIDR PrimaryIP;
|
public GlobalNetwork GlobalNetwork { get; private set; }
|
||||||
public String Name;
|
|
||||||
|
|
||||||
public List<NetworkInterface> NetworkInterfaces = new List<NetworkInterface>();
|
public CIDR PrimaryIP { get; set; }
|
||||||
|
public String PrimaryMac { get; set; }
|
||||||
|
public String Name { get; set; }
|
||||||
|
|
||||||
public DateTime FirstSeen;
|
public DateTime Created { get; }
|
||||||
public DateTime LastSeen;
|
public Uri[] URIs => uris.ToArray();
|
||||||
|
|
||||||
public Node()
|
|
||||||
|
private HashSet<Uri> uris = new HashSet<Uri>();
|
||||||
|
|
||||||
|
private Node()
|
||||||
{
|
{
|
||||||
FirstSeen = DateTime.Now;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Node(CIDR primaryIP)
|
public Node(GlobalNetwork globalNetwork, CIDR primaryIP)
|
||||||
{
|
{
|
||||||
|
GlobalNetwork = globalNetwork;
|
||||||
|
|
||||||
PrimaryIP = primaryIP;
|
PrimaryIP = primaryIP;
|
||||||
FirstSeen = DateTime.Now;
|
Name = PrimaryIP.ToString();
|
||||||
|
Created = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveURI(Uri uri)
|
||||||
|
{
|
||||||
|
foreach (Uri u in uris)
|
||||||
|
{
|
||||||
|
if (uri.Equals(u))
|
||||||
|
uris.Remove(u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddURI(Uri uri)
|
||||||
|
{
|
||||||
|
uris.Add(uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<Uri> FindURIs(string scheme)
|
||||||
|
{
|
||||||
|
return uris.Where((u) => scheme.Equals(u.Scheme));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
// /**
|
|
||||||
// * File: Router.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 ln.types;
|
|
||||||
namespace ln.skyscanner.entities
|
|
||||||
{
|
|
||||||
public class NetworkInterface
|
|
||||||
{
|
|
||||||
public Node Node;
|
|
||||||
public string Name;
|
|
||||||
public List<CIDR> IPs = new List<CIDR>();
|
|
||||||
|
|
||||||
public NetworkInterface()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
public NetworkInterface(Node node)
|
|
||||||
{
|
|
||||||
Node = node;
|
|
||||||
}
|
|
||||||
public NetworkInterface(Node node,String name)
|
|
||||||
{
|
|
||||||
Node = node;
|
|
||||||
Name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -9,10 +9,15 @@
|
||||||
// **/
|
// **/
|
||||||
using System;
|
using System;
|
||||||
using ln.types;
|
using ln.types;
|
||||||
|
using ln.types.odb;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
namespace ln.skyscanner.entities
|
namespace ln.skyscanner.entities
|
||||||
{
|
{
|
||||||
public class Subnet
|
public class Subnet : Persistent
|
||||||
{
|
{
|
||||||
|
public GlobalNetwork GlobalNetwork { get; private set; }
|
||||||
|
|
||||||
public readonly CIDR Network;
|
public readonly CIDR Network;
|
||||||
public String Name;
|
public String Name;
|
||||||
|
|
||||||
|
@ -21,18 +26,32 @@ namespace ln.skyscanner.entities
|
||||||
public DateTime LastScan;
|
public DateTime LastScan;
|
||||||
public DateTime NextScan;
|
public DateTime NextScan;
|
||||||
|
|
||||||
public Subnet()
|
public NetworkInterface[] AttachedInterfaces => networkInterfaces.ToArray();
|
||||||
|
|
||||||
|
private HashSet<NetworkInterface> networkInterfaces = new HashSet<NetworkInterface>();
|
||||||
|
|
||||||
|
private Subnet()
|
||||||
{
|
{
|
||||||
FirstSeen = DateTime.Now;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Subnet(CIDR cidr)
|
public Subnet(GlobalNetwork globalNetwork,CIDR cidr)
|
||||||
{
|
{
|
||||||
|
GlobalNetwork = globalNetwork;
|
||||||
Network = cidr;
|
Network = cidr;
|
||||||
Name = Network.ToString();
|
Name = Network.ToString();
|
||||||
FirstSeen = DateTime.Now;
|
FirstSeen = DateTime.Now;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AttachInterface(NetworkInterface networkInterface)
|
||||||
|
{
|
||||||
|
networkInterfaces.Add(networkInterface);
|
||||||
|
}
|
||||||
|
public void DetachInterface(NetworkInterface networkInterface)
|
||||||
|
{
|
||||||
|
networkInterfaces.Remove(networkInterface);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return Network.ToString();
|
return Network.ToString();
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace ln.skyscanner.http
|
||||||
}
|
}
|
||||||
|
|
||||||
[Callable]
|
[Callable]
|
||||||
public Subnet[] GetSubnets()
|
public CrawledSubnet[] GetSubnets()
|
||||||
{
|
{
|
||||||
return SkyScanner.Crawler?.CrawlPool.Subnets.ToArray();
|
return SkyScanner.Crawler?.CrawlPool.Subnets.ToArray();
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
<Compile Include="crawl\Crawler.cs" />
|
<Compile Include="crawl\Crawler.cs" />
|
||||||
<Compile Include="crawl\CrawledHost.cs" />
|
<Compile Include="crawl\CrawledHost.cs" />
|
||||||
<Compile Include="entities\Subnet.cs" />
|
<Compile Include="entities\Subnet.cs" />
|
||||||
<Compile Include="entities\Router.cs" />
|
<Compile Include="entities\NetworkInterface.cs" />
|
||||||
<Compile Include="Check.cs" />
|
<Compile Include="Check.cs" />
|
||||||
<Compile Include="check\Hostalive.cs" />
|
<Compile Include="check\Hostalive.cs" />
|
||||||
<Compile Include="SkyScanner.cs" />
|
<Compile Include="SkyScanner.cs" />
|
||||||
|
@ -66,6 +66,8 @@
|
||||||
<Compile Include="crawl\tests\SNMP.cs" />
|
<Compile Include="crawl\tests\SNMP.cs" />
|
||||||
<Compile Include="crawl\tests\ICMP.cs" />
|
<Compile Include="crawl\tests\ICMP.cs" />
|
||||||
<Compile Include="crawl\tests\RFC1213.cs" />
|
<Compile Include="crawl\tests\RFC1213.cs" />
|
||||||
|
<Compile Include="entities\GlobalNetwork.cs" />
|
||||||
|
<Compile Include="crawl\CrawledSubnet.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
|
|
|
@ -117,8 +117,8 @@
|
||||||
{ title: "Zuletzt gesehen", data: "LastSeen", sorter: "", width: 180, formatter: "datetime", formatterParams: { inputFormat: "", outputFormat: "DD.MM.YYYY hh:mm:ss", invalidPlaceHolder: "-" } },
|
{ title: "Zuletzt gesehen", data: "LastSeen", sorter: "", width: 180, formatter: "datetime", formatterParams: { inputFormat: "", outputFormat: "DD.MM.YYYY hh:mm:ss", invalidPlaceHolder: "-" } },
|
||||||
{ title: "Letzter Scan", data: "LastCheck", sorter: "", width: 180, formatter: "datetime", formatterParams: { inputFormat: "", outputFormat: "DD.MM.YYYY hh:mm:ss", invalidPlaceHolder: "-" } },
|
{ title: "Letzter Scan", data: "LastCheck", sorter: "", width: 180, formatter: "datetime", formatterParams: { inputFormat: "", outputFormat: "DD.MM.YYYY hh:mm:ss", invalidPlaceHolder: "-" } },
|
||||||
{ title: "Nächster Scan",data: "NextCheck",sorter: "",width: 180,formatter: "datetime",formatterParams: {inputFormat: "",outputFormat: "DD.MM.YYYY hh:mm:ss",invalidPlaceHolder: "-"} },
|
{ title: "Nächster Scan",data: "NextCheck",sorter: "",width: 180,formatter: "datetime",formatterParams: {inputFormat: "",outputFormat: "DD.MM.YYYY hh:mm:ss",invalidPlaceHolder: "-"} },
|
||||||
{ title: "SNMP", data: "SSHDetected", width: 90 },
|
{ title: "SSH", data: "SSHDetected", width: 90 },
|
||||||
{ title: "SSH", data: "SnmpDetected", width: 90 },
|
{ title: "SNMP", data: "SnmpDetected", width: 90 },
|
||||||
{ title: "RFC1213", data: "RFC1213Detected", width: 90 }
|
{ title: "RFC1213", data: "RFC1213Detected", width: 90 }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue