记一下这个bash的http server
很久之前找到的小脚本,比较方便,可以基于此,自己在里面写各种逻辑,比如之前我是给改成做30x的跳转(根据输出参数,跳转到不同url),还是很合适的。
最近又想用,发现几乎找不到了,很多收藏的链接都已经失效了,于是觉得还是应该在自己能把控的地方记录下,把代码帖这个里吧,这个的效果和 python 的 SimpleHTTPServer 有点类似。
注意,这个脚本没有任何安全性可言,可以通过..
访问到上级目录,也可能通过``
执行任意指令,所以最好别长期开着。这只是个例子,处理逻辑自己改。
#!/usr/bin/env bash while true do f="/tmp/out$RANDOM" mkfifo "$f" trap "rm -f $f" EXIT cat "$f" | nc -4l 8000 > >( export REQUEST= while read -r line do line=$(echo "$line" | tr -d '\r\n') echo $line if echo "$line" | grep -qE '^GET /' ; then REQUEST=$(echo "$line" | cut -d ' ' -f2) elif [ -z "$line" ] ; then ( #这里面写自己的处理逻辑,这是一个很丑的例子。 if [ "$REQUEST" == "/" ] ; then Message_Body="<!DOCTYPE html><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8></head><body> `find . -type f -exec ls -l {} \; | awk '{print $1,$2,$3,$4,$5,$6,$7,$8,"<a href=\\"/" $9 "\\">" $9 "</a><br>"}'`</body></html>" else Message_Body="`cat "./$REQUEST"`" fi echo -en "HTTP/1.0 200 OK\nContent-Length: ${#Message_Body}\n\n$Message_Body" ) > "$f" fi done ) rm -f "$f" echo done, next request. done |
另外,也可以看看几年前的这篇。
依云 在 2018年03月12日 09:58 说:【 】
骨头终于出来除草啦~
HTTP 静态文件我现在用的 darkhttpd,支持并发和断点续传,单个 C 文件,方便使用。
bones7456 在 2018年03月15日 09:10 说:【 】
是呀,离上一篇文章,居然有6年半了。更奇怪的是,居然还有读者,哈哈。
trevorfox 在 2018年03月17日 02:59 说:【 】
Thank you so much Allie!! kisses