# Verbindungswünsche nur von bestimmten IPs akzeptieren



## Guest (19. Okt 2005)

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


----------



## DP (19. Okt 2005)

jou, host.getip oder so in der richtung


----------



## Guest (20. Okt 2005)

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 (20. Okt 2005)

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 (20. Okt 2005)

bzw.

String adr = inetaddress.getHostAddress();

oder

byte[] adr = inetaddress.getAddress();

Gruß
Mag1c


----------



## DP (20. Okt 2005)

sorry, stimmt. 

getHostAddress() und nicht getHostName()


----------



## Guest (20. Okt 2005)

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 (20. Okt 2005)

Ä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....


----------



## stev.glasow (20. Okt 2005)

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 (20. Okt 2005)

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


----------



## Guest (20. Okt 2005)

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 (21. Okt 2005)

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 (22. Okt 2005)

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.


----------

