71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
// /**
|
|
// * File: ICMP.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.Net.NetworkInformation;
|
|
using ln.skyscanner.crawl.service;
|
|
namespace ln.skyscanner.crawl.tests
|
|
{
|
|
public class ICMP : CrawlService
|
|
{
|
|
public Ping Ping { get; private set; } = new Ping();
|
|
|
|
public ICMP()
|
|
:base("ping")
|
|
{}
|
|
|
|
public override bool Check(Crawl crawl)
|
|
{
|
|
int nSuccess = 0;
|
|
long roundTripTime = 0;
|
|
|
|
for (int n = 0; n < 10; n++)
|
|
{
|
|
//HostCrawl.setState("ICMP check [{0}/10]", n);
|
|
|
|
PingReply pingReply = Ping.Send(crawl.Host.PrimaryIP, 500);
|
|
if (pingReply.Status == IPStatus.Success)
|
|
{
|
|
nSuccess++;
|
|
roundTripTime += pingReply.RoundtripTime;
|
|
}
|
|
else if ((n > 3) && (nSuccess == 0))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (nSuccess > 0)
|
|
{
|
|
roundTripTime /= nSuccess;
|
|
|
|
crawl.Host.SetHint("ping.success", true);
|
|
crawl.Host.SetHint("ping.rta", (int)roundTripTime);
|
|
crawl.Host.SetHint("ping.out_of_ten", nSuccess);
|
|
|
|
crawl.Host.LastSeen = DateTime.Now;
|
|
if (crawl.Host.FirstSeen < new DateTime(1970, 1, 2))
|
|
crawl.Host.FirstSeen = DateTime.Now;
|
|
}
|
|
else
|
|
{
|
|
crawl.Host.SetHint("ping.success", false);
|
|
crawl.Host.SetHint("ping.rta", null);
|
|
crawl.Host.SetHint("ping.out_of_ten", 0);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public override bool HostProvidesOption(Crawl crawl, params object[] parameters)
|
|
{
|
|
return crawl.Host.GetHint("ping.success", false);
|
|
}
|
|
}
|
|
}
|