Ответ 1
new ServerSocket(9090, 0, InetAddress.getByName(null));
InetAddress.getByName(null)
указывает на адрес loopback (127.0.0.1)
И здесь Javadoc, где говорится, что
У меня есть Java-сервер, который открывает сокет, используя ServerSocket (используя Thrift с ним). На этом сервере есть клиент на локальном компьютере в Obj-c, который взаимодействует с сервером Java. Все происходит на локальном хосте. Сейчас java-сервер также виден в сети, я хотел бы, чтобы java-сервер был доступен только на локальном хосте. В противном случае это потенциальная уязвимость в системе безопасности, и это выводит пользователей из сети, когда их брандмауэр предупреждает их.
Я попытался создать сокет сервера, используя InetSocketAddress ('localhost', 9090), но это, кажется, не имеет никакого эффекта. Как я могу ограничить эту вещь на localhost?
new ServerSocket(9090, 0, InetAddress.getByName(null));
InetAddress.getByName(null)
указывает на адрес loopback (127.0.0.1)
И здесь Javadoc, где говорится, что
Try
new ServerSocket(9090, 0, InetAddress.getByName("localhost"))
Последний параметр для конструктора указывает, к какому адресу следует привязать прослушивающий сокет.
Позвольте мне перекликаться с альтернативным решением, которое принимает только на loopback-устройстве. Все остальные решения "localhost" позволят Java выбрать интерфейс.
new ServerSocket(9090, 0, InetAddress.getLoopbackAddress());
Это доступно с Java 7 и даже не бросает UnknownHostException
new ServerSocket(9090, 0, InetAddress.getByName(null));