# Java Client-Server-Client Verbindung



## FabianK (3. Jun 2007)

Morgen,

Ich frage mich, ob es irgendwie möglich ist, die Verbindung zweier Clients zu einem Server(welcher Verbindungen annehmen kann,da die Ports zur Verfügung stehen) direkt miteinander "zu verschmelzen". 

ClientA baut zu Server Verbindung auf mittels des 3-Wege-Handshakes. Nachdem die Verbindung entstanden ist, hat der ClientA ja einen für die Lebensdauer dieser Connection gültigen Port "gemappt" (Ich hoffe ich habe hier ein richtiges Verständnis von NAT).
Client B baut analog eine Verbindung zum Server auf und hat nun auch einen "temporären" Port geöffnet.

Ist es möglich,dass der Server diese Verbindungen quasi direkt zusammenlegt? (Bildlich gesprochen die beiden "Kabel" aneinander lötet ) Mir ist zur Zeit nur die Möglichkeit bewusst, dass ich den Traffic durch den Server leiten lasse, was bei kleineren Daten (Befehlen, Nachrichten etc.) kein Problem ist, aber wenn etwas größeres verschickt wird, macht sich die Trafficdopplnung schon bemerkbar.

Um es evtl noch etwas zu konkretisieren: Ich suche quasi eine Möglichkeit, dass ein Client auf einer anderen Server-Client Verbindung "piggybackridet", sozusagenden zur Laufzeit erstellen Port nutz, um eine Verbindung zum anderen Client aufzubauen. 
Es soll mit dem Programm kein Sicherheitsschabernack angestellt werden, es geht mir nur darum, ob es irgendwie eine möglichkeit für soetwas gibt, (Und vor allem, lässt sich so ein Verbindungsaufbau auch mittels der Sperrung von outgoing ports unterbinden) denn es wurde die Notwendigkeit für Portmapping für den Dau wegfallen lassen.

ICh hoffe, es ist einigermaßen verständlich, was ich meine 

Wenn irgendjemand ne Idee hat, bin ich dankbar 

mfg,Fabian


----------



## Wildcard (3. Jun 2007)

UDP hole punching wäre eine Möglichkeit.
Wird hier sehr gut erklärt:
http://www.heise.de/security/artikel/82054/0


----------



## kleiner_held (3. Jun 2007)

Geht nicht.
Eine TCP Verbindung hat immer 2 fixe Endpunkte. Wenn du eine Verbindung zwischen A & B und eine zwischen B & C hast und du willst Pakete von A nach B senden, dann musst du entweder die Pakete auf Anwendungsebene durch B durchleiten oder eine neue Verbindung zwischen A & C öffnen.


----------



## Wildcard (3. Jun 2007)

kleiner_held hat gesagt.:
			
		

> Geht nicht.


Natürlich geht es nicht so wie sich das Fabian vorstellt, aber es geht wohl eigentlich darum den Server Traffic zu verringern, und dafür gibt es durchaus Techniken (wie die oben erwähnte).


----------



## kleiner_held (3. Jun 2007)

Krasse Sache, das UDP hole punching kannte ich noch nicht.
Bin grad am überlegen, ob man auf die Art eine echte TCP Verbindung hinbekommt, wahrscheinlich klappt der Handshake aber nicht.
Am Ende ist es aber halt schon richtig was ich sagte: Man muss eine neue Verbindung zwischen A & C öffnen, ob man dann die von dir genannte Technik nutzen kann, um die Sicherheitsrichtlinien eines Netzwerks auszutricksen, ist dann die nächste Frage.


----------



## Wildcard (3. Jun 2007)

Mit TCP dürfte es in jedem Fall schwieriger werden die Firewall zu durchbohren.


----------



## FabianK (3. Jun 2007)

Hm,danke 

Klingt nach einer richtig interessanten Geschichte. Glaube ich werde mich mal zu UDP in Java ein bisschen einlesen und mal etwas rumexperimentieren damit.

Danke für den link 

mfg,Fabian


----------



## kleiner_held (3. Jun 2007)

Grad beim Rumstöbern gefunden:
JStun
könnte eventuell nützlich sein.


----------



## Wildcard (3. Jun 2007)

Für Java gibt's aber auch wirklich jeden 'Mist' als OpenSource Lib  :lol:


----------



## kleiner_held (3. Jun 2007)

Wildcard hat gesagt.:
			
		

> Für Java gibt's aber auch wirklich jeden 'Mist' als OpenSource Lib  :lol:


Wenn du wüstest. Such mal auf Sourceforge nach "Hello World Java" :-D


----------

