我需要一个非常简单的 Web 服务器,它安装在一个非常小的嵌入式系统上,带有一个 MISP 处理器。我认为最简单的服务器可能是一个监听 TCP 端口的 shell 脚本。
问题是系统甚至没有 perl。只有一些基本的 shell /bin/sh
。我在网上搜索“如何从 shell 监听端口”,但我找到的答案都提到了一些其他工具,例如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
或类似的东西
答案1
不,基本的 Bourne/POSIX shell ( /bin/sh
) 不能包含任何用于 TCP 连接的内置功能。请参阅命令 shell 的比较在维基百科中。
该bash
shell 具有 TCP 和 UDP 客户端功能,并对某些文件名进行特殊处理:例如,/dev/tcp/<hostname>/<port>
在命令行上使用输入/输出重定向会导致bash
连接到指定的主机和端口,并将该连接用作输入源或输出目标。但bash
无法侦听端口:它不能充当 TCP 服务器。
该shell 将同时具有客户端和服务器功能,但仅使用zsh
TCP。另一方面,zsh
不是一个简单的 shell:据我所知,它可能是功能最丰富(因此也是最大的)的常见 unix 风格 shell。zsh
在小型嵌入式系统上找到它的可能性很小。
在我写答案的时候,你在评论中指出你发现了一个“ lighthttpd
”二进制文件。可能是这个吗?https://www.lighttpd.net/