adelbertc
adelbertc

Reputation: 7320

Trying to get InetAddress.getLocalHost.getHostAddress (Java/Scala) to return external IP

So I'm having a problem with using InetAddress.getLocalHost.getHostAddress to get the external IP address of a given machine.

I'm actually doing this in Scala in a sense - the configuration file for Akka Remote Actors default uses InetAddress.getLocalHost.getHostAddress to get the IP address of the machine, which is what I want since I will be deploying the actors on several machines. However, it seems to be returning 127.0.0.1 instead of the external IP address I want (since the remote actors need to communicate back and forth across the netwrok).

The problem is that I can't use any of the methods I've found on Google to circumvent this since they all seem to involve adjusting the code itself, whereas here I don't really have any code to adjust, the DSL just automatically uses InetAddress.getLocalHost.getHostAddress.

I've read on a few threads from a Google search that you can circumvent this by editing your host file or something? How do I do this?

Thanks! -kstruct

Upvotes: 4

Views: 3005

Answers (3)

Andrea Bisello
Andrea Bisello

Reputation: 1225

i got a partial solution if getLocalHost doesn't works. this solution have the problem that you must to know the name of your network interface in order to match the real one. Maybe you can improve this code removing "virtual" devices and something else.

This is scala code, but java code is very similar

  def returnInterfaceAddress() : InetAddress = {
    var myInetAddress = InetAddress.getLocalHost
    val interfaces : util.Enumeration[NetworkInterface] = NetworkInterface.getNetworkInterfaces()
    while(interfaces.hasMoreElements){
      val inter = interfaces.nextElement()
      if(inter.getDisplayName() == "Realtek PCIe GBE Family Controller"){
        myInetAddress = inter.getInetAddresses().nextElement()
      }
    }
    myInetAddress
  }

Upvotes: 0

user207421
user207421

Reputation: 310893

Check your /etc/hosts file. It should map 'localhost' to 127.0.0.1 and your real hostname to your real IP address, or one of them :-| Some Linux distributions get this wrong apparently.

Upvotes: 2

Alexander Pogrebnyak
Alexander Pogrebnyak

Reputation: 45576

You may want to use NetworkInterface class.

In particular, use static getNetworkInterfaces method to enumerate all available network interfaces.

Upvotes: 4

Related Questions