# Client zu Client Daten übertragen



## codingboy (13. Feb 2011)

Hallo,

ich würde mir gerne ein kleines Chatprogramm schreiben. Die Oberfläche ist ja kein Problem, eine verschlüsselte Übertragung habe ich auch schon realisiert.
Doch wie kann ich mir A) mit einem RECHNER verbinden und B) eine temporäre Datei auf dem jeweils anderen Rechner erstellen?
zu A:
das könnte bestimmt irgendwie über eine IP und einen Port gehen, doch wie bekomme ich diese heraus?

Danke für Antworten!

Gruß,
Daniel


----------



## despikyxd (13. Feb 2011)

ich möchte dir hier nur einen kurzen hinweis geben : versuch es erst garnicht eine dierekte client-to-client verbindung zu realisieren ...
denn in den meisten fällen werden die user dieses systems 1) fremde sein die 2) sicher keine ahnung von NAT und PortForwarding haben oder geschweige denn wie mans einrichtet und 3) gibt es bereits fertige frameworks die NAT-passthrough drauf haben ...

also einfach nach googlen und vorhanden frameworks nutzen
das alles selbst zu implementieren ... da braucht man alleine ewig oder ein kleines team mit spezialisten =P

second : was das mit den daten angeht : wenn du erstmal ne verbindung hast kannst du alles über diese realiseren ... musst nur ein entsprechendes protocol entwickeln


----------



## codingboy (13. Feb 2011)

Danke, ich habe hier noch was gefunden:
Kaffee & Kuchen - Datenbank-Anbindung mit JDBC
Da ist von Sockets die Rede?

Ist das so was, was ich suche?


----------



## despikyxd (13. Feb 2011)

ja ... genau die suchst du ...

Sockets sind grundlage jeder netzwerkverbindung

nur noch kleinen tipp am rande : versuch erstmal ne kommunikation über einen server ... gleich eine CTC entwickeln zu wollen wird dich zu schnell entmutigen weil du vieles nicht verstehen und auch nicht zum laufen kriegen wirst ...


----------



## codingboy (14. Feb 2011)

ja, das bedeutet für mich aber PHP.
ich hatte gehofft, es sei anders auch einfach machbar...
so muss ich mir "nur" ein php-skript scheiben, dass gesendete daten speichert, und eines, welches diese daten wieder löscht
das speicherskript muss mit binärdaten umgehen können!!!

ich seh schon, dass wird noch ein wenig arbeit...


----------



## Empire Phoenix (14. Feb 2011)

Warum serverseitig kein java programm statt dem php script?? Würde vieles einfacher amchen.


----------



## codingboy (14. Feb 2011)

gibt es denn einen weg das programm serverseitig laufen zu lassen, ohne einen vserver oder server zu haben? (also nur webspace mit viel skriptsprachenunterstützung --> bplaced)


----------



## despikyxd (14. Feb 2011)

kurze antwort : NEIN
weil du in der regel über keine auf dem webserver installierte sprache an die SYSTEM-calls kommst *zumindest bei jedem hoster mit ahnung der das zur sicherheit sperrt*

deinen mist mit ZWEI scripts ... ähm ... naja ... du kannst scheinbar auch kein php ... oder zumindest bist du dort genau so n00b wie in java ... du kannst alles in ein script packen ... receiven ... submitten ... storing ... deleting ... du musst nur entsprechende flags verwenden ...

aber das wird dir auch nichts bringen da das keine P2P verbindung ist ... und auch keine geroutete verbindung über einen server ... sondern schlichtes up- und downloading ... das kann man dann auch etwas vereinfachen ...

aber mal erlich : wenn du sowas wie einen chat schon auf java-basis machen willst kommst du um einen richtigen server *ja vserver geht auch* nich drum rum ...


----------



## kay73 (18. Feb 2011)

despikyxd hat gesagt.:


> ...gibt es bereits fertige frameworks die NAT-passthrough drauf haben ...


Würde mich auch interessieren. Hast Du eine Empfehlung (außer JSTUN)?


----------



## Kr0e (19. Feb 2011)

Mal kurz am Rande was zu despikyxd-Aussagen:

Es gibt UPNP, ein Protokol das, solang der Router dies unterstützt und auch aktiviert hat, Routereinstellungen von Rechnern im Lan aus realisieren kann. Pidgin, diverse Torrentprogramme und sogar ICQ haben das drauf. Es gibt dafür eine pure Java library.

