Comment Comment by goombacloud When socat is around a simple server can also be constructed with it: tee /tmp/server > /dev/null <<'EOF' #!/bin/bash set -euo pipefail SERVE="$1" TYPE="$2" read -a WORDS if [ "${#WORDS[@]}" != 3 ] || [ "${WORDS[0]}" != "GET" ]; then echo -ne "HTTP/1.1 400 Bad request\r\n\r\n"; exit 0 fi # Subfolders are not supported for security reasons as this avoids having to deal with ../../ attacks FILE="${SERVE}/$(basename -- "${WORDS[1]}")" if [ -d "${FILE}" ] || [ ! -e "${FILE}" ]; then echo -ne "HTTP/1.1 404 Not found\r\n\r\n" ; exit 0 fi echo -ne "HTTP/1.1 200 OK\r\n" echo -ne "Content-Type: ${TYPE};\r\n" LEN=$(stat -L --printf='%s\n' "${FILE}") echo -ne "Content-Length: ${LEN}\r\n" echo -ne "\r\n" cat "${FILE}" EOF chmod +x /tmp/server # switch from "text/plain" to "application/octet-stream" for file downloads socat TCP-LISTEN:8000,reuseaddr,fork SYSTEM:'/tmp/server /tmp/ text-plain' # test: curl -v http://localhost:8000/server parent goombacloud 2 years ago