Router FW, Port Forwarding. Wie umgehen manche Programme das?

#0
24.09.2007, 13:47
Member
Avatar Spitfire

Beiträge: 13
#1 Hi...

Ich hab hier nun schon einige Threads gesehen / gelesen, in denen manche Leute irgendwelche Programme geschrieben haben und nun wissen wollen, wie man z.B. die Firewall im Router umgeht oder ausschaltet. (Zu welchem Zweck sei mal dahingestellt.)

Die Antwort war immer etwas wie: "Wenn du willst, dass das Programm auf deinen PC zugreifen kann, musst du im Router den Port freigeben" ... etc.

Nun frag ich mich nur: Wie ist es möglich, dass - nehmen wir jetzt mal ICQ als Beispiel - soetwas nicht benötigt, ja, man sogar mehrere ICQs mit verschiedenen Logins in einem Netzwerk benutzen kann?
Durch welchen Port macht es das (ich habe noch nie in meinem Router einen Port für Chatprogramme freigeben müssen), wie / wieso lässt der Router das durch und am interessantesten: Woher weiß das ICQ an welchen PC im Netzwerk es die eingehende Nachricht schicken muss?

Vielen Dank im Vorraus, Spitfire
__________
If you see me laughing you'd better have a backup-copy...
Seitenanfang Seitenende
24.09.2007, 14:06
Member
Avatar TurnRstereO

Beiträge: 1540
#2 Hallo,

wie ICQ das genau macht weiss ich auch nicht. Aber es arbeitet da genauso (un)zuverlässig wie Skype.
Es gab mal nen Artikel auf Heise, da wo genau beschrieben wurde, wie Skype das macht.
Guckst Du hier: ---> http://www.heise.de/security/result.xhtml?url=/security/artikel/82054&words=Skype&T=skype

Diese beiden Programme (Skype/ICQ) wären für mich ein Grund, den Internetzugang in einem Firmennetz rigeros zu regelmentieren. Kann ja wohl nicht angehen, dass es da Programme gibt, die an allen Vorschriften und Einstellungen vobei ihr Ding machen.
Aber das Thema hatten wir hier irgendwo schon mal glaube ich.

TS
Seitenanfang Seitenende
24.09.2007, 14:17
Member

Themenstarter
Avatar Spitfire

Beiträge: 13
#3 Oh ja ... auf der Seite erfährt man ja schon einiges ...

Also: Die Firewall lässt die Daten durch, da sie denkt, dass sie die "Antwort" auf eine gerade ausgegangene "Anfrage" des Benutzers wären. Wie beim eingeben und anzeigen einer Website.
Was ich dabei aber noch nicht ganz verstanden habe, ist wie der erste Verbindungsaufbau zustande kommt. Wieso lässt "Bob's" Firewall die Daten, die vom SKYPE-SERVER kommen durch?"

Sind hier zufällig Programmierer unterwegs, die wissen, wie man soetwas umsetzt?
Z. B. in C#? Oder mir den Quellcode eines solchen Programms zukommen lassen könnten?

PS: Mein Ziel ist es ein ICQ / Skype ähnliches Programm zu schreiben. Kein großes Projekt. Möchte mich nur weiterbilden. ;)[/b]
__________
If you see me laughing you'd better have a backup-copy...
Dieser Beitrag wurde am 24.09.2007 um 14:21 Uhr von Spitfire editiert.
Seitenanfang Seitenende
24.09.2007, 14:28
Member
Avatar TurnRstereO

Beiträge: 1540
#4 *seufz*

Na so schwer ist das doch nicht.
Der allererste Kontaktaufbau kommt eben beim Rechnerstart/Programmstart zustande.
In dem Moment wo das Programm gestartet wird, macht es erst mal eine TCP/UDP/Wasweissich-Verbindung zu nem Server. (Sprich den von Skype/ICQ)... und et voila.. der Fisch ist am Haken.

Und nen Listing oder Codeschnipsel in C## oder was auch immer wirst Du hier wohl kaum finden, da sind andere einschlägige Foren für zuständig denke ich.

TS
Seitenanfang Seitenende
24.09.2007, 14:29
Member
Avatar Xeper

Beiträge: 5291
#5

Zitat

Sind hier zufällig Programmierer unterwegs, die wissen, wie man soetwas umsetzt?
Z. B. in C#? Oder mir den Quellcode eines solchen Programms zukommen lassen könnten?

PS: Mein Ziel ist es ein ICQ / Skype ähnliches Programm zu schreiben. Kein großes Projekt. Möchte mich nur weiterbilden. [/b]
Deine maßlose Untertreibung ist toll ;)
Wenn du Ahnung von programmieren hast weißt du wie derartig komplex ein Programm wie ICQ und/oder Skype ist - ansonsten sei das hiermit gesagt sein.
Deswegen werde ich dir bestimmt keinen solchen Code zu kommen lassen (und ich denke auch kein anderer) es sei denn du möchtest diesen in Auftrag geben :p

