diff --git a/core-java-modules/core-java-networking-5/pom.xml b/core-java-modules/core-java-networking-5/pom.xml
index 5297bfb6bd22..f31aadd8b25e 100644
--- a/core-java-modules/core-java-networking-5/pom.xml
+++ b/core-java-modules/core-java-networking-5/pom.xml
@@ -62,6 +62,11 @@
jakarta.mail
${jakarta.mail.version}
+
+ commons-net
+ commons-net
+ 3.8.0
+
@@ -74,4 +79,4 @@
2.0.1
-
\ No newline at end of file
+
diff --git a/core-java-modules/core-java-networking-5/src/test/java/com/baeldung/ipaddresses/SubnetScannerUnitTest.java b/core-java-modules/core-java-networking-5/src/test/java/com/baeldung/ipaddresses/SubnetScannerUnitTest.java
new file mode 100644
index 000000000000..3256d65e73ad
--- /dev/null
+++ b/core-java-modules/core-java-networking-5/src/test/java/com/baeldung/ipaddresses/SubnetScannerUnitTest.java
@@ -0,0 +1,62 @@
+package com.baeldung.ipaddresses;
+
+import org.apache.commons.net.util.SubnetUtils;
+import org.junit.jupiter.api.Test;
+
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.IntStream;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+public class SubnetScannerUnitTest {
+ String subnet = "192.168.1.0";
+
+ @Test
+ public void givenSubnet_whenScanningForDevices_thenReturnConnectedIPs() throws Exception {
+ List connectedIPs = new ArrayList<>();
+
+ for (int i = 1; i <= 254; i++) {
+ String ip = subnet.substring(0, subnet.lastIndexOf('.')) + "." + i;
+ if (InetAddress.getByName(ip).isReachable(2000)) {
+ connectedIPs.add(ip);
+ }
+ }
+
+ assertFalse(connectedIPs.isEmpty());
+ }
+
+ @Test
+ public void givenSubnet_whenUsingStream_thenReturnConnectedIPs() {
+ List connectedIPs = IntStream.rangeClosed(1, 254)
+ .mapToObj(i -> subnet.substring(0, subnet.lastIndexOf('.')) + "." + i)
+ .filter(ip -> {
+ try {
+ return InetAddress.getByName(ip).isReachable(2000);
+ } catch (Exception e) {
+ return false;
+ }
+ })
+ .toList();
+
+ assertFalse(connectedIPs.isEmpty());
+ }
+
+ @Test
+ public void givenSubnet_whenUsingApacheCommonsNet_thenReturnConnectedIPs() {
+ SubnetUtils utils = new SubnetUtils("192.168.1.0/24");
+ List connectedIPs = Arrays.stream(utils.getInfo().getAllAddresses())
+ .filter(ip -> {
+ try {
+ return InetAddress.getByName(ip).isReachable(2000);
+ } catch (Exception e) {
+ return false;
+ }
+ })
+ .toList();
+
+ assertFalse(connectedIPs.isEmpty());
+ }
+}