У меня есть Java-приложение (не работает ни в одном контейнере приложения), которое прослушивает ServerSocket для соединений. Я хотел бы, чтобы он принимал только соединения, которые приходят с localhost. В настоящее время после того, как соединение принято, оно проверяет IP-адрес однорангового узла и отклоняет его, если это не адрес обратной связи, но я знаю, что IP-адреса однорангового узла можно подделать. Поэтому, если возможно, я бы предпочел привязать сокет, который прослушивает только петлевой интерфейс; это возможно?
Я пробовал несколько разных вещей (например, указание "127.0.0.1" в качестве локального адреса при вызове bind ()), но безуспешно. Заранее спасибо.
Спасибо всем за помощь. Мне стыдно признаться, что это была моя ошибка. Наше приложение прослушивает два разных порта, и я привязывал один к интерфейсу обратной связи, но проверял другой. Когда я на самом деле пытаюсь подключиться к правильному порту через telnet, все работает нормально (то есть привязка к «127.0.0.1» делает именно то, что и должна).
Что касается подмены адреса обратной связи, вы правы. Я не должен был сделать это звучит как основная проблема. На самом деле, желаемое поведение - использовать только локальные соединения, а привязка только к локальному интерфейсу является более прямым способом достижения этого, чем принятие всех соединений и последующее закрытие нелокальных соединений.