Aber despikyxd hat im Prinzip Recht, Chatsystem ohne großen Server ist doof. Denk mal an das Speichern von Nachrichten, wenn User offline sind. Ich hatte mich mal vor einiger Zeit mit Verteilten Hashtabellen und Darknets beschäftigt. NAT macht sehr viele coole Möglichkeiten kaputt, aber NAT ist zwingend notwendig, sonst wäre jede Sicherheit dahin.

Meine Meinung dazu: Die Use sollten sich mal mehr mit ihrem Router beschätigen. Würde vieles leichter machen.... Und letztenedes auch den Usern bessere Software ermöglichen..

Gruß,

Chris


----------



## codingboy (19. Feb 2011)

Mit dem Server, finde ich, muss das nicht sein!
Ich bin gerade mal im 1. Semester Info, aber das Programm soll eigentlich nur eine sichere Verbindung zwischen mir und meiner Freundin darstellen. Sonstige Spielereien braucht es einfach nicht...

Achso, was ist NAT (Link)? und weshalb macht dies Sicherheit erst möglich?

Mein Programm arbeitet mit ner selbst gebastelten Verschlüsselung (One-Time-Pad) in Kombination mit Shamirs No-Key-Protokoll (nicht RSA!). Finde ich ziemlich sicher, selbst wenn die gesammten Daten abgefangen werden!


----------



## eLogic (19. Feb 2011)

Hab hier einen Link:
Kaffee & Kuchen - Datenbank-Anbindung mit JDBC

Kannste deine Verschlüsselungsmethode Posten??


Gruß eLogic


----------



## Kr0e (19. Feb 2011)

Nun, warum NAT Sicherheit bedeutet, siehst du am besten daran, dass es so sau schwer ist, eine direkte Verbindung zwischen 2 Rechnern aufzubauen, die jeweils hinter einem NAT sitzen. Raus gehen die Verbindungen immer, ergo Verbindungen zu Servern sind kein Problem, weder mit TCP noch mit UDP. Doch sobald du einen Rechner hinter einem NAT ansprechen willst, musst du Ports freigeben oder anfangen rumzubastelt udn das, was dabei rauskommt muss uach nicht überall klappen, da es dann kein STandard ist... Wenn du mit deinen Freunden sowas testen/benutzen willst, dann sollten die infach Ports freigeben und ihr hbat keine Hürden mehr! Happy coding 

PS: NAT steht für Network Address TRanslation. Dein Router z.B. ist eine NAT. Alle Rechner die über deinen Router ins Netz gehen haben die selbe Ipadresse im Internet aber unterschiedliche Ports. Die Ports sind eine Möglichkeit des Routers ankommende Pakete an den richtigen PC im LAN weiterzuleiten. Wenn im Router keine Portweiterleitungen eingerichtet sind, dann weiß der Router nicht wohin es gehen soll und macht die Schotten dicht. Wenn du von innen heraus eine Anfrage an iwas stellst (z.B. an eine Website) dann wird die Antwort des Servers vom Router anhand der IP-Adresse, Portnummer und ich glaube auch anhand von ACK/Seq-Nummern erkannt und an dich weitergeleitet. Wenn die Antwort zu lang braucht, sind die temporär offenen Ports wieder zu. Deshalb muss glaub ich bei TCP immer ein Keep_Alive Signal perdiodisch gesendet werden (Macht TCP von sich aus glaub ich). Kann sein, dass das nicht bei jedem Router nötig is. Vlt. vertuhe ich mich grad auch mit dem Keep_Alive Signal. 

Link: Network Address Translation ? Wikipedia


----------



## codingboy (21. Feb 2011)

eLogic hat gesagt.:


> Kannste deine Verschlüsselungsmethode Posten??
> 
> 
> Gruß eLogic



Verschlüsselung:
einfach ein XOR über einen key und die message, jeweils als byte behandelt und dann noch ein wenig abhängig vom key, die bits durcheinander gewürfelt.

Übertragung:
a und b wissen NICHTS voneinander, jeder kann jedoch mit dem verschlüsselungsprogramm und einem eigenen (zufälligen, möglichst langem key (2 KB)) verschlüsseln.
a verschlüsselt und schickt die datei an b, die wiederum verschlüsselt sie auch und schickt sie zurück an a. a entschlüsselt und schickt an b, b wiederum entschlüsselt und hat nun die original message.

Voraussetzung ist dafür, dass die verschlüsselung assoziativ ist (klammerung wurscht) und leicht invertierbar ist.


----------

