From ff88ded1fe26945ad254ee9604b659f580fe5fb2 Mon Sep 17 00:00:00 2001 From: Anton Keks Date: Sun, 26 Aug 2018 16:55:35 +0300 Subject: [PATCH] increase number of udp packets in combined pinger and display total number of packets for dead hosts in PacketLossFetcher --- .../core/net/CombinedUnprivilegedPinger.java | 12 ++++++------ src/net/azib/ipscan/core/net/PingResult.java | 17 +++++++++++------ .../azib/ipscan/fetchers/PacketLossFetcher.java | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/net/azib/ipscan/core/net/CombinedUnprivilegedPinger.java b/src/net/azib/ipscan/core/net/CombinedUnprivilegedPinger.java index 15731dd9..00efeaa5 100644 --- a/src/net/azib/ipscan/core/net/CombinedUnprivilegedPinger.java +++ b/src/net/azib/ipscan/core/net/CombinedUnprivilegedPinger.java @@ -30,12 +30,12 @@ public class CombinedUnprivilegedPinger implements Pinger { public PingResult ping(ScanningSubject subject, int count) throws IOException { // try UDP first - it should be more reliable in general - PingResult result = udpPinger.ping(subject, max(1, count / 2)); - if (!result.isAlive()) { - // fallback to TCP - it may detect some hosts UDP cannot - result = tcpPinger.ping(subject, count); - } - return result; + PingResult udpResult = udpPinger.ping(subject, max(1, (int)Math.ceil(count / 1.5))); + if (udpResult.isAlive()) return udpResult; + + // fallback to TCP - it may detect some hosts UDP cannot + PingResult tcpResult = tcpPinger.ping(subject, count); + return tcpResult.merge(udpResult); } public void close() throws IOException { diff --git a/src/net/azib/ipscan/core/net/PingResult.java b/src/net/azib/ipscan/core/net/PingResult.java index 24fa2b91..99b44cf4 100644 --- a/src/net/azib/ipscan/core/net/PingResult.java +++ b/src/net/azib/ipscan/core/net/PingResult.java @@ -53,19 +53,18 @@ public class PingResult { } public int getPacketLoss() { - return (int)(packetCount - replyCount); + return packetCount - replyCount; } public int getPacketLossPercent() { - if(this.replyCount>0){ - return (int) ((this.getPacketLoss() * 100) / packetCount); - }else{ + if (replyCount > 0) + return (this.getPacketLoss() * 100) / packetCount; + else return 100; - } } public int getPacketCount() { - return (int)(packetCount); + return packetCount; } public int getReplyCount() { @@ -87,4 +86,10 @@ public class PingResult { public boolean isTimeoutAdaptationAllowed() { return timeoutAdaptationAllowed; } + + PingResult merge(PingResult result) { + this.packetCount += result.packetCount; + this.replyCount += result.replyCount; + return this; + } } diff --git a/src/net/azib/ipscan/fetchers/PacketLossFetcher.java b/src/net/azib/ipscan/fetchers/PacketLossFetcher.java index c8d23a62..f94d4f59 100644 --- a/src/net/azib/ipscan/fetchers/PacketLossFetcher.java +++ b/src/net/azib/ipscan/fetchers/PacketLossFetcher.java @@ -30,6 +30,6 @@ public class PacketLossFetcher extends PingFetcher { PingResult result = executePing(subject); subject.setResultType(result.isAlive() ? ALIVE : DEAD); - return result.getPacketLoss() + "/" + result.getPacketCount() + " ("+ result.getPacketLossPercent() + "%)"; + return result.getPacketLoss() + "/" + result.getPacketCount() + " (" + result.getPacketLossPercent() + "%)"; } } \ No newline at end of file