Autor Beitrag
theChaoS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Do 11.06.09 17:15 
Hallo alle miteinander
Mein Problem ist folgendes ich habe ein Netzwerkfähiges Programm geschrieben das im Endeffekt Text (Strings) übers Netzwerk verschickt.
Nun möchte ich das Programm übers Internet lauffähig machen.
Hierzu nutze ich: die UDP-Komponente von Narsen, Delphi 7, diverse Router.
Mein Ansatz: Port forwarding. Das Funktioniert Seher gut ABER und damit kommen wir zu
Mein Problem:
Wie kann ich
a) Ports forwarden in dynamischen Netzwerken (d.H. keine Feste IP im Lokalen Netzwerk
b) ohne an den Router zu sitzen bzw. sein Passwort zu kennen (aber den Exakten Name und die Serien Nummer des Routers)
c) die IP bestimmen die der Rechner im Internet hat (alles ohne davor zu sitzen ^^).

Ich meine Software wie ICQ schafft das doch auch irgendwie oder liege ich da falsch?

P.S. ja ich weiß das sind bösartige fragen ^^ und ziemlich unorthodoxe noch dazu ^^.

Moderiert von user profile iconNarses: Titel erweitert.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 11.06.09 18:16 
Nö, da liegst du falsch.
ICQ baut nur ausgehende Verbindungen auf.
Versuch mal mit ICQ Dateien zu empfangen, ohne ein Port Forwarding einzurichten.

Und aus deiner Anwendung: Das wär ja grausam, wenn jede x-beliebige Applikation Ports an jedem beliebigen Router freigeben kann -> Sollte (muss?) der Benutzer selber machen.

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 11.06.09 18:24 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Und aus deiner Anwendung: Das wär ja grausam, wenn jede x-beliebige Applikation Ports an jedem beliebigen Router freigeben kann -> Sollte (muss?) der Benutzer selber machen.
Naja, nicht ganz.
Wenn UPnP aktiviert ist am Router darf eine Software dort einfach einen Port für sich freigeben. Das funktioniert aber nur innerhalb eines Netzwerkes, wenn also ein weiterer Router dazwischenhängt, geht sowas nicht.

Ich selbst habe das so eingerichtet, dass ein Rechner mit Firewall und aktiviertem UPnP nochmal dazwischenhängt. Wenn dort ein Port eingetragen wird, sehe ich das über eine Software, die auf meinem PC läuft und ich kann entscheiden, ob ich diesen Port auch im Router selbst wiederum auf den Gateway-PC weiterleiten möchte, so dass das funktioniert.

Was ICQ und andere Software angeht:
Diese bedienen sich eines Tricks, für den aber ein echter Server im Internet zur Vermittlung gebraucht wird. Wenn du den nicht hast, bleibt dir nur Portforwarding.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 11.06.09 20:26 
Ist dir bewusst, dass ein UDP-Paket ohne weiteres einfach verworfen werden kann und die Reihenfolge von versendeten Paketen beim Empfangen anders sein kann?

Wäre es denkbar, dein Programm mit einem Server im Internet kommunizieren zu lassen? Bspw. WebService via PHP.
theChaoS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Fr 12.06.09 15:04 
Also das UDP Pakete gerne vergessen werden weiß ich ^^
hab ich aber schon abgefangen.
Was den Server anbelangt: Nein, deswegen habe ich ja UDP gewählt ^^

Mein Hauptproblem ist nach wie vor das Port forwading in einen Netzwerk das Dynamische IP Benutzt. Und das ganze sollte dann automatisch (d.H. vom Programm) werden können. Das Problem mit dem Unbekanntem Passwort lässt sich im Notfall lösen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 12.06.09 15:11 
user profile icontheChaoS hat folgendes geschrieben Zum zitierten Posting springen:
Was den Server anbelangt: Nein, deswegen habe ich ja UDP gewählt ^^
Was hat ein fehlender Server mit der Entscheidung zwischen TCP und UDP zu tun? Habe ich was verpasst? Broadcast und Server automatisch finden und sowas geht selbstverständlich nur im lokalen Netzwerk. :gruebel:

user profile icontheChaoS hat folgendes geschrieben Zum zitierten Posting springen:
Das Problem mit dem Unbekanntem Passwort lässt sich im Notfall lösen.
Das Problem ist der Zugriff auf den Router, wenn du das meinst... Denn der ist ja nicht standardisiert außer was UPnP angeht.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 12.06.09 15:13 
Moin!

user profile icontheChaoS hat folgendes geschrieben Zum zitierten Posting springen:
Was den Server anbelangt: Nein, deswegen habe ich ja UDP gewählt ^^
Bei den Fragen meiner Vorredner geht es auch nicht primär darum, den Server als Dienstleister für die Datenübermittlung zu nutzen, sondern zur Adressvermittlung. ;)

