Мне нужен очень простой веб-сервер в очень маленькой встроенной системе с процессором MISP. Я думал, что простейшим сервером может быть сценарий оболочки, слушающий TCP-порт.
Проблема в том, что в системе нет даже perl. Только базовая оболочка /bin/sh
. Я искал в Интернете «как слушать порт из оболочки», но все ответы, которые я нашел, относились к некоторым другим инструментам, таким как nc
, которого у меня нет.
Это вообще возможно сделать?
В системе, это маршрутизатор, установлен busybox и некоторые другие двоичные файлы в /bin
каталог, это:
#ls /bin
chown df fatattr gzip login mount
ping rm shuf touch usleep
busybox comgt dmesg fgrep hostname ls
mv ping6 rmdir sleep true vi
busybox-new cp echo flock ip mkdir
netstat printf sdparm split umount watch
cat date egrep grep kill mknod
nice ps sed sync uname wget
chmod dd false gunzip ln more
pidof pwd sh tar unlink zcat
И занятая коробка:
Currently defined functions:
[, arp, ash, awk, basename, busybox, cat, chmod, chown, cp, crond,
cut,date, dd, df, dirname, dmesg, du, echo, egrep, env, expr, false,
fdisk, fgrep, find, free, ftpget, getty, grep, head, hexdump,
hostname, ifconfig, init, insmod, ip, kill, killall, klogd, ln,
login, ls, lsmod, md5sum, mkdir, mknod, mkswap, modprobe, more,
mount, mv, netstat, nslookup, passwd, pidof, ping, ping6, ps, pwd,
readlink, reboot, renice, rm, rmdir, rmmod, route, sed, seq, sh,
sleep, sort, swapoff, swapon, sync, sysctl, syslogd, tail, tar,
taskset, test, tftp, time, top, touch, tr, traceroute, true, udhcpd,
umount, uname, unzip, uptime, usleep, vi, watch, wc, which,
xargs, yes
У него есть и другие вещи в других местах из PATH, но нет nc
нет httpd
или что-то вроде того
Нет, базовая оболочка Bourne / POSIX (/bin/sh
) нельзя ожидать, что он будет включать какие-либо встроенные средства для TCP-соединений. Видеть сравнение командных оболочек в Википедии.
В bash
оболочка будет иметь возможности клиента TCP и UDP со специальной обработкой определенных имен файлов: например, используя /dev/tcp/<hostname>/<port>
при перенаправлении ввода / вывода в командной строке вызывает bash
подключиться к указанному хосту и порту и использовать соединение в качестве источника ввода или назначения вывода. Но bash
не может прослушивать порт: он не может действовать как TCP-сервер.
В zsh
оболочка будет иметь как клиентские, так и серверные функции, но только с использованием TCP. С другой стороны, zsh
является не простая оболочка: это, вероятно, самая многофункциональная (и, следовательно, самая большая) из распространенных оболочек в стиле unix, насколько мне известно. обнаружение zsh
на небольшой встраиваемой системе это маловероятно.
Пока я писал свой ответ, вы указали в комментариях, что нашли "lighthttpd
"бинарный. Может быть, это?" https://www.lighttpd.net/