Seite 1 von 3
UDP/TCP hole punching (Router Firewall legal löchern)
Verfasst: 07.04.2009 15:08
von Joel
Habe sowas in Erinnerung, das es möglich ist/war, eine Peer to Peer Verbindung mit einem anderen PC herzustellen, selbst wenn beide PCs hinter einem Router sitzt.
Ich weiß jetzt nicht, ob das eine Router Bug Meldung war (die ich damals in der PC-Welt gelesen habe) oder ob das immer noch funktioniert. Die Möglichkeit wäre aber für mein Programm sehr hilfreich.
So ähnlich funktioniert das: PC 1 (hinter Router) stellt eine Verbindung zu PC 2 (hinter Router) her. Der Router 1 hat nun ein Loch in der Firewall und der 2. PC kann nun eine Verbindung zu PC 1 (durch die Firewall herstellen) weil Router 1 die IP-Adresse von PC 2 auf der Weißen-Liste hat.
(Kein Router hat im NAT einen Port offen)
Wenn ich das jetzt Richtig beschrieben habe, würde ich gerne wissen, ob das wirklich funktioniert und wie man das realisiert.
Verfasst: 07.04.2009 15:41
von DarkDragon
Naja das NAT-Punching geht ungefähr so (Alles UDP Transfer):
Endpoint 1 schickt Dummypaket an Endpoint 2.
Nun weiß die NAT-Box von Endpoint 1, dass Nachrichten diesen Quellports an diesen Endpoint zurückkommen.
Endpoint 2 schickt Dummypaket an Endpoint 1.
Nun weiß die NAT-Box von Endpoint 2, dass Nachrichten diesen Quellports an diesen Endpoint zurückkommen.
Nun ist keine Blockade mehr vorhanden, es sei denn es ist etwas anderes als eine NAT-Box.
Nur weiß ich nicht wie man bei Paketen den Quellport bestimmt ohne die Pakete selbst zu basteln (Also mit UDP Header).
UDP Header:
2Byte Quellport
2Byte Zielport
2Byte Länge
2Byte Prüfsumme
Daten...
Natürlich auf die Netzwerk Bytereihenfolge achten.
Verfasst: 07.04.2009 15:46
von Joel
Kann ich dafür OpenNetworkConnection() Verwenden?
Wenn ich eine Verbindung mit dem UDP Parameter per OpenNetworkConnection() herstelle, dann gibt es ja nie 0 zurück, wie weiß ich jetzt, ob die Verbindung hergestellt werden konnte (also UDP hole punching positiv war) und wann nicht?
Verfasst: 07.04.2009 15:50
von DarkDragon
Joel hat geschrieben:Kann ich dafür OpenNetworkConnection() Verwenden?
Wenn ich eine Verbindung mit dem UDP Parameter per OpenNetworkConnection() herstelle, dann gibt es ja nie 0 zurück, wie weiß ich jetzt, ob die Verbindung hergestellt werden konnte (also UDP hole punching positiv war) und wann nicht?
Das kannst du nach nem Three-Way-Handshaking feststellen. Mit OpenNetworkConnection setzt du aber nicht den Quellport fest.
Verfasst: 07.04.2009 16:27
von Joel
Muss ich dann die Daten per UDP senden oder kann ich nach/in dieser Attacke dann irgentwie auf TCP umsteigen?
Verfasst: 07.04.2009 16:51
von DarkDragon
Joel hat geschrieben:Muss ich dann die Daten per UDP senden oder kann ich nach/in dieser Attacke dann irgentwie auf TCP umsteigen?
Nein das geht nicht.
Verfasst: 07.04.2009 17:46
von Joel
Ok also das heißt enweder:
1. TCP und Port Forwarding
2. UDP ohne Portforwarding
Verfasst: 07.04.2009 17:48
von DarkDragon
Joel hat geschrieben:Ok also das heißt enweder:
1. TCP und Port Forwarding
2. UDP ohne Portforwarding
3. UDP mit Portforwarding
4. Softwaregesteuertes Portforwarding (UPnP) - geht allerdings nicht mit jeder NAT-Box.
Verfasst: 07.04.2009 18:32
von Joel
DarkDragon hat geschrieben:
4. Softwaregesteuertes Portforwarding (UPnP) - geht allerdings nicht mit jeder NAT-Box.
Das wäre eine gute Idee!
Und wie mache ich das mit PB
Verfasst: 07.04.2009 19:11
von DarkDragon
Joel hat geschrieben:DarkDragon hat geschrieben:
4. Softwaregesteuertes Portforwarding (UPnP) - geht allerdings nicht mit jeder NAT-Box.
Das wäre eine gute Idee!
Und wie mache ich das mit PB
http://www.purebasic.fr/english/viewtop ... light=upnp
http://www.purebasic.fr/english/viewtop ... light=upnp