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