Быстрая расшарка файлов с таблетки через http сервер в одну строку на bash
by dikБлагодаря Alexey Sveshnikov и jetxee а также волшебной сетевой утилите netcat, которая вследствие простоты и универсальности заслужила звание “щвейцарский армейский нож” мы имеем возможность быстрого созданий http сервера для раздачи файлов. При запуске скрипта, который умещается во всего одну строку bash, мы получаем лёгкий http сервер с листингом файлов той директории из которой он был запущен. Вот сам код :
true; while [ $? -eq 0 ];do nc -vlp 8080 -c'(r=read;e=echo;$r a b c;E=NOTYET;while [ ${#E} -gt 0 ];do $r E;E=`$e $E|tr -d "\r\n"`;done;f=`$e $b|sed 's/[^a-z0-9_.-]//gi'`;h="HTTP/1.0";o="$h 200 OK\r\n";c="Content";if [ -z $f ];then($e -e $o;ls|(while $r n;do if test -f ${n}; then $e "<a href=\"/$n\">$n</a><br>";fi;done););elif [ -f $f ];then $e -e "$o$c-Type: `file -ib $f`\n$c-Length: `stat -c%s $f`\n";cat $f;else $e -e "$h 404 Not Found\n\n404\n";fi)';done
Что необходимо ?
Устанавливаем netcat :
#apt-get -f install netcat
Качаем скрипт http.sh
Тот же самый скрипт с одной единственной правкой - из команды sed я убрал опцию i (независимость от регистра символов)
sed ’s/[^a-z0-9_.-]//g’
Размещаем его на таблетке в каталоге исполняемых файлов, /usr/bin/
Даём права на выполнение :
#chmod +x /usr/bin/http.sh
Затем, если нам необходимо, заходим в директорию которую необходимо расшарить и даём в ней команду
$http.sh
По ip адресу нашей таблетки и порту 8080 можем наблюдать в браузере листинг файлов, например http://192.168.1.10:8080/
вырубить - по Ctrl+C
А netcat на таблетке пригодится ещё и для проигрывания видео по сети. И для много много чего ещё.
P.S. Если ребята-создатели умеют так же забористо и метко ругаться матом на одном дыхании, как пишут на bash, такие нигде не пропадут :)
Tags: bash, files, http, httpd, internet, netcat, server, share, shell, tablet, test

September 15, 2007 at 16:41
Затея интересная, но на таблетке это не будет работать как минимум по 3м причинам:
1. Нет баша, а в скрипте есть башизмы
2. Нет stat
Nokia-N800-26:~# stat
-sh: stat: not found
3. Таблеточный sed(он же busybox) не понимает опцию i
Nokia-N800-26:~# echo ‘test’ | sed ’s/[^a-z0-9_.-]//gi’
sed: bad option in substitution expression
September 16, 2007 at 0:40
Ed : я же писал что убрал опцию i.
И всё тестировано - работает. Я эту статью писал после того как у себя попробовал. Может не на сто процентов как надо, но - функцию выполняет.
September 16, 2007 at 0:56
Да, согласен, недосмотрел. stat тоже можно убрать, все равно его нет на устройстве.
September 16, 2007 at 1:58
Я с ним еще поигрался, вот что получилось:
while true;do nc -p8080 -vnlc'r=read;e="echo -e";$r a b c;while [ -n "$a" ];do $r a;a=`$e $a|tr -d "\r\n"`;done;f=`$e $b|sed s/.//`;h="HTTP/1.0";o="$h 200 OK\r\n";[ -z $f ]&&($e $o;ls|while $r n;do [ -f $n ]&&$e "$n“;done)||([ -f $f ]&&($e “${o}Content-Type: `file -ib $f`\n”;cat $f)||$e “$h 404 \n\n404\n”)’;done
На таблетке по крайней мере работает. Кое-что даже получше, чем оригинал. Меньше на 100 с лишним байт :)
September 16, 2007 at 20:08
[…] библиотека скриптов для запуска на таблетке, (это и http от Ed и shelltube от Wall ) пора уже подготовить базу для их […]
September 16, 2007 at 20:20
Я его еще уменьшил до 328 байт. Пытался автору в блог закинуть, но он там как-то искорежился и еще ждет авторизации. Сюда кинуть?
September 16, 2007 at 20:39
Давай. Насчёт укладки в пакет - я то сам не соображаю ка .deb делать.
September 16, 2007 at 20:47
Лови:
while :;do nc -p8080 -vnlc'r=read;e="echo -e";$r a b c;while [ -n "`$e $a|tr -d "\r\n"`" ];do $r a;done;f=`$e $b|sed s/.//`;h="HTTP/1.0";z="404 Not Found\n";[ -z $f ]&&(ls|while $r n;do [ -f $n ]&&$e "$n“;done)||([ -f $f ]&&($e “$h 200 OK\r\nContent-Type: `file -ib $f`\n”;cat $f)||$e “$h $z\n$z”)’;done
Да там особо и нечего делать для такого случая - сборки-то нет никакой, только положить их в /usr/bin и все. Только вот по-хорошему нужно 2 разных пакета делать, но уж больно они маленькие получатся - по одному скрипту на каждый.
Или в один лучше, как думаешь? internet-tablet-scripts :)
September 16, 2007 at 20:55
Куда-то мой пост последний пропал. С последней версией кода. Я так старался :(
September 16, 2007 at 23:47
Пробовал несколько раз, с разными тэгами - ничего не вышло.
September 17, 2007 at 0:16
А предыдущий то коммент прошёл… Может на форум лучше ?
September 17, 2007 at 0:50
А ты не видишь мои посты?
Я использовал тэги code и pre - не помогло. После сабмита сообщения просто нет. может что-то не так делаю?
September 17, 2007 at 11:38
Тест :
а может быть просто code без pre : предыдущий то коммент прошёл. Может > это помешалоSeptember 17, 2007 at 11:39
Ещё тест :
while true;do nc -p8080 -vnlc'r=read;e="echo -e";$r a b c;while [ -n "$a" ];do $r a;a=`$e $a|tr -d "\r\n"`;done;f=`$e $b|sed s/.//`;h="HTTP/1.0";o="$h 200 OK\r\n";[ -z $f ]&&($e $o;ls|while $r n;do [ -f $n ]&&$e "$n“;done)||([ -f $f ]&&($e “${o}Content-Type: `file -ib $f`\n”;cat $f)||$e “$h 404 \n\n404\n”)’;doneSeptember 17, 2007 at 13:00
Ed : странным образом твои последние комменты вордпресс в спам определял. Ссори - только щас заметил. Один вариант коммента я публиканул - тот, не тот, не знаю…