user profile icontheChaoS hat folgendes geschrieben Zum zitierten Posting springen:
Mein Hauptproblem ist nach wie vor das Port forwading in einen Netzwerk das Dynamische IP Benutzt. Und das ganze sollte dann automatisch (d.H. vom Programm) werden können.
Um es kurz zu machen: vergiss es, dafür gibt es keine wasserdichte Lösung. :nixweiss: Grundproblem: NAT-Router ermöglichen nur ausgehenden UDP-Paketen einen (idR zeitlich begrenzten) "Rückkanal", was du dauerhaft nur duch ein Portforwarding auf eine (bekannte) IP umgehen kannst.

Wenn du
a) einen NAT-Router im LAN hast, der dynamisch Adressen vergibt,
b) keinen Zugang zum Router (manuell oder UPnP) hast,
dann kannst du überhaupt nur was mit einem "echten" Internet-Server retten, der als Adressvermittlung für UDP-Hole-Punching dient.

Wenn du die Voraussetzungen nicht erfüllen kannst oder keine Ahnung von UDP-Hole-Punching (und einen dazugehörigen INet-Server) hast, dann kannst du hier aufhören zu suchen. :|

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
theChaoS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Fr 12.06.09 18:54 
Ja wen das Port Forwading Pflicht ist dan bin ich wohl daran gescheitert ^^
schade eigenlich
naja fieleicht wird irgenwan mal ne einfachere art der Kommunikation erfunden ^^
THX an alle fürs Helfen

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

P.S. was den Adress Server anbelangt DAS Problem kann ich umgehn ^^.
Da ich kein "normales" DSL hab bekomme ich seit schon 1-3 Monaten keine neue Internet IP zugewisen (sollte net so sein is aber so ^^)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 12.06.09 19:21 
Moin!

user profile icontheChaoS hat folgendes geschrieben Zum zitierten Posting springen:
Ja wen das Port Forwading Pflicht ist dan bin ich wohl daran gescheitert
Ein Portforwarding ist nicht zwangsweise "Pflicht", lediglich dann, wenn du mit unerwartet eintreffenden Datenpaketen rechnen musst. :nixweiss:

Mal ein Beispiel: Du hast ein LAN und einen NAT-Router im Betrieb, dein Freund auch. Nehmen wir mal an, ihr tauscht telefonisch die öffentlichen IP-Adressen eurer Router aus und vereinbart Port 5000. Jetzt sendest du Pakete an <Freund-Router>:5000, er sendet zeitgleich Pakete an <Dein-Router>:5000 - solange, bis ihr beide die Pakete empfangt oder ein Timeout eintritt. Was passiert: Dein Router leitet das UDP-Paket weiter und richtet einen (möglicherweise temporären) "Rückkanal" in deinem Router ein, dass UDP-Pakete an Port 5000 zu deinem Rechner weitergeleitet werden sollen. Das gleiche umgekehrt bei deinem Freund. So gelangen die jeweils vom Anderen gesendeten Pakete dann doch durch den Router. :) Allerdings: das klappt nicht immer (hängt vom OS des Routers ab) und setzt voraus, dass ihr die IP-Adressen und einen Port ausgehandelt habt (deshalb der INet-Server, dafür ist der dann nämlich zuständig). Das war die Kurzfassung von UDP-Hole-Punching.

Was natürlich auch geht: du kannst auf UDP-Unicasts (üblicherweise innerhalb eines bestimmten Zeitfensters) auch über NAT-Router hinweg antworten, hier ist dann nur beim Sender die IP des "Servers" notwendig und ggfs. ein Portforwarding im "Server-Netz" (sonst würde z.B. eine DNS-Anfrage in einem NAT-Router-Lan ja auch nicht funktionieren). :idea:

Was generell nicht geht: UDP-Broadcasts über NAT-Router hinweg (filtert der Router) oder im Internet (filtert der Provider). Wenn das Ziel der ganzen Übung also mal wieder ein "(Internet-)Chat-ohne-IP-des-Servers" werden soll, dann vergiss auch das gleich wieder. :zwinker:

user profile icontheChaoS hat folgendes geschrieben Zum zitierten Posting springen:
naja fieleicht wird irgenwan mal ne einfachere art der Kommunikation erfunden
Die ist schon erfunden und heißt IPv6. :D Bis das allerdings produktiv zu haben sein wird, werden wohl noch ein paar Tage ins Land gehen... :?

user profile icontheChaoS hat folgendes geschrieben Zum zitierten Posting springen:
was den Adress Server anbelangt DAS Problem kann ich umgehn ^^.
Da ich kein "normales" DSL hab bekomme ich seit schon 1-3 Monaten keine neue Internet IP zugewisen
Wir reden hier nicht vom DNS, sondern davon, an unbekannte Peer-IPs zu kommen, oder? :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.