BlitzMAX P2P - Firewall Hole Punching [FAIL!!]

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen

Silver_Knee

BeitragMo, Aug 03, 2009 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hab ich probiert
außer dass ich von TS aus icq und allem geflogen bin (1000er leitung zugespammt) hats nihts gebracht. Ich nehme an es passiert folgendes:

Code: [AUSKLAPPEN]
PC A 8000 ---- ROUTER A 4587 ----- 8579 ROUTER B ----- 8000 PC B


Das heißt du müsstest von dem Router mit einem unglaublichen glück von dem Port senden, von dem Router B die Nachricht erwartet. Außerdem müsstest du dann bei deinem Riesenglück auch noch den Port von Router B treffen auf dem er die nachricht erwartet.

Normalerweise geht das wenn ein Router durchlässt:

Code: [AUSKLAPPEN]
PC A 8000 ----- ROUTER A 8000 ----- 8579 Router B ----- 8000 PC B

weil dann der Router A den Quellport bekommt und der PC B den Zielport kennt.

Was ich mir vorstelle, was klappen könnte,wäre mit gefakten Paketen:



Code: [AUSKLAPPEN]

                     Mittelserver [1.1.1.1]
                        8000

 [1.1.1.0]                             [1.1.1.2]
ROUTER A 7587                        ROUTER B 4475
  PC A 8000                            PC B 8000


PC A kennt ja jetzt durch den Mittelserver alle angaben um Router B ein Paket zu schicken:
Quell IP 1.1.1.1
Quellport 8000
Ziel IP 1.1.1.2
Zielport 4475
Den Quellport kann ja der Mittelserver auf den Quellport von Router A legen. Dann dürfte sich doch ein UDP Paket faken lassen.

*grübel*

Tankbuster

BeitragMo, Aug 03, 2009 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Moment mal. Wenn ein Router etwas über einen falschen Port sendet und empfängt, manipuliert er dann den Quell-Port und ersetzt ihn durch seine Angaben?

Zitat:
PC1 8000 -----> Router1 9000 -----> PC2 8000


Eigentlich müsste PC2 die Antwort jetzt ja an Port 9000 senden und nicht an 8000, da der Router mit Port 8000 nichts anfangen kann. Mom, ich bin verwirrt. Question
Twitter
Download Jewel Snake!
Windows|Android

Silver_Knee

BeitragMo, Aug 03, 2009 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
das tut er auch
weil du beim Server-Client-System immer UDPMSGPort etc nehmen solltest...

hazumu-kun

BeitragMo, Aug 03, 2009 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh man.
Diese ganzen hübschen Ascii Grafiken helfen mir wenig.
Ein funktionierendes Beispiel wäre mal ganz net.
TimBo's Code hätte ich gerne mal.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Starwar

BeitragMo, Aug 03, 2009 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Frag ihn doch...
Das PN-System gibts schließlich nicht aus Spaß...
MFG

TimBo

BeitragMo, Aug 03, 2009 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
sry war nicht on,
ich habe ihn mal den Code geschickt.

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

hazumu-kun

BeitragDi, Aug 04, 2009 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, ich schaus mir bei Gelegenheit ma an.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

hazumu-kun

BeitragDo, Aug 06, 2009 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir den Code mal angeguckt und ihn auch mit einem kumpel getestet.
Funktioniert nicht.
Die Loch() funktion bei dir(TimBo) scheint mir auch zu unkompliziert.
(2 Zeilen in dem ein UDP Paket ohne Inhalt losgeschickt wird)
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
 

#Reaper

Newsposter

BeitragDo, Aug 06, 2009 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@viken_emesh:
Um mal auf das zurück zu kommen, was du wohl willst..:
viken_emesh hat Folgendes geschrieben:
Geht da vielleicht was über WinApi was schnell genug is Screenshots mit 10fps durch den Router zu punchen?

Nein. Da kannst du noch so viele Dll's und WinAPI-Funktionen nehmen, und es hat weder was mit der Firewall noch mit dem Router zu tun. Deine Internet-Verbindung ist dafür einfach zu langsam.

Im übrigen wird in der Wikipedia Hole Punching recht kurz, aber wohl ausreichend beschrieben. Dort steht, das es über einen Master-Server "ausgehandelt" wird. Im englischem Artikel wird sogar auch zwischen UDP und TCP Hole Punching unterschieden. Also sicherlich hilfreich.
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Firstdeathmaker

BeitragDo, Aug 06, 2009 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, also das mit dem Hole-Punching müsste doch funktionieren. Selbst wenn der Router den Port verändert, wird er die eingehenden Pakete doch auch manipulieren sodass sie richtig ankommen. Das Problem ist nur der Master-Server, welchen man aushandeln muss.

Aber das Problem einer zentralen Anlaufstelle hat man ja sowieso. Ich denke die Bittorrent-Lösung ist da schon ne recht gute (da ja jedes Torrent-file Anlaufstellen nennen kann, es somit also keine globale zentrale Anlaufstelle gibt sondern für jeden Torrent eine bestimmte). Sobald man einen weiteren Client gefunden hat, kann man das ganze ja dann komplett p2p ablaufen lassen.

Um den Master-Server kommt man aber nicht herum, es sein denn man will wahllos durchprobieren, was einfach viel zu lange dauert (kommt mir nicht mit Broadcast: die meisten Router blocken den doch).
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

BtbN

