Verständnisfrage: Kommunikation über Internet



  • Hallo,

    ich habe eine Verständnisfrage und hoffe, ich poste nicht ins falsche Forum.

    Ich möchte über das Internet eine Nachricht verschicken, weiß aber nicht wie das funktionieren soll.

    Aus einem Tutorial habe ich folgenden Codeschnipsel:

    s=socket(AF_INET,SOCK_STREAM,0); 
    	if(s==INVALID_SOCKET) return 1; 
    	memset(&addr,0,sizeof(SOCKADDR_IN));  
    	addr.sin_family=AF_INET; addr.sin_port=htons(12345);  
    	addr.sin_addr.s_addr=inet_addr("127.0.0.1");   // moechte gerne richtige IP eingeben
    	rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); 
    	if(rc==SOCKET_ERROR)  return 1;
    

    Das funktioniert.

    Aber wenn ich meine aktuelle IP-Adresse eingebe, dann funktioniert das nicht! Der Clientserver bekommt keine Verbindung mit dem Server.

    Ich bin über einem Router mit dem Internet verbunden. Was muss ich tun, damit ich anstatt "127.0.0.1" auch einfach meine aktuelle IP eingeben kann, so dass mein Rechner von anderen Rechnern erreichbar ist?

    Vielen Dank für jede Hilfe!



  • Das geht so nicht, da deine Adresse häufig nicht direkt aus anderen Netzen erreichbar ist.

    Point-2-Point oder IP-2-IP Verbindungen funktionieren über das Internet nicht immer.
    Alternativen:

    Stun/TURN als Standard nutzen, gibts auch für C++, ist aber etwas schwierig in der Umsetzung.
    Proxy/Relay server nutzen der 2 teilnehmer verbindet. Ähnlich wie STUN/TURN, nur ohne standard und auf eigenes Risiko.

    In beiden fällen brauchst du einen Man-in-the-Middle. Direkte IP Verbindungen sind über das Internet zwar möglich, aber häufig ist man hinter Firewalls oder in lokalen Netzwerken welche genau dies verhindern. Ich kann dir da aber auch keine Standard Lösung geben, habe nur diesen Themenkomplex für eine Fernwartungslösung mal bearbeiten dürfen....



  • Hallo publicmain,

    welche IP-Adresse hast du denn genommen? Du mußt die nehmen, die als "extern" gilt, z.B. die über http://www.whatismyip.com/ ermittelte.
    Wenn du eine dynamische IP deines Providers hast, dann ändert sich diese natürlich bei jeder Einwahl wieder.



  • publicmain schrieb:

    Hallo,

    ich habe eine Verständnisfrage und hoffe, ich poste nicht ins falsche Forum.

    Ich möchte über das Internet eine Nachricht verschicken, weiß aber nicht wie das funktionieren soll.

    Aus einem Tutorial habe ich folgenden Codeschnipsel:

    s=socket(AF_INET,SOCK_STREAM,0); 
    	if(s==INVALID_SOCKET) return 1; 
    	memset(&addr,0,sizeof(SOCKADDR_IN));  
    	addr.sin_family=AF_INET; addr.sin_port=htons(12345);  
    	addr.sin_addr.s_addr=inet_addr("127.0.0.1");   // moechte gerne richtige IP eingeben
    	rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); 
    	if(rc==SOCKET_ERROR)  return 1;
    

    Das funktioniert.

    Aber wenn ich meine aktuelle IP-Adresse eingebe, dann funktioniert das nicht! Der Clientserver bekommt keine Verbindung mit dem Server.

    Ich bin über einem Router mit dem Internet verbunden. Was muss ich tun, damit ich anstatt "127.0.0.1" auch einfach meine aktuelle IP eingeben kann, so dass mein Rechner von anderen Rechnern erreichbar ist?

    Vielen Dank für jede Hilfe!

    Der Router trennt das Internet vom lokalen Netz.
    Die IP Adresse, die du siehst, ist in Wirklichkeit die des Routers, der dich zum Internet verbindet.
    Im lokalen Netz hängen z.B. 10 Rechner. Alle haben die gleiche IP Adresse, vom Internet her betrachtet. Wenn nun eine Anfrage (z.B. TCP Paket) an den Router kommt, woher soll dieser wissen wohin die Anfrage weitergeleitet werden soll?

    Du kannst in den Routereinstellungen aber festlegen, dass Anfragen für eben diese IP und Port Nummer 12345 im LAN an deinen Rechner weitergeleitet werden soll. Portweiterleitung oder so ähnlich nennt sich die Option meistens bei den Routereinstellungen.



  • Das nennt sich dann NAT



  • Wenn du nicht genug IPv4-Adressen bekommen kannst, besorg dir ein IPv6-Präfix (sixxs.net, he.net). Damit hast du dann erstmal ausgesorgt. Ansonsten kannst du natürlich auch entsprechende Forwarding-Regeln in deinem Router einrichten, siehe Handbuch davon.



  • Vielen Dank für die Antworten!

    Nochmal zum Verständnis: Der Router bildet mit den verbundenen Rechnern ein eigenes Lan, in dem jeder Rechner eine eigene IP besitzt, die von außen aber nicht gesehen wird. Mit dem Internet kommunizieren die Rechner über den Router, der wiederum eine eigene IP im Internet besitzt.

    Wie funktioniert denn die Zuordnung der Nachrichten, wenn ein Server einen Rechner im Lan ansteuert? Der Router muss ja irgendwie auflösen, welche Nachricht aus dem Internet für welchen Rechner ist. Ist es so, dass die Ports des Routers, an denen die Nachrichten ankommen, den Empfänger bestimmen? Also bspw. alle Nachrichten für Port 12345 sind für Rechner 2 mit Lan-IP 162.0.1.1.

    @Th69: Meine IP habe ich über "wieistmeineip.de" herausgefunden. Das müsste doch die extrerne IP sein, oder?

    Wie funktionieren eigentlich Chats wie icq oder msn? Ich dachte, da kämen die Nachrichten auch direkt beim anderen Computer an.



  • Die chats gehen doch alle nur über die NSA-Server ! Direktes Versenden und Empfangen geht über NAT im Router inclusive Port-Forwarding und ggf (alte Telekom-Router wie bei mir) über virtuellen Server



  • publicmain schrieb:

    Vielen Dank für die Antworten!

    Nochmal zum Verständnis: Der Router bildet mit den verbundenen Rechnern ein eigenes Lan, in dem jeder Rechner eine eigene IP besitzt, die von außen aber nicht gesehen wird. Mit dem Internet kommunizieren die Rechner über den Router, der wiederum eine eigene IP im Internet besitzt.

    Wie funktioniert denn die Zuordnung der Nachrichten, wenn ein Server einen Rechner im Lan ansteuert? Der Router muss ja irgendwie auflösen, welche Nachricht aus dem Internet für welchen Rechner ist. Ist es so, dass die Ports des Routers, an denen die Nachrichten ankommen, den Empfänger bestimmen? Also bspw. alle Nachrichten für Port 12345 sind für Rechner 2 mit Lan-IP 162.0.1.1.

    @Th69: Meine IP habe ich über "wieistmeineip.de" herausgefunden. Das müsste doch die extrerne IP sein, oder?

    Wie funktionieren eigentlich Chats wie icq oder msn? Ich dachte, da kämen die Nachrichten auch direkt beim anderen Computer an.

    wenn du im LAN einen Webserver auf 192.168.0.10 betreibst, den du aus dem Inet erreichen willst, so musst du dem Router sagen, dass alle Anfragen auf Port 80 an den Rechner mit IP 192.168.0.10 weitergeleitet werden.



  • publicmain schrieb:

    Wie funktionieren eigentlich Chats wie icq oder msn? Ich dachte, da kämen die Nachrichten auch direkt beim anderen Computer an.

    heise.de: Der Lochtrick - Wie Skype & Co. Firewalls umgehen



  • geeky schrieb:

    publicmain schrieb:

    Wie funktionieren eigentlich Chats wie icq oder msn? Ich dachte, da kämen die Nachrichten auch direkt beim anderen Computer an.

    heise.de: Der Lochtrick - Wie Skype & Co. Firewalls umgehen

    Nur dass das ein sehr spezialer Fall ist, die meisten Systeme wie zB MSN, ICQ, Google Talk, Facebook Chat, etc. nutzen das nicht.

    Die machen das ganz normal indem sie eine outgoing Verbindung zu einem Server aufbauen und so eine verbindung herstellen. Der Chatpartner stellt ebenfalls eine Outgoing verbdindung zum Chatserver her und so kommunizieren beide Partner ueber den Server.


Anmelden zum Antworten