很久之前找到的小脚本,比较方便,可以基于此,自己在里面写各种逻辑,比如之前我是给改成做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="
`find . -type f -exec ls -l {} \; | awk '{print $1,$2,$3,$4,$5,$6,$7,$8,"" $9 "
"}'`"
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
另外,也可以看看几年前的这篇。
The post 记一下这个bash的http server first appeared on I am LAZY bones?.