Networking

是否可以僅使用 shell 偵聽 TCP 埠而無需其他工具?

  • October 2, 2019

我需要在帶有 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/

引用自:https://serverfault.com/questions/986506