我有一个Java服务器,它使用ServerSocket打开一个套接字(使用Thrift)。该服务器在Obj-c中的本地机器上有一个客户端,它与Java服务器通信。一切都发生在localhost上。现在java服务器在网络上也是可见的,我希望java服务器只能在localhost上访问。否则,这是一个潜在的安全漏洞,当防火墙警告用户时,它会吓跑用户。
我尝试使用InetSocketAddress('localhost',9090)创建服务器套接字,但这似乎没有任何效果。我怎样才能将这个东西限制在localhost?
答案 0 :(得分:40)
new ServerSocket(9090, 0, InetAddress.getByName(null));
InetAddress.getByName(null)
指向环回地址(127.0.0.1)
和here's Javadoc所说的那样
答案 1 :(得分:21)
尝试
new ServerSocket(9090, 0, InetAddress.getByName("localhost"))
构造函数的最后一个参数指定将侦听套接字绑定到哪个地址。
答案 2 :(得分:18)
让我使用另一种只接受环回设备的解决方案。所有其他“localhost”解决方案将使Java选择一个接口。
new ServerSocket(9090, 0, InetAddress.getLoopbackAddress());
这是从Java 7开始提供的,甚至不会抛出UnknownHostException
答案 3 :(得分:3)
new ServerSocket(9090, 0, InetAddress.getByName(null));