web-dev-qa-db-ja.com

追加のツールなしで、シェルでのみTCPポートをリッスンすることは可能ですか?

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の他の場所にもいくつかの他のものがありますが、nchttpd、またはそのようなものはありません

5
user907860

いいえ、基本的な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/

5
telcoM