Ich habe eine Java-App (die nicht in einem Anwendungscontainer ausgeführt wird), die auf einem ServerSocket für Verbindungen abhört. Ich möchte nur Verbindungen akzeptieren, die von localhost kommen. Momentan, nachdem eine Verbindung akzeptiert wurde, überprüft sie die Peer-IP und weist sie zurück, wenn sie nicht die Loopback-Adresse ist, aber ich weiß, dass Peer-IP-Adressen gefälscht werden können. Also, wenn möglich, würde ich lieber an einen Socket binden, der nur auf der Loopback-Schnittstelle lauscht; Ist das möglich?Wie kann ich einen Socket akzeptieren Verbindungen nur vom lokalen Host (in Java)?
Ich habe ein paar verschiedene Dinge ausprobiert (wie zum Beispiel "127.0.0.1" als lokale Adresse beim Aufruf bind()) ohne Glück. Danke im Voraus.
Vielen Dank für Ihre Hilfe. Es ist mir peinlich zuzugeben, dass dies alles mein Fehler war. Unsere Anwendung hört zwei verschiedene Ports ab, und ich habe einen an die Loopback-Schnittstelle gebunden, aber gegen den anderen getestet. Wenn ich tatsächlich versuche, an den richtigen Port telnet, funktioniert alles einwandfrei (d. H. Bindung an "127.0.0.1" tut genau das, was es soll).
Wie zum Spoofing der Loopback-Adresse, haben Sie recht. Ich hätte es nicht wie die Hauptsorge klingen lassen sollen. Tatsächlich besteht das gewünschte Verhalten darin, nur lokale Verbindungen einzugehen, und eine Bindung an nur die lokale Schnittstelle ist eine direktere Möglichkeit, dies zu erreichen, als alle Verbindungen zu akzeptieren und dann nicht-lokale zu schließen.
Wo haben Sie die Information erhalten, dass 127.0.0.1 gefälscht werden kann? Ich bin skeptisch. –