diff options
Diffstat (limited to 'src/main/java/com/it_jaros/networkScanner/PortRange.java')
| -rw-r--r-- | src/main/java/com/it_jaros/networkScanner/PortRange.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/PortRange.java b/src/main/java/com/it_jaros/networkScanner/PortRange.java new file mode 100644 index 0000000..cdef5cf --- /dev/null +++ b/src/main/java/com/it_jaros/networkScanner/PortRange.java @@ -0,0 +1,67 @@ +package com.it_jaros.networkScanner; + +import java.util.BitSet; +import java.util.NoSuchElementException; + +public class PortRange { + + private static final int MIN_PORT = 1; + private static final int MAX_PORT = 65535; + private final BitSet portsRange = new BitSet(MAX_PORT); + private final BitSet available = new BitSet(MAX_PORT); + + private int cursor; + private int done = 0; + private int total = 0; + + public PortRange(String ports) { + if (ports == null || "".equals(ports)) { + // keep defaults + portsRange.set(1, 1024 + 1); + return; + } + + String[] splitComma = ports.split(","); + for (String commaValue: splitComma) { + if (commaValue.contains("-")) { + String[] splitRange = commaValue.split("-"); + if (splitRange.length > 2) { + throw new IllegalArgumentException(String.format("Argument contains too many '-'' %s", commaValue)); + } + + int start = Integer.parseInt(splitRange[0]); + int end = Integer.parseInt(splitRange[1]); + portsRange.set(start, end + 1); + } else { + portsRange.set(Integer.parseInt(commaValue)); + } + } + + available.or(portsRange); + cursor = available.nextSetBit(MIN_PORT); + } + + public synchronized int next() { + int p = available.nextSetBit(cursor); + if (p > 0) { + available.clear(p); + cursor = p + 1; + done++; + return p; + } + + throw new NoSuchElementException("Reached end of port range"); + } + + public synchronized boolean hasNext() { + return available.nextSetBit(cursor) > 0; + } + + public int getTotal() { + return portsRange.cardinality(); + } + + public int getDone() { + return done; + } +} |