Und warum eigentlich C#?
Aber um dir deine Frage zu beantworten, NAT hat nichts mit Sicherheit zu tuen - die Pakete die nach außen gehen kommen auch wieder nach innen weil sie ja bevor sie durch die NAT Kette gehen markiert werden.
Ein Programm kann durchaus einen stabilen Tunnel durch ein NAT errichten solange kein SYN Paket von außen notwendig ist das einen Verbindungsaufbau initialisiert.
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
24.09.2007, 14:33
Member

Themenstarter
Avatar Spitfire

Beiträge: 13
#6 Hab mir schon dedacht, dass sowas kommt von wegen "Für einen Anfänger nicht zu schaffen".

C# nur, weil ich gerade angefangen habe, da etwas mit rumzuprobieren und mich nicht schonwieder umstellen will.
Esseidenn natürlich, du hast einen Vorschlag, was dafür besser geeignet wäre.

Habe mal ein wenig gegooglet und wollte dann mal den "Profi" fragen, was er hiervon hält:
http://www.developerfusion.co.uk/show/3574/

Reicht das nicht schon?
__________
If you see me laughing you'd better have a backup-copy...
Seitenanfang Seitenende
24.09.2007, 14:48
Member

Beiträge: 3306
#7 TC.Connect("IP OF A SERVER HERE",4296);
server = new System.Net.Sockets.TcpListener(4296);


Das implementiert dir (wahrscheinlich) einen simplen Chat der auf fixen Port Adressen basiert. Wenn der Server hinter einem Router sitzt funktioniert das nicht ohne Portforwarding, weil der Router unbekannte Anfragen verwirft. Das hat mit der Skype Lösung nichts zu tun und ist auch kein P2P Client sondern als ein großer Chatraum konzipiert.
__________
Bitte keine Anfragen per PM, diese werden nicht beantwortet.
Seitenanfang Seitenende
24.09.2007, 15:01
Member
Avatar Xeper

Beiträge: 5291
#8

Zitat

asdrubael postete
TC.Connect("IP OF A SERVER HERE",4296);
server = new System.Net.Sockets.TcpListener(4296);


Das implementiert dir (wahrscheinlich) einen simplen Chat der auf fixen Port Adressen basiert. Wenn der Server hinter einem Router sitzt funktioniert das nicht ohne Portforwarding, weil der Router unbekannte Anfragen verwirft. Das hat mit der Skype Lösung nichts zu tun und ist auch kein P2P Client sondern als ein großer Chatraum konzipiert.
Naja aber ich möchte noch hinzufügen das der Netzwerkteil (der übrigens auch nicht durch 2 Anweisungen ohne weiteres gelöst wird) nicht mal die Hälfte eines solchen Programms darstellt.
Dazu gehört ja noch viel mehr.

Zitat

C# nur, weil ich gerade angefangen habe, da etwas mit rumzuprobieren und mich nicht schonwieder umstellen will.
Das ist okay, brauchst du auch nicht - dann solltest du dein Projekt mal in Angriff nehmen ;)
Deine URL stellt einfach eine ganz Simple Client/Server Geschichte da wie asdrubael schon sagte.
Allerdings würde ich an deiner Stelle keinen Sourcecode klauen, so lernst du nichts - bitte kaufe dir ein Buch über C#.
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Dieser Beitrag wurde am 24.09.2007 um 15:08 Uhr von Xeper editiert.
Seitenanfang Seitenende
24.09.2007, 15:53
Member

Beiträge: 647
#9 Nur mal so als Hinweis: Das hat mehr was mit Netzwerkprotokollen und dem Wissen wie NAT funktioniert zu tun als mit Programmierung.

Nehmen wir den Router als beispiel: Dieser lässt alle ausgehenden Anfragen ungehindert durch, was bedeutet das eine Antwort auf eine ausgehende Anfrage natürlich auch zum passenden Rechner zurückgeroutet wird (das ist was man NAT nennt). Was ICQ und Konsorten nun machen: Diese starten eine ausgehende Anfrage an den Server, der Router merkt sich das in seiner NAT, und wenn der Server antwortet schickt der Router (weil er ja dank der NAT weiß wer da angefragt hat) die Daten richtig zurück, und somit kann man dann wunderbar chatten etc. pp.

