Matt Ronge
Matt Ronge

Reputation: 381

How to create Java socket that is localhost only?

I have a Java server that opens up a socket using ServerSocket (using Thrift with it). This server has a client on the local machine in Obj-c that communicates with the Java server. Everything happens on localhost. Right now the java server is visible on the network as well, I would like the java server to only be accessible on localhost. Otherwise it is a potential security vulnerability and it freaks users out when their firewall warns them.

I tried creating the server socket using an InetSocketAddress('localhost', 9090) but that seems to have no effect. How can I limit this thing to localhost?

Upvotes: 38

Views: 90014

Answers (4)

Tute
Tute

Reputation: 7013

Taken from another question:

new ServerSocket(9090, 0, InetAddress.getByName(null));

InetAddress.getByName(null) points to the loopback address (127.0.0.1)

And here's the Javadoc where it says that

Upvotes: 45

Fabian Lange
Fabian Lange

Reputation: 1856

Let me chime in with an alternative solution which only accepts on loopback device. All the other "localhost" solutions will make Java pick an interface.

new ServerSocket(9090, 0, InetAddress.getLoopbackAddress());

This is available since Java 7, and does not even throw UnknownHostException

Upvotes: 30

user207421
user207421

Reputation: 310850

new ServerSocket(9090, 0, InetAddress.getByName(null));

Upvotes: 4

Geoff Reedy
Geoff Reedy

Reputation: 36011

Try

new ServerSocket(9090, 0, InetAddress.getByName("localhost"))

The last parameter to the constructor specifies which address to bind the listening socket to.

Upvotes: 22

Related Questions