Code: Alles auswählen
#!/bin/bash
# wenn man diese Aktion mit ngrep beobachtet, werden keine Icmp-Packete geliefert.
# dieses Script zeigt, wie ein UDP-Verbindungskanal zwischen 2 Rechnern hinter je einem Firewall und ueber diese Firewalls moegl
ich ist.
{ { sleep 1; echo 1;} | netcat -u -p 4000 127.0.0.1 3000; } & { { sleep 1; echo 2;} | netcat -u -p 3000 127.0.0.1 4000; }
Nun habe ich ein Programmpacket geschrieben, welches einen Vermittlungsserver zur Verfuegung stellt, der die Clients zeitmäßig synchronisiert, sodaß diese zeitgleich die UDP-Packete losschicken, nachdem sie sich gegenseitig über die verwendeten Ports und Hosts geeinigt haben und vom Server zeitsynchronisiert wurden (keine Angst, da wird nicht an der Uhr rumgefriemelt. das betrifft nur die sleeps in den Prozessen). Ich kann das nicht testen (ausser im LAN, da funktioniert es), da mir einfach die Infrastruktur fehlt. Es werden benötigt:
o auf allen verwendeten Rechnern: python2.3/ Linux/ readline
o einen Server im Internet, auf dem './udp_server.py <ip_address> <portnr>' gestartet wird, dessen ip_address im Internet auch sichtbar ist (Vermittlungsserver)
o mindestens 2 Clientrechner (die sich _nicht_ in einem Subnetz mit dem Server befinden, sonst geht das nicht), die sich hinter einem Proxy befinden und per './udp_client.py <ip_address> <portnr> <poolid>' (mit derselben poolid) an dem Server connecten und dann vom Server Synchronisiert werden
o die Software: http://crazy.vakuum.net/udp_durch_firewall_test.tgz
o Gedult: ich hatte es bereits getestet, aber auf dem Proxy war freebsd und das mappt die ports anders beim Masquerading: der port muss derselbe bleiben, sonst geht das nicht (ich konnte feststellen, dass der Port bei Linux gleich bleibt, wenn er noch nicht auf dem Proxy belegt ist).
o Sind die Clients miteinander verbunden, erscheint in der jeweiligen Client-Console ERSTKONTAKT und kann kann mit 'say( "...")' geplappert werden. Lasst euich bitte nicht davon verwirren, dass die Programme python im Interaktiven Modus starten ( es erscheint eine python-Console '>>>'. Die Prozesse laufen im Thread).
Schreibt bitte ins Forum, wer wann und wo Server zur Verfügung stellt mit welcher/m IP/Port. Und wer als Client mit welcher Poolid dort angedockt ist.
Wenn das Experiment gelingt, dann haben wir die Voraussetzung für eine neue Art des P2P-Verbindungsaufbaus geschaffen (die zwar nicht immer Funktionieren würde, aber oft genug). Bisher musste einer der sich verbindenden P2P-Clients immer im Inet sichtbar sein; der jeweils andere konnte sich dann hinter einem Firewall verbergen. Nun können dies beide.
Danke im Voraus.
weedy.