From bb7e4331a92acc9c0267a744f3b8dd7ff1e5dea8 Mon Sep 17 00:00:00 2001 From: Matthias Jaros Date: Mon, 16 Feb 2026 17:07:46 +0100 Subject: Added PortRange class that generates ports to scan --- .../com/it_jaros/networkScanner/PortRange.java | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/main/java/com/it_jaros/networkScanner/PortRange.java (limited to 'src/main/java/com/it_jaros/networkScanner/PortRange.java') 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; + } +} -- cgit v1.3.1