diff --git a/rosjava/src/main/java/org/ros/address/InetAddressFactory.java b/rosjava/src/main/java/org/ros/address/InetAddressFactory.java
index 0d69a973f93d7018ec34ca5e9a77405fcd1323aa..6ba321bc91be0c381da190190fc97ac2f89fb6b7 100644
--- a/rosjava/src/main/java/org/ros/address/InetAddressFactory.java
+++ b/rosjava/src/main/java/org/ros/address/InetAddressFactory.java
@@ -25,6 +25,7 @@ import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.SocketException;
 import java.net.UnknownHostException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -63,8 +64,8 @@ public class InetAddressFactory {
     return inetAddresses;
   }
 
-  public static InetAddress newNonLoopback() {
-    for (InetAddress address : getAllInetAddresses()) {
+  private static InetAddress filterInetAddresses (Collection<InetAddress> inetAddresses) {
+    for (InetAddress address : inetAddresses) {
       // IPv4 only for now.
       if (!address.isLoopbackAddress() && isIpv4(address)) {
         return address;
@@ -73,7 +74,15 @@ public class InetAddressFactory {
     throw new RosRuntimeException("No non-loopback interface found.");
   }
 
-  private static Collection<InetAddress> getAllInetAddressByName(String host) {
+  public static InetAddress newNonLoopback() {
+    return filterInetAddresses(getAllInetAddresses());
+  }
+
+  public static InetAddress newNonLoopbackForNetworkInterface(NetworkInterface networkInterface) {
+    return filterInetAddresses(Collections.list(networkInterface.getInetAddresses()));
+  }
+
+  private static Collection<InetAddress> getAllInetAddressesByName(String host) {
     InetAddress[] allAddressesByName;
     try {
       allAddressesByName = org.xbill.DNS.Address.getAllByName(host);
@@ -117,7 +126,7 @@ public class InetAddressFactory {
     } catch (UnknownHostException e) {
       throw new RosRuntimeException(e);
     }
-    Collection<InetAddress> allAddressesByName = getAllInetAddressByName(host);
+    Collection<InetAddress> allAddressesByName = getAllInetAddressesByName(host);
     // First, try to find a non-loopback IPv4 address.
     for (InetAddress address : allAddressesByName) {
       if (!address.isLoopbackAddress() && isIpv4(address)) {