2018年 03月 的归档
记一下这个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 |
另外,也可以看看几年前的这篇。