Networking
是否可以僅使用 shell 偵聽 TCP 埠而無需其他工具?
我需要在帶有 MISP 處理器的非常小的嵌入式系統上安裝一個非常簡單的 Web 伺服器。我認為最簡單的伺服器可能是一個監聽 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 的其他位置也有一些其他的東西,但是 no
nc
, nohttpd
或類似的東西
不,基本的 Bourne/POSIX shell (
/bin/sh
) 不能包含任何用於 TCP 連接的內置工具。請參閱Wikipedia中命令 shell 的比較。shell將
bash
具有 TCP 和 UDP 客戶端功能,並對某些文件名進行特殊處理:例如,/dev/tcp/<hostname>/<port>
在命令行上使用輸入/輸出重定向會導致bash
連接到指定的主機和埠,並將連接用作輸入源或輸出目標。但bash
不能偵聽埠:它不能充當 TCP 伺服器。shell將
zsh
同時具有客戶端和伺服器功能,但僅使用 TCP。另一方面,zsh
它不是一個簡單的 shell:據我所知,它可能是常見的 unix 樣式 shell 中功能最豐富的(也是最大的)。在小型嵌入式系統上找到zsh
是不太可能的。在我寫答案時,您在評論中指出您找到了一個“
lighthttpd
”二進製文件。也許是這個?https://www.lighttpd.net/