// /** // * 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 ICMP() :base("ping") {} public override bool Check(Crawl crawl) { using (Ping ping = new Ping()) { 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; } 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); } } }