Bei eingehenden Anfragen/Paketen, also Kommunikation die nicht von dem internen Netzwerk hinter dem Router kommt sieht das dann anders aus - diese Anfragen kann der Router ja nicht in seiner NAT haben, daher sind hier dann Portfreigaben fällig - populäres Beispiel: Ein externer Emule-Client fragt auf dem Standard-Port 4662 an - der Router würde das Paket normalerweise verwerfen weil er keinen Eintrag in seiner NAT findet - wurde ein Portforwarding installiert was diesen Port betrifft dann leitet der Router die Pakete an den entsprechenden PC im internen Netzwerk weiter.
__________
Es ist nicht wenig Zeit, die wir haben, sondern viel Zeit, die wir nicht nutzen...
Seitenanfang Seitenende
24.09.2007, 16:19
Member

Themenstarter
Avatar Spitfire

Beiträge: 13
#10 Ja ... das hab ich - glaub ich - verstanden.

Also könnte man dieses Problem - theoretisch - dadurch lösen, dass Emule beim Start einmal ein Datenpaket über 4662 irgendwohin ins Web-All sendet, oder?

PS: Wird dieser Eintrage (die Portöffnung) sobald eine Antwort kommt wieder geschlossen, oder bleibt er, solange wie das Proramm läuft, offen?

Noch n PS: Und doch ... bei mir ist es eher ein Problem des Programmierens, da ich in Programmiersprachen, mit denen sowas möglich ist (C# nur als Beispiel) einfach keine Befehle kenne und keinen, hab, der mir die nötigen zeigt.
Ich hab schon 2 C# Bücher:
"C#" von "Jürgen Bayer"
"C# und die .NET Plattform" von "Andrew Troelsen"
Allerdings ist es schwer die richtigen Befehle zu finden.
And on top of that ^^ jetzt kommts ^^ fehlt mir ein Proggi wie z.B. Visual Studio 2003 .NET. Hab zwar Visual C# 2005. Aber damit kann man keine WebApplications machen.
Hat wer ne Idee, mit welchem FreeProgramm man ein solches ja so aufwendiges Projekt realisieren kann? ;)
__________
If you see me laughing you'd better have a backup-copy...
Dieser Beitrag wurde am 24.09.2007 um 18:56 Uhr von Spitfire editiert.
Seitenanfang Seitenende
24.09.2007, 19:28
Member
Avatar Xeper

Beiträge: 5291
#11

Zitat

Noch n PS: Und doch ... bei mir ist es eher ein Problem des Programmierens, da ich in Programmiersprachen, mit denen sowas möglich ist (C# nur als Beispiel) einfach keine Befehle kenne und keinen, hab, der mir die nötigen zeigt.
Ohne Buch und Referenz kommst du nicht weiter.

Zitat

Allerdings ist es schwer die richtigen Befehle zu finden.
Das sind keine Befehle, wenn du das objekt-orientierte Design nicht verstehst fange mit einer anderen Sprache an.
Wir verstehen keine Befehle, wir kennen nur Klassen und deren Methoden.

Zitat

Hab zwar Visual C# 2005. Aber damit kann man keine WebApplications machen.
Warum denkst du das sich C# für das Web so gut eignet?
Mir scheint immer mehr das C# nicht die richtige Sprache für dich ist, ich glaube auch nicht das diese Sprache für einen Anfänger inkl. .NET so geeignet ist.

Ich möchte dich mal hierhin weiterleiten: http://board.protecus.de/t31108.htm
Denn ich denke beide Thematiken liegen den selben Problemen zugrunde.
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
24.09.2007, 20:09
Member

Themenstarter
Avatar Spitfire

Beiträge: 13
#12

Zitat

Ich möchte dich mal hierhin weiterleiten: http://board.protecus.de/t31108.htm
Denn ich denke beide Thematiken liegen den selben Problemen zugrunde.
Mag sein.

Naja ... mein Hauptproblem ist ja immerhin geklärt (wie Chat Proggis die FW umgehen).

Das Programmiertechnisch umzusetzen ist nun der 2. Schritt.
Ich habe bisher nur mit Visual Basic gearbeitet. Aber auch nicht viel mehr als if/else, functionen, cases, logins und so weiter.
C# habe ich angefangen, weil ich von vielen gehört habe, dass das die Sprache ist, zu der heute und in Zukunft mehr tendiert wird.

Nochmals: Welche Programmiersprache würdest du empfehlen, mit der solche Sachen wie Chat sachen (wenn man denn dann Ahnung hat) realisierbar sind, die aber nich ganz so schwer zu verstehen ist?
Oder kommt jetzt wieder was wie "Alle Sprachen sind gleich schwer zu verstehen, wenn man keine Anleitung hat" ? ;)

