Comment puis-je avoir un socket accepter uniquement les connexions à partir de l'hôte local (en Java)?

J'ai une application java (pas en cours d'exécution dans une application conteneur) qui écoute sur un ServerSocket pour les connexions. J'aimerais que ce n'accepter que les connexions qui viennent de localhost. Actuellement, après une connexion est acceptée, il vérifie les pairs IP et la rejette si elle n'est pas l'adresse de bouclage, mais je sais que les adresses IP peuvent être falsifiés. Donc, si possible, je préfère le lier à un socket qui n'écoute que sur l'interface de bouclage; est-ce possible?

J'ai essayé plusieurs choses différentes (telles que la spécification de "127.0.0.1", comme l'adresse locale lors de l'appel de bind()) avec pas de chance. Merci à l'avance.


Merci à vous tous pour votre aide. Je suis gêné d'admettre que tout cela était de ma faute. Notre application est à l'écoute sur deux ports différents, et je les liait l'un à l'interface de bouclage, mais l'essai contre l'autre. Quand j'ai effectivement essayer de telnet sur le port correct, tout fonctionne très bien (c'est à dire, les contraignant à "127.0.0.1" fait exactement ce qu'il est censé le faire).

Comme pour l'usurpation de l'adresse de bouclage, les gars, vous êtes de droite. Je ne devrais pas avoir fait ce qu'il sonne comme la principale préoccupation. Vraiment, le comportement désiré est de prendre seulement les connexions locales, et de la liaison à seulement l'interface locale est un moyen plus direct de la réalisation que d'accepter toutes les connexions et la fermeture de la non-locales.

Où avez-vous obtenu les informations que 127.0.0.1 peut être usurpée? Je suis sceptique.

OriginalL'auteur | 2008-09-19