BeitragDo, Aug 06, 2009 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Firstdeathmaker hat Folgendes geschrieben:
Hmm, also das mit dem Hole-Punching müsste doch funktionieren. Selbst wenn der Router den Port verändert, wird er die eingehenden Pakete doch auch manipulieren sodass sie richtig ankommen. Das Problem ist nur der Master-Server, welchen man aushandeln muss.


Das ist quatsch. Das Paket muss auf dem Port ankommen, auf dem der Router es erwartet. Welcher das ist, ist von niemandem ausser dem empfänger ersichtlich.

Firstdeathmaker

BeitragFr, Aug 07, 2009 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Das ist quatsch. Das Paket muss auf dem Port ankommen, auf dem der Router es erwartet. Welcher das ist, ist von niemandem ausser dem empfänger ersichtlich.


Klar muss es das. Hab ich was gegensteiliges behauptet? Der Empfänger bekommt doch denke ich mal den geänderten Port als Source-Port genannt, und nicht den originalen vom Client-Rechner gewählten. Das ist doch der Sinn und Zweck des ganzen, oder?

Ich denke es funktioniert doch so:
Client A (source:5000 target:5001) -> Client B (source:5000 target:5001)
wird zu:

Client A (source:5000 target:5001) -> Router (source:5321 target:5001) -> Client B (source:5321 target:5001)
Jetzt hat der Router den Port 5000 von Client A mit dem eigenen Port 5321 verknüpft, d.h. dass er alle Pakete von
Client B welche an Port 5321 gesendet werden an Port 5000 von Client A weiterleitet (für kurze Zeit, sind meistens <10 Minuten)

Dem Client A bleibt die Veränderung natürlich transparent. Client B merkt es auch nicht; für ihn ist es nur so, als ob Client A einfach einen anderen Port genommen hat (er weis ja nicht von welchem Port Client B ursprünglich gesendet hat, es sein denn es gibt ein Protokoll dafür)
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

hazumu-kun

BeitragFr, Aug 07, 2009 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab was gefunden:
http://www.brynosaurus.com/pub/net/p2pnat/

Für den Vermittler server nehm ich en php script, kann closed werden.

Achja:
TCP-Hole-Punching ist mit blitz prinzipiell nicht möglich, weil blitz nur einen funktionierenden Socket auf einem port herstellen kann, jeder weitere socket kann zwar erstellt aber nicht funktionell benutzt werden.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

BtbN

BeitragFr, Aug 07, 2009 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Es handelt sich hier aber um BMax, und nicht um BB. BMax kann das ohne Probleme.
Und gelöste threads werden hier übrigens nie geclosed, fals dir das noch nicht aufgefallen ist.

hazumu-kun

BeitragFr, Aug 07, 2009 12:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Gutgut besser wenn nicht closed,
ABER: ich habe gestern mit BMax einen Test gemacht über den selben port lokal zu hören und zu verbinden,das was zuerst gemacht wird klappt, der andere Teil funktioniert dann aber nicht.

Ich wills letzendlich sowieso mit udp machen wenns mit tcp nicht geht, da besteht aber ein anderes Problem:

Wie erstelle ich per php ein script das einen UDP Server erstellt und listened.
Dann würde ich die Session infos Ja austauschen können.

Oder kennt jemand einen freien UDP Server der solche Sachen machen kann?? Also die public ip:port Daten zurück schickt?

Den rest könnte ich dann über php machen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
 

#Reaper

Newsposter

BeitragFr, Aug 07, 2009 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
@Firstdeathmaker:
Aber Client B bekommt doch erst gar nicht selber die Msg's von Client A, da diese ja (noch) vom Router geblockt werden. Also weiß er nicht, das Client A einen anderen Port verwendet, zu welchem er senden muss, damit er von Client A auch was empfangen kann..?


@vikem_emesh:
PHP kann zwar UDP, aber was du vor hast, wird wohl nichts. Außer du hast einen eigenen Server, auf welchem du dann das Script ohne Zeitbeschränkung laufen lassen kannst. Normale, über den Webserver gestartete Scripte laufen i.d.R. max. 30 Sekunden, danach werden diese gekillt.
Also muss du wohl TCP + HTTP verwenden.
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

BtbN

BeitragFr, Aug 07, 2009 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt fertige libs, wie nutss(Veraltet, entwicklung eingestellt), PJNATH und libjingle, die man alle in BMax benutzen könnte, mit ein wenig aufwand, und die alle einwandfrei funktionieren(Auch wenn ichs noch nicht geschafft habe, nutss zu kompilieren.)

hazumu-kun

BeitragFr, Aug 07, 2009 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmn ich bräuchte technisch gesehen nur einen Public UDP-Server der kostenlos zu jedem Client seine public Port und IP zurücksendet. Diese Daten könnte ich dann bei einem PHP Masterserver registrieren.

Kennt jemand so nen public UDP Server mit dieser speziellen Echo Funktionalität?
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

BtbN

BeitragFr, Aug 07, 2009 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Das bringt dir überhaupt nichts, weil die router sich merken, an welche IP von diesem port gesendet wurde, und auch nur von dieser IP aus wieder pakete rein lassen.

hazumu-kun

BeitragFr, Aug 07, 2009 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber dann könnte ich die ip und port addressen austauschen und letzendlich das eigentliche hole punching starten.
Les den link den ich weiter oben gepostet hab mal durch.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group