HTTP Tunnel Server (hts) für Freetz

ao

Aktives Mitglied
Mitglied seit
15 Aug 2005
Beiträge
2,158
Punkte für Reaktionen
2
Punkte
38
Worum geht's?
Ich wollte "hts" (HTTP tunnel server) auf meiner Fritzbox laufen lassen.
Damit kann ich von überall selbst durch sehr restriktive Proxies Zugriff zu meiner Fritzbox bekommen.

Näheres dazu kann man hier nachlesen (danke, WLAN-VoIP-Fan, für den Link!).
Aus der Sicht von OS X (aber generell übertragbar) gibt es hier ein paar gute Tipps und schöne Beispiele.
(vor allem steht dort auch, wie man sich den httptunnel client "htc" für OS X kompiliert - total einfach)

Selbst bei den restriktivsten Proxies sollte neben Port 80 (http) auch noch Port 443 (https) offen sein - und das genügt.
Das Ganze ginge auch mittels PuTTY & Co., funktioniert aber nicht bei allen Proxies.

Im Freetz-Wiki unter First steps - How to start your first freetz package habe ich mal angefangen, zu beschreiben wie ich dieses Paket erstellt habe. Ich werde versuchen, das soweit zu verallgemeinern, dass es auch auf (beliebige) andere, neue Pakete übertragbar ist. So könnten vielleicht noch mehr Interessierte zur Erstellung neuer Pakete beitragen und helfen, die "Chef-Entwickler" hier etwas zu entlasten.
Disclaimer:
Keine Garantie etc., ich habe die Funktion von "hts" bisher noch nicht getestet!
Außerdem übernehme ich keine Verantwortung, falls jemand mit "hts" Missbrauch betreibt.
Über die Konsequenzen des Tools sollte sich jeder vorab gründlich informieren!

EDIT: Folgendes ist veraltet, da hts inzwischen in Freetz eingebunden wurde (seit trunk 2316).

Die sources, welche ich zum Kompilieren verwendet habe, findet Ihr hier.

Vorgehensweise:
"hts" auf die Box (z.B. mit der RudiShell) nach "/var/tmp/" kopieren, ausführbar machen ("chmod 755 hts") und einfach mal die Hilfe aufrufen:
Code:
/var/tmp # ./hts --help
Usage: ./hts [OPTION]... [PORT]
Listen for incoming httptunnel connections at PORT (default port is 8888).
When a connection is made, I/O is redirected to the destination specified
by the --device or --forward-port switch.

  -c, --content-length BYTES     use HTTP PUT requests of BYTES size
                                 (k, M, and G postfixes recognized)
  -d, --device DEVICE            use DEVICE for input and output
  -F, --forward-port HOST:PORT   connect to PORT at HOST and use it for
                                 input and output
  -h, --help                     display this help and exit
  -k, --keep-alive SECONDS       send keepalive bytes every SECONDS seconds
                                 (default is 5)
  -M, --max-connection-age SEC   maximum time a connection will stay
                                 open is SEC seconds (default is 300)
  -S, --strict-content-length    always write Content-Length bytes in requests
  -V, --version                  output version information and exit
  -p, --pid-file LOCATION        write a PID file to LOCATION

Report bugs to [EMAIL="[email protected]"][email protected][/EMAIL].
____________________

Hallo,

ich zitiere hier aus einem alten Thread aus dem Jahr 2006, mache aber einen neuen auf, da es im ursprünglichen nicht direkt um Freetz ging und der letzte Beitrag dort auch schon über ein Jahr alt ist...

... da Oliver damals schon gefragt hatte, ob es evtl. auch noch andere interessiert - mich z.B....

Bitteschön... :)

MfG Oliver

edit: Kannst du mal noch die Aufrufe posten, wie das dann auszusehen hat. Vielleicht interessiert das auch noch andere.

Hallo Oliver,

