Verbindungswünsche nur von bestimmten IPs akzeptieren

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo Leute,

mich würde interessieren ob es in Java möglich ist, eingehende Verbindungswünsche nur von bestimmten IPs zu akzeptieren. Also ich starte einen ServerSocket und warte auf eine eingehende Verbindung, die ich dann per ServerSocket.accept() aufbaue. Und meine Frage ist, ob ich an dieser Stelle irgendwie bestimmen kann, ob ich als Server die eingehende Verbindung akzeptieren will oder nicht? Oder anders ausgedrückt gibt es überhaupt eine Möglichkeit bevor der Server die Verbindung aufbaut nachzuschauen, wer diese Verbindung mit dem Server wünscht?

Gruß,

Steffen
 
G

Guest

Gast
DP hat gesagt.:
jou, host.getip oder so in der richtung
Hmmm, kannst du vielleicht etwas genauer sagen, was du mit host.getip meinst? Die Suche nach getIP() in der Java-API (Java 1.4) hat nichts ergeben... :?

Steffen
 

DP

Top Contributor
mit dem accept bekommt du einen socket zurück.

dann machst du socket.getInetAddress() und bekommst eine InetAddress zurück.

dann machst du inetaddress.getHostName() und hast die ip
 

Mag1c

Top Contributor
bzw.

String adr = inetaddress.getHostAddress();

oder

byte[] adr = inetaddress.getAddress();

Gruß
Mag1c
 
G

Guest

Gast
Also so weit war ich schon selbst :). Aber das Problem ist, dass ich durch accept() bereits eine Verbindung aufbaue, BEVOR ich weiss zu wem ich sie aufbaue. Und genau das wollte ich vermeiden. Oder verstehe ich die Methode accept() falsch?

Natürlich kann ich die Verbindung gleich wieder kappen, wenn mir die IP nicht passt, aber das würde zusätzlichen Traffic erzeugen und wäre keine elegante Lösung.

Steffen
 

thE_29

Top Contributor
Ähm, wenn ich das richtig verstehe, willst du eine Verbindung nur zu bestimmen IPs zulassen ( so ne Art IP Firewall)

Das Problem ist halt jenes, das du VORHER NIE weißt welche IP da kommt, selbst eine Firewall muss zuerst die connection aufbaun und guckt dann nach => aha IP blocken, weg damit....
 
S

stev.glasow

Gast
Dafür gibts nichts in der Standard-Lib, selbst in C geht das nicht so ausm steh greif.
Das bisschen Traffic kann man aber doch ruhig in kauf nehmen, oder?
 

Mag1c

Top Contributor
Hi,

nicht du sondern der Client baut die Verbindung auf indem er ein entsprechendes TCP-Paket schickt. D.h., du hast so oder so Traffic. Wenn du die Verbindung annimmst um sie gleich wieder zu schließen, gehen dann nochmal ein paar Pakete durch die Leitung. Wenn dir das wirklich zuviel ist, mußt du schon auf Kernel-Ebene das Paket rausfiltern (bei Linux mit iptables und DROP). Im Java selbst hast du keine andere Möglichkeit.

Gruß
Mag1c
 
G

Guest

Gast
thE_29 hat gesagt.:
Ähm, wenn ich das richtig verstehe, willst du eine Verbindung nur zu bestimmen IPs zulassen ( so ne Art IP Firewall)
Ja genau!

Danke für eure Antworten, das war wohl ein grundlegendes Verständnissproblem meinerseits. Werde die Variante mit dem Aufbauen und Kappen der Verbindung versuchen.

Gruß und nochmals danke, Steffen
 

Bleiglanz

Gesperrter Benutzer
musst du wohl so machen

bei Linux kannst du später noch eine DROP Zeile in der firewall.sh dazutun, dann tauchen die "gekappten" Verbindungen erst gar nicht mehr auf...(bedeutet aber "höheren" Administrationsaufwand)
 

Grizzly

Top Contributor
Kann es sein, dass Du vorher Delphi / Borland C++ mit VCL Bibliothek programmiert hast. Da gibt es nämlich - sweoit ich mich noch erinnern kann - beim Aufbau ein entsprechendes Ereignis, in dem man auch den Verbindungsaufbau gleich abwehren kann.

Was bei Java auch ein bisschen naja ist: Man bekommt das ordentliche schliessen einer Verbindung nicht mit. Erst wenn das nächste Senden fehlschlägt, weiss man, dass die Verbindung ordentlich oder unsanft beendet wurde.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben