MISPプロセッサを搭載した非常に小さな組み込みシステムで、非常にシンプルなWebサーバーが必要です。最も単純なサーバーは、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
そしてbusybox:
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接続用の組み込み機能を含めることはできません。Wikipediaの コマンドシェルの比較 を参照してください。
bash
シェルには、TCPおよび特定のファイル名の特別な処理を備えたUDPクライアント機能があります。たとえば、/dev/tcp/<hostname>/<port>
コマンドラインの入出力リダイレクトでbash
を指定したホストとポートに接続し、その接続を入力ソースまたは出力宛先として使用します。しかし、bash
はポートでリッスンできません。TCPサーバーとして機能することはできません。
zsh
シェルはクライアントとサーバーの両方の機能を備えていますが、TCPのみを使用しています。一方、zsh
は単純なシェルではありませんではありません。これは、おそらく最も機能が豊富な(したがって最大の)シェルです。私が知る限り、一般的なUNIXスタイルのシェル。小さな組み込みシステムでzsh
を見つけることは、かなりありそうにありません。
私が回答を書いているときに、コメントで「lighthttpd
」バイナリが見つかったことを指摘しました。たぶんこれ? https://www.lighttpd.net/