Wer kennt das lästige Problem nicht.
Man unterhält sich via Instant Messenger und möchte seinem Gegenüber eine Datei senden und das Theater geht los.
Funktioniert der Dateiversand?
Durch die vielen unterschiedlichen Clients, die jeweils nicht jede Kombination mit jedem anderen Client bzw. jedem der vefügbaren Protokolle beherrschen, wird Dateiversand zum Glücksspiel.
Hier nun eine einfache und auch recht sichere Lösung, da im Gegensatz zum Versand direkt via Messenger nicht die ganze Zeit ein Port geöffnet wird.
Des Rätsels Lösung nennt sich "woof", ein kleines Python-Script, welches eigentlich nur eine einfache Aufgabe erfüllt, diese aber perfekt.
- Es öffnet einen kleinen Webserver und bietet eine Datei oder auch einen ganzen Ordner (welcher dann noch netterweise als tar.gz verpackt angeboten wird) an
- Der Empfänger kann mittels eines direkten Downloads mit dem Webbrowser/Downloadmanager (als Linuxer verwendet man natürlich stilecht am besten wget) seiner Wahl die Datei runterladen
und
- Anschliessend beendet sich woof automatisch und der entsprechende Port ist wieder zu.
Da das Ganze mit einem Port aus dem "Non Privileged"-Bereich > 1024 funktioniert, sind hierzu keinerlei erhöhte Zugriffsrechte nötig, jeder normale Systemnutzer kann woof verwenden.
1. Woof installieren
Es handelt sich zwar nur um ein Script, jedoch gibt es auch fertige RPM-Pakete im openSUSE Build-Service:
Index of /repositories/network:/utilities
Distribution wählen und im Ordner "noarch" wird man fündig, das RPM ist sage und schreibe knappe 7 Kilobyte groß.
Wer keine Pakete für seine Distribution findet, der kann sich das Script auch von hier besorgen:
Woof - simply exchange files
(Ausführbar machen und z.B. nach /usr/bin, /usr/local/bin oder /home/Username/bin kopieren)
2. Woof konfigurieren
Eigentlich nicht nötig, per default hört woof auf Port 8080 und bietet eine Datei genau einmal an, bevor er sich beendet.
Wer dieses Verhalten ändern will, der kann sich eine Datei .woofrc in seinem $HOME-Verzeichnis mit folgendem Inhalt anlegen.
3. Woof benutzen
Die Nutzung ist denkbar einfach, für eine Datei schreibt man:
Für einen Ordner:
Die Ausgabe lautet dann z.B.
OK, hier taucht nun das erste Problem auf, welches es zu lösen gilt.
Ich hänge hinter einem Router und woof zeigt mir die interne IP-Adresse aus dem LAN an, ich muss meinem Gegenüber aber die externe IP-Adresse geben.
Hier hilft folgendes, kleines Script (ich habe es "whatsmyip.sh" genannt)
Dieses Script entweder nach /usr/bin oder /home/Benutzername/bin kopieren, ausführbar machen (chmod 755 whatsmyip.sh) und aufrufen:
Mein Gegenüber erhält von mir nun folgenden Link via Messenger:
und kann sich unter dieser Adresse die Datei abholen, z.B. mit wget:
Das zweite Problem, welches es zu lösen gilt, betrifft ebenfalls vor allem Nutzer, die hinter einem Router hängen und/oder einen Paketfilter laufen haben.
Hier muss der entsprechende Port freigegeben und im Router auch weiter geleitet werden, damit es funktioniert (näheres entnehme man dem Handbuch des verwendeten Routers).
Ein nettes Extra-Feature bietet woof ebenfalls noch an, gibt man
ein, so verteilt sich woof selbst.
Da Python plattformunabhängig ist, müsste woof auch auf anderen OS laufen, sofern dort eine Python-Laufzeitumgebung installiert ist.
Bei den meisten Linux-Distributionen dürfte Python zur Standardaustattung gehören (oder ist via Paketmanager einfach nach zu installieren).
Da die Übertragung mittels http erfolgt, muss man sich keine Sorgen mehr wegen irgendwelcher Kompatibilitätsprobleme unterschiedlicher Messengerprotokolle oder unterschiedlicher Betriebssysteme der miteinander kommunizierenden Partner machen, denn http "spricht" jedes moderne OS.
Wer sagt, daß gute Software nicht auch winzig klein sein kann?
Greetz,
RM
Man unterhält sich via Instant Messenger und möchte seinem Gegenüber eine Datei senden und das Theater geht los.
Funktioniert der Dateiversand?
Durch die vielen unterschiedlichen Clients, die jeweils nicht jede Kombination mit jedem anderen Client bzw. jedem der vefügbaren Protokolle beherrschen, wird Dateiversand zum Glücksspiel.
Hier nun eine einfache und auch recht sichere Lösung, da im Gegensatz zum Versand direkt via Messenger nicht die ganze Zeit ein Port geöffnet wird.
Des Rätsels Lösung nennt sich "woof", ein kleines Python-Script, welches eigentlich nur eine einfache Aufgabe erfüllt, diese aber perfekt.
- Es öffnet einen kleinen Webserver und bietet eine Datei oder auch einen ganzen Ordner (welcher dann noch netterweise als tar.gz verpackt angeboten wird) an
- Der Empfänger kann mittels eines direkten Downloads mit dem Webbrowser/Downloadmanager (als Linuxer verwendet man natürlich stilecht am besten wget) seiner Wahl die Datei runterladen
und
- Anschliessend beendet sich woof automatisch und der entsprechende Port ist wieder zu.
Da das Ganze mit einem Port aus dem "Non Privileged"-Bereich > 1024 funktioniert, sind hierzu keinerlei erhöhte Zugriffsrechte nötig, jeder normale Systemnutzer kann woof verwenden.
1. Woof installieren
Es handelt sich zwar nur um ein Script, jedoch gibt es auch fertige RPM-Pakete im openSUSE Build-Service:
Index of /repositories/network:/utilities
Distribution wählen und im Ordner "noarch" wird man fündig, das RPM ist sage und schreibe knappe 7 Kilobyte groß.
Wer keine Pakete für seine Distribution findet, der kann sich das Script auch von hier besorgen:
Woof - simply exchange files
(Ausführbar machen und z.B. nach /usr/bin, /usr/local/bin oder /home/Username/bin kopieren)
2. Woof konfigurieren
Eigentlich nicht nötig, per default hört woof auf Port 8080 und bietet eine Datei genau einmal an, bevor er sich beendet.
Wer dieses Verhalten ändern will, der kann sich eine Datei .woofrc in seinem $HOME-Verzeichnis mit folgendem Inhalt anlegen.
Code:
[main]
port = [b]Port auf dem woof lauschen soll[/b] # vorzugsweise ein Port > 1024
count = [b]wie oft soll eine Datei herunter geladen werden dürfen[/b] # default ist 1
Die Nutzung ist denkbar einfach, für eine Datei schreibt man:
Code:
woof /Pfad/zur/Datei/Dateiname
Code:
woof /Pfad/zum/Ordner/
Code:
Now serving on http://192.168.1.100:8080/
Ich hänge hinter einem Router und woof zeigt mir die interne IP-Adresse aus dem LAN an, ich muss meinem Gegenüber aber die externe IP-Adresse geben.
Hier hilft folgendes, kleines Script (ich habe es "whatsmyip.sh" genannt)
Code:
#!/bin/bash
echo $(date) |tr '\n' ' '
echo External IP: `curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'`
Code:
whatsmyip.sh
Do 4. Sep 04:47:02 CEST 2008 External IP: *Hier steht dann die externe IP*
Code:
http://Meine_externe_IP:8080/
Code:
wget http://Meine_externe_IP:8080/
Hier muss der entsprechende Port freigegeben und im Router auch weiter geleitet werden, damit es funktioniert (näheres entnehme man dem Handbuch des verwendeten Routers).
Ein nettes Extra-Feature bietet woof ebenfalls noch an, gibt man
Code:
woof -s
Da Python plattformunabhängig ist, müsste woof auch auf anderen OS laufen, sofern dort eine Python-Laufzeitumgebung installiert ist.
Bei den meisten Linux-Distributionen dürfte Python zur Standardaustattung gehören (oder ist via Paketmanager einfach nach zu installieren).
Da die Übertragung mittels http erfolgt, muss man sich keine Sorgen mehr wegen irgendwelcher Kompatibilitätsprobleme unterschiedlicher Messengerprotokolle oder unterschiedlicher Betriebssysteme der miteinander kommunizierenden Partner machen, denn http "spricht" jedes moderne OS.
Wer sagt, daß gute Software nicht auch winzig klein sein kann?
Greetz,
RM