Dein Beitrag ist zwar schon etwas älter, aber vielleicht kannst Du mir weiterhelfen.
Du hattest im Beitrag #8 (im o.g. Ursprungs-Thread) eine kompilierte Version von hts reingestellt, die ich mir nach /var/tmp auf der FB 7170 geholt habe (mittels RudiShell) und ausführbar gemacht habe (chmod 755 hts). Doch der Aufruf scheitert:
Code:
/var/tmp # hts
-sh: hts: not found
Dann habe ich mir hts aus den sourcen selbst kompiliert, aber leider mit demselben Ergebnis.
Code:
-rwxr-xr-x    1 root     root        37316 Jun  5 23:12 hts
Hatte hts auf Deiner FB mal funktioniert?

Kannst Du mir einen Tipp geben, wie ich hts für meine FB 7170 kompiliere, so dass es läuft?
Ich verwende StinkyLinux zum FB-Bauen.

Vielen Dank und Gruß, ao

EDIT:
Evtl. hatte ich die Kompilierung nicht vollständig abgeschlossen, aber die Datei hts war entstanden, so dass ich davon ausging, dass sie zumindest fertig kompiliert wurde.

Nun noch einmal der ganze Vorgang mit (Fehler-)Meldungen. Weisst Du evtl. weiter?
Code:
slightly@StinkyLinux:~/http-tunnel/httptunnel-3.0.5$ ./configure
...
creating config.h
config.h is unchanged
Code:
slightly@StinkyLinux:~/http-tunnel/httptunnel-3.0.5$ make
make  all-recursive
...
make[1]: Leaving directory `/home/slightly/http-tunnel/httptunnel-3.0.5'
Code:
slightly@StinkyLinux:~/http-tunnel/httptunnel-3.0.5$ make install
Making install in port
...
/bin/sh ./mkinstalldirs /usr/local/bin
  /usr/bin/install -c  htc /usr/local/bin/htc
/usr/bin/install: reguläre Datei „/usr/local/bin/htc“ kann nicht angelegt werden: Keine Berechtigung
  /usr/bin/install -c  hts /usr/local/bin/hts
/usr/bin/install: reguläre Datei „/usr/local/bin/hts“ kann nicht angelegt werden: Keine Berechtigung
make[2]: *** [install-binPROGRAMS] Fehler 1
make[2]: Leaving directory `/home/slightly/http-tunnel/httptunnel-3.0.5'
make[1]: *** [install-am] Fehler 2
make[1]: Leaving directory `/home/slightly/http-tunnel/httptunnel-3.0.5'
make: *** [install-recursive] Fehler 1
 
Zuletzt bearbeitet:
Versuch mal mit der Original-Datei von Oliver
Code:
./hts
. Standardmässig wird der aktuelle Pfad nicht mit durchsucht.

Zum Kompilieren:

Zum ersten hast Du offenbar keine Pfade zur Toolchain übergeben. Deswegen wird wohl ein normales i386-Binary für den Hostsystem erstellt.

Mit 'make install' versuchst Du, das binary im Hostsystem (dem Stinkylinux in Deinem Fall) zu installieren. Das klappt natürlich nicht, ist aber ja auch nicht notwendig.
 
Danke, aber es fehlt trotzdem noch etwas bzw. ich vermute, dass Olivers htc noch für den 2.4er Kernel gebaut war, was jetzt natürlich nicht mehr zum 2.6er passt. Oder schreibe ich gerade Blödsinn?
Code:
/var/tmp # ./hts
./hts: can't resolve symbol '__uClibc_start_main'
Das ist das hts von Oliver aus seinem o.g. Beitrag.

Die Toolchain habe ich nun mit "make sources; make toolchain" im "freetz-trunk" Verzeichnis erstellt.
Wie binde ich die Toolchain in den Pfad ein?
Sorry, das ist absolutes Neuland für mich, daher habe ich nicht so die Ahnung von der Syntax.
 
Zuletzt bearbeitet:
Schau mal im Wiki nach, das stehts. Kurz (eventuell den Pfad zu deinem freetz anpassen):
Code:
export PATH=~/freetz-trunk/toolchain/target/bin:$PATH
./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux  CC="mipsel-linux-gcc" CFLAGS="-Os -pipe -march=4kc -Wa,--trap"

Jörg
 
Ok, hier nochmal mein Vorgehen von ganz vorne:

1. Aktuellste dev. rev. von freetz-trunk ganz frisch herunterladen (wobei "dl" bereits eine Ebene darüber als "downloads" existiert, so dass nicht immer alle Pakete neu heruntergeladen werden müssen):
Code:
slightly@StinkyLinux:~$ svn co http://svn.freetz.org/trunk freetz-trunk
slightly@StinkyLinux:~$ cd freetz-trunk/
slightly@StinkyLinux:~/freetz-trunk$ ln -s ../downloads/ dl
2. Einrichtung der FW-Parameter:
Code:
slightly@StinkyLinux:~/freetz-trunk$ make menuconfig
Wie relevant ist die Auswahl der ganzen Parameter für die anschließende Erstellung der toolchain?
Ich habe natürlich meine Box (FB 7170) gewählt, aber alle anderen kannich hier ja nicht aufzählen.

3. Erstellung der toolchain:
Code:
slightly@StinkyLinux:~/freetz-trunk$ make toolchain
Das Resultat sieht dann schon einmal ganz gut aus:
Code:
FINISHED: toolchain/kernel/ - glibc compiler for the kernel
          toolchain/target/ - uClibc compiler for the userspace
4. Nun entpacke ich die HTTP Tunnel sources nach ~/freetz-trunk und wechsle dorthin:
Code:
slightly@StinkyLinux:~/freetz-trunk$  cd httptunnel-3.0.5$
5. Nun kann ich den MIPS-Compiler zum Pfad hinzufügen:
Code:
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ export PATH=~/freetz-trunk/[COLOR=black]tool[/COLOR]chain/target/bin:$PATH
Warum kommt hier beim Überprüfen von $PATH die Meldung, dass etwas nicht gefunden wird? Ist es die toolchain? Ich hoffe nicht...
Code:
slightly@StinkyLinux:~/freetz-trunk$ cat $PATH
cat: /home/slightly/freetz-trunk/toolchain/target/bin:/home/slightly/freetz-trunk/toolchain/kernel/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games: Datei oder Verzeichnis nicht gefunden
6. Dann werden noch die Optionen für ./configure festgelegt:
Code:
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux
Hier sieht das Resultat auch ok aus. Die letzten Zeilen lauten:
Code:
creating ./config.status
creating Makefile
creating port/Makefile
creating port/sys/Makefile
creating config.h

7. Dann führe ich noch "make" aus, so dass "hts" erzeugt wird:
Code:
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ make

8. Beim Aufruf von hts auf der Box (dorthin kopiert) kommt leider eine Fehlermeldung:
Code:
/var/tmp # ./hts   
./hts: line 1: syntax error: "(" unexpected
 
Zuletzt bearbeitet:
Du solltest schon target (ein besserer Name wäre userspace) verwenden. Das Verzeichnis kernel enthält die Toolchain um den Kernel zu erstellen.
 
... "target" ist ein Link, der (aktuell bei mir) auf "build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc" verweist:
Code:
joerg@linux-l63w:/home/joerg> ls -l freetz-trunk/toolchain/
insgesamt 16
drwxr-xr-x 4 joerg users 4096 13. Mai 13:03 build
-rw-r--r-- 1 joerg users 5959 31. Mai 15:38 Config.in
lrwxrwxrwx 1 joerg users   40 31. Mai 15:40 kernel -> build/gcc-3.4.6/mipsel-unknown-linux-gnu
drwxr-xr-x 5 joerg users 4096 31. Mai 15:38 make
lrwxrwxrwx 1 joerg users   49 31. Mai 15:40 target -> build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc
joerg@linux-l63w:/home/joerg>

Letztlich geht es darum, dass die mips-Programme gefunden werden. Du musst danach nochmal ein "cofigure" mit den Parametern oben machen, und dann erst das make damit erst ein korrektes Makefile erzeugt wird und damit dann das korrekte Programm...

Jörg

EDIT: So, gerade mal selbst getestet, ganz so wie oben angegeben lief es bei mir mit dem stable-source nicht, Aber so:
Code:
rm config.status config.cache
export CC="mipsel-linux-gcc"; ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux
make
mipsel-linux-strip hts htc
 

Anhänge

  • bins.tgz
    32.6 KB · Aufrufe: 27
  • bins_3.3.tgz
    33.9 KB · Aufrufe: 26
Zuletzt bearbeitet:
Danke für Eure Hilfe!

Könnt Ihr Euch meinen letzten Post oben bitte noch einmal anschauen, da ich dort noch einges editiert habe?

Leider läuft es noch nicht, aber Eure letzten Tipps schaue ich mir noch einmal an.

Nur wie gesagt wäre es nett, wenn Ihr mir noch sagen könntet, was bei meinen o.g. Schritten definitiv falsch war.
Fehlt z.B. noch folgendes?
Code:
slightly@StinkyLinux:~/freetz-trunk$ make libs
slightly@StinkyLinux:~/freetz-trunk$ make sources
Bei "make sources" kommt folgende Fehlermeldung - ist das relevant?
Code:
touch: kann „source/syslogd-cgi-0.2.3/.unpacked“ nicht berühren: Datei oder Verzeichnis nicht gefunden
make: *** [source/syslogd-cgi-0.2.3/.unpacked] Fehler 1
Nochmals vielen Dank!

PS:
Code:
slightly@StinkyLinux:~/freetz-trunk/toolchain/kernel -> build/gcc-3.4.6/mipsel-unknown-linux-gnu
slightly@StinkyLinux:~/freetz-trunk/toolchain/target -> build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc
Ist ok, oder?

Folgendes klappt leider nicht, wobei ich auch sagen muss, dass ich von dieser Materie nichts verstehe:
Code:
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ mipsel-linux-strip hts htc
mipsel-linux-strip: Unable to recognise the format of the input file `hts'
mipsel-linux-strip: Unable to recognise the format of the input file `htc'
 
Zuletzt bearbeitet:
Da wird der falsche Compiler genommen. Das kannst du sehen, wenn du auf dem PC "file hts" eingibst.

MfG Oliver
 
Hallo Oliver,

sicherlich ist das der richtige Wink, aber ich verstehe leider noch nicht so viel davon, um das Problem zu lösen.
Wo wird festgesetzt, welcher Compiler verwendet wird?

Code:
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ file hts
hts: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, not stripped
Habe ich es richtig verstanden, dass der falsche Compiler die sourcen für die falsche Plattform (nämlich offenbar Intel 80386 statt Mipsel) kompiliert?

Mit dem o.g. "./configure" sollte doch die richtige Plattform bzw. der richtige Compiler festgelegt werden, oder?
Code:
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux
Dann...
Code:
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ rm config.status config.cache
slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ export CC="mipsel-linux-gcc"; ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c

...

slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ make
make  all-recursive
make[1]: Entering directory `/home/slightly/freetz-trunk/httptunnel-3.0.5'
Making all in port
make[2]: Entering directory `/home/slightly/freetz-trunk/httptunnel-3.0.5/port'
Making all in sys
make[3]: Entering directory `/home/slightly/freetz-trunk/httptunnel-3.0.5/port/sys'
make[3]: Für das Ziel »all« ist nichts zu tun.
make[3]: Leaving directory `/home/slightly/freetz-trunk/httptunnel-3.0.5/port/sys'
make[3]: Entering directory `/home/slightly/freetz-trunk/httptunnel-3.0.5/port'
make[3]: Für das Ziel »all-am« ist nichts zu tun.
make[3]: Leaving directory `/home/slightly/freetz-trunk/httptunnel-3.0.5/port'
make[2]: Leaving directory `/home/slightly/freetz-trunk/httptunnel-3.0.5/port'
make[2]: Entering directory `/home/slightly/freetz-trunk/httptunnel-3.0.5'
make[2]: Leaving directory `/home/slightly/freetz-trunk/httptunnel-3.0.5'
make[1]: Leaving directory `/home/slightly/freetz-trunk/httptunnel-3.0.5'

...

slightly@StinkyLinux:~/freetz-trunk/httptunnel-3.0.5$ mipsel-linux-strip hts htc
mipsel-linux-strip: Unable to recognise the format of the input file `hts'
mipsel-linux-strip: Unable to recognise the format of the input file `htc'
 
Zuletzt bearbeitet:
EDIT: So, gerade mal selbst getestet, ganz so wie oben angegeben lief es bei mir mit dem stable-source nicht, Aber so:
Code:
rm config.status config.cache
export CC="mipsel-linux-gcc"; ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux
make
mipsel-linux-strip hts htc

Deine angehängten bins funktionieren einwandfrei!
icon14.gif


Nur möchte ich trotzdem noch lernen, wie ich mit meiner eigenen Toolchain das selbst kompilieren kann.
Und momentan verstehe ich noch :confused: (s.o.).


Es wäre für mich äußerst hilfreich, wenn Ihr mir schreiben könntet, was bei den oben von mir in meinem Beitrag #5 beschriebenen Schritten falsch oder evtl. in der falschen Reihenfolge ist. Danke!
 
Poste doch mal ein Logfile von dem ganzen Vorgang. Dann können wir dir auch sagen wo es hakt.

MfG Oliver
 
Danke, aber jetzt hat es geklappt. Ich weiß noch nicht, wo ich einen Fehler gemacht hatte, aber vielleicht finde ich das auch noch heraus.
Nochmals vielen Dank Euch allen für die tatkräftige Unterstützung!
Mal sehen, was ich noch so selbst kompilieren kann...

Darf ich dieses Paket eigentlich für Freetz anbieten, ich meine freetz-trunk?
Wenn es erlaubt ist und ich herausgefunden habe, wie das gemacht wird, wäre das meine erste aktive Beteiligung an Freetz. ;)

Wenn cih es richtig verstanden habe, muss das binary "hts" nach "./root/usr/bin/", um nach dem FW-Update auf der Box in "/usr/bin/" zu landen. Aber am besten wäre es, wenn man "hts" bei "make menuconfig" auswählen könnte.

Könnt Ihr mir bitte mal noch einen Startpunkt zum Einlesen nennen, wie man etwas für Freetz entwickelt?
Dieses Wiki ist wohl nicht das, was ich benötige, oder?
Gerne würde ich "hts" für die FB 7170 als "binary-only" anbieten, da ich mich mit dem WebGUI noch gar nicht auskenne.

Schönes Wochenende!

EDIT:
Das Binary von "hts" für die FB 7170 habe ich im ersten Beitrag hier im Thread angehängt.
 
Zuletzt bearbeitet:
[...snip...]
make[3]: Für das Ziel »all« ist nichts zu tun.
[...snip...]
In diesen Zeilen lag wohl dein Problem. Ein vorheriges "make clean" wäre noch erforderlich gewesen, denn so war zwar das "Makefile" richtig, aber da die Dateien schon da waren, wurden sie nicht neu gebaut.

Jörg
 
Danke, Jörg, für den Hinweis!
Ich bin halt noch ziemlicher Linux-Laie, aber mit einem kleinen Mini-Projekt wie diesem hier könnte ich noch vieles dazulernen.

PS:
Im ersten Beitrag habe ich das "hts" binary und noch ein paar Hintergrundinfos eingefügt.
Falls etwas gegen die Veröffentlichung dieses binaries hier im Forum spricht, bitte ich die Mods/Admins um Löschung.
 
Zuletzt bearbeitet:
Im Freetz gibt es ein Verzeichnis make/empty, welches ein leeres Beispielpaket darstellt. Das kannst Du einfach nach make/hts kopieren, und dann entsprechend anpassen. Zum Vergleich kannst Du Dir auch die jeweiligen Dateien in den anderen Unterverzeichnissen von make anschauen, um zu sehen, wie das bei anderen Paketen aussieht.
 
... und dann, je nachdem wie "weit" du das treiben möchtest, hier ist im Wiki eine Anleitung, eine GUI dazu zu entwickeln...

Jörg
 
ROTFL. Sorry, ich hab das irgendwie so verstanden. Das ist, wenn man zu viel denkt :). Ok, ao, dann nimm 'empty' oder irgend ein anderes Paket als Vorlage.
 
Wobei ein template vielleicht eine echt gute Idee wäre, oder?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.