Du hattest dem da in dem anderen Thread den SciTE Editor geraten. Den hab ich auch, aber selbst da muss man ja ne Sprache auswählen glaub ich.
Und so von Grund auf hab ich auch noch nie mit so nem TextEditor was gemacht. Gibts da ne Tut seite für?
__________
If you see me laughing you'd better have a backup-copy...
Dieser Beitrag wurde am 24.09.2007 um 20:28 Uhr von Spitfire editiert.
Seitenanfang Seitenende
24.09.2007, 20:43
Member
Avatar Xeper

Beiträge: 5291
#13

Zitat

Ich habe bisher nur mit Visual Basic gearbeitet. Aber auch nicht viel mehr als if/else, functionen, cases, logins und so weiter.
VB ist nur zu einem gewissen Teil einer OOP Sprache, auf jedenfall Hybrid.

Zitat

C# habe ich angefangen, weil ich von vielen gehört habe, dass das die Sprache ist, zu der heute und in Zukunft mehr tendiert wird.
Das ist richtig, es liegen ISO Normen vor - aber Industriestandard ist sie noch nicht und C++ hat sie auch noch nicht ersetzt.
Soweit ich weiß ist der größte Unterschied das C# kein eigenes Programm ist sondern eine VM benötigt ähnlich wie Java.

Zitat

Nochmals: Welche Programmiersprache würdest du empfehlen, mit der solche Sachen wie Chat sachen (wenn man denn dann Ahnung hat) realisierbar sind, die aber nich ganz so schwer zu verstehen ist?
Die schwere liegt in der Natur der Sache, du bist mit einer OOP Sprache schon besser aufgehoben aber ich würde persönlich eher C++ benutzen.
OOP deswegen weil solche Programme schon sehr schnell sehr komplex werden können - aber du musst das Prinzip verstehen.
Vorallem die Differenz zwischen prozendualer Programmierung und Objekt-orientierter Programmierung.

Zitat

Oder kommt jetzt wieder was wie "Alle Sprachen sind gleich schwer zu verstehen, wenn man keine Anleitung hat" ?
Die meisten Sprachen unterscheiden sich hauptsächlich von der Syntax und der Garbage Collection.
C++ ist schon mal eine OOP Sprache die ABI Kompatibel zu C ist und über keine Garbage Collection verfügt - das heißt die Speicherverwaltung erfolgt durch den Programmierer.
Allerdings ist C++ eine eher intuitive Sprache, eigentlich gut zu verstehen wenn man ein Buch hat.

Zitat

Du hattest dem da in dem anderen Thread den SciTE Editor geraten. Den hab ich auch, aber selbst da muss man ja ne Sprache auswählen glaub ich.
Du wählst die Sprache nur wegen dem Syntax Highlighting also der farbigen Darstellung des codes aus.
Ansonsten kannst du jedigen X beliebigen Editor benutzen der mit reinen ASCII arbeitet, allerdings sind solche Editoren wie SciTE besser weil sie speziell auf Programmier- und Script-Sprachen ausgerichtet sind.

Zitat

Und so von Grund auf hab ich auch noch nie mit so nem TextEditor was gemacht. Gibts da ne Tut seite für?
Wie meinst du das, muss man dir ein Tut dafür geben um in Word einen Brief zu schreiben?
Du verwendest deine Programmiersprache die du gelernt hast und schreibst.
Das einzige was du daneben benötigst ist der Compiler oder Interpreter für C++ gibt es MiniGW und gcc zb.

Edit:

Ach ja wollte noch bemerken ich habe auch schon GUIs in SciTE geschrieben - ich weiß gar nicht wo das Problem liegt, ich bin da viel schneller als mit einem IDE aber ich denk das ist Ansichtssache und hängt natürlich vom Skill ab ;)
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Dieser Beitrag wurde am 24.09.2007 um 20:51 Uhr von Xeper editiert.
Seitenanfang Seitenende
24.09.2007, 21:00
Member

Themenstarter
Avatar Spitfire

Beiträge: 13
#14 Hehe ... GUI hab ich auch schon in SciTE geschrieben.
Aber bisher nur in Verbindung mit AutoIt.

Wie ich jetzt GUI in C++ schreibe mit SciTE...das ist halt mein Problem was ich auch mit

Zitat

Und so von Grund auf hab ich auch noch nie mit so nem TextEditor was gemacht. Gibts da ne Tut seite für?
meinte.
__________
If you see me laughing you'd better have a backup-copy...
Seitenanfang Seitenende
24.09.2007, 21:24
Member
Avatar Xeper

Beiträge: 5291
#15

Zitat

Wie ich jetzt GUI in C++ schreibe mit SciTE...das ist halt mein Problem was ich auch mit
Lern bitte erstmal eine Sprache - es hat wirklichts nicht mit dem Texteditor zutuen.
Entweder du kannst sie oder du kannst sie nicht, wenn du sie kannst wird sich diese Frage von selber erklären.
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende