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()); + } +}