Как создать сокет Java только для localhost? - PullRequest
31 голосов
/ 05 февраля 2010

У меня есть сервер Java, который открывает сокет, используя ServerSocket (используя Thrift с ним). У этого сервера есть клиент на локальном компьютере в Obj-c, который связывается с сервером Java. Все происходит на локальном хосте. Прямо сейчас java-сервер также виден в сети, я бы хотел, чтобы java-сервер был доступен только на localhost. В противном случае это потенциальная уязвимость системы безопасности, которая пугает пользователей, когда их брандмауэр предупреждает их.

Я попытался создать серверный сокет, используя InetSocketAddress ('localhost', 9090), но, похоже, это не дает никакого эффекта. Как я могу ограничить эту вещь для localhost?

Ответы [ 4 ]

40 голосов
/ 08 июня 2010

Взято из другого вопроса:

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

InetAddress.getByName(null) указывает на адрес обратной связи (127.0.0.1)

И здесь Javadoc, где говорится, что

21 голосов
/ 05 февраля 2010

Попробуйте

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

Последний параметр конструктора указывает, к какому адресу привязывать прослушивающий сокет.

20 голосов
/ 06 августа 2015

Позвольте мне присоединиться к альтернативному решению, которое принимает только на устройстве обратной связи.Все другие решения "localhost" заставят Java выбрать интерфейс.

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

Это доступно с Java 7 и даже не выдает UnknownHostException

3 голосов
/ 15 февраля 2010
new ServerSocket(9090, 0, InetAddress.getByName(null));
...