diff options
| author | 2026-02-16 17:07:46 +0100 | |
|---|---|---|
| committer | 2026-07-09 09:59:28 +0200 | |
| commit | bb7e4331a92acc9c0267a744f3b8dd7ff1e5dea8 (patch) | |
| tree | a12c6422bc8db1fa91627eab33e0516bccbb2cc4 /src/main/java/com/it_jaros/networkScanner/PortRange.java | |
| parent | 881c9c0ef8f2817aab4bed4aac6696fe5cafc593 (diff) | |
Added PortRange class that generates ports to scan
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; + } +} |
