I am LAZY bones? AN ancient AND boring SITE

记一下这个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月08日 16:13

本文章发表于: 2018年03月08日 16:12 | 所属分类:CLI软件. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

3 个评论 关于: “记一下这个bash的http server”

  1. 依云 在 2018年03月12日 09:58 说:回复

    骨头终于出来除草啦~

    HTTP 静态文件我现在用的 darkhttpd,支持并发和断点续传,单个 C 文件,方便使用。

    • bones7456 在 2018年03月15日 09:10 说:回复

      是呀,离上一篇文章,居然有6年半了。更奇怪的是,居然还有读者,哈哈。

  2. trevorfox 在 2018年03月17日 02:59 说:回复

    Thank you so much Allie!! kisses

发表评论