mirror of
https://github.com/sigmasternchen/ShellSpider
synced 2025-03-16 00:19:06 +00:00
SSL support
This commit is contained in:
parent
d96fb0fbe9
commit
f31c142167
2 changed files with 47 additions and 22 deletions
|
@ -1,6 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
settingsfile=$1
|
||||
ssl="$2"
|
||||
|
||||
settingsfile="$1"
|
||||
eval "$(cat $settingsfile)" # declare settings array
|
||||
|
||||
. misc.sh
|
||||
|
@ -61,7 +63,7 @@ while true; do
|
|||
if test $first = 1; then
|
||||
server[requestMethod]="$(echo "$header" | awk '{ print $1 }')"
|
||||
server[http]="$(echo "$header" | awk '{ print $3 }' | awk -F/ '{ print $2} ')"
|
||||
server[https]="off"
|
||||
server[https]="$ssl"
|
||||
server[serverProtocol]="$(echo "$header" | awk '{ print $3 }')"
|
||||
server[request_unchecked]=$(echo "$header" | awk '{ print $2 }')
|
||||
server[requestURI]="$(realpath -sm "${server[request_unchecked]}")"
|
||||
|
@ -329,7 +331,7 @@ fi
|
|||
length=$(printf "%s" "$content" | wc -c)
|
||||
|
||||
if test "${settings[verbose]}" -ge "0"; then
|
||||
echo "$(date --rfc-3339=ns) - ${server[remoteAddress]}:${server[remotePort]} - ${headers[Host]}${server[queryURI]} - $type - $status - $length bytes" 1>&2
|
||||
echo "$(date --rfc-3339=ns) - ${server[remoteAddress]}:${server[remotePort]} - ${headers[Host]}${server[requestURI]} - $type - $status - $length bytes" 1>&2
|
||||
fi
|
||||
|
||||
echo -en "HTTP/1.1 $status $(./statusString.sh $status)\r\n"
|
||||
|
|
61
server.sh
61
server.sh
|
@ -3,18 +3,31 @@
|
|||
EXIT_FAILURE=1
|
||||
EXIT_SUCCESS=0
|
||||
|
||||
port=-1
|
||||
progname="server"
|
||||
|
||||
home="./home/"
|
||||
name="localhost"
|
||||
admin="admin@localhost"
|
||||
|
||||
httpPort=-1
|
||||
httpsPort=-1
|
||||
cert="./server.pem"
|
||||
|
||||
help() {
|
||||
cat << EOF
|
||||
usage: $progname [OPTIONS] --port=PORT
|
||||
usage: $progname [OPTIONS]
|
||||
|
||||
Options:
|
||||
-p, --port=PORT set port
|
||||
-h, --home=HOME set home directory
|
||||
-v, --verbose set to verbose mode
|
||||
-q, --quiet don't output anything
|
||||
-p, --http-port=PORT set unencrypted port
|
||||
-s, --https-port=PORT set encrypted port
|
||||
-c, --cert=CERT set SSL certificate (pem format) (default: ./server.pem)
|
||||
-h, --home=HOME set home directory (default: ./home/)
|
||||
-n, --name=NAME set the name of the server (e.g. example.com) (default: localhost)
|
||||
--admin=ADMIN set the admin mail address (default: admin@localhost)
|
||||
-v, --verbose set to verbose mode
|
||||
-q, --quiet don't output anything (not implemented)
|
||||
|
||||
Ether an encrypted or an unencrypted port (or both) has to be given.
|
||||
EOF
|
||||
}
|
||||
|
||||
|
@ -27,20 +40,18 @@ echoOnVerbose() {
|
|||
|
||||
progname="$0"
|
||||
|
||||
OPTS=$(getopt -o "p:vqh:n:" -l "port:,verbose,quiet,home:,name:admin:" -- $@)
|
||||
OPTS=$(getopt -o "p:vqh:n:s:c:" -l "http-port:,verbose,quiet,home:,name:,admin:,https-port:,cert:" -- $@)
|
||||
if test $? != 0; then
|
||||
exit $EXIT_FAILURE
|
||||
fi
|
||||
|
||||
eval set -- "$OPTS"
|
||||
|
||||
home="./home/"
|
||||
name="localhost"
|
||||
admin="admin@localhost"
|
||||
|
||||
while true; do
|
||||
case "$1" in
|
||||
-p|--port) port=$2; shift 2;;
|
||||
-p|--http-port) httpPort=$2; shift 2;;
|
||||
-s|--https-port) httpsPort=$2; shift 2;;
|
||||
-c|--cert) cert=$2; shift 2;;
|
||||
-v|--verbose) verboselevel=$(($verboselevel+1)); shift;;
|
||||
-q|--quiet) verboselevel=-1; shift;;
|
||||
-h|--home) home=$2; shift 2;;
|
||||
|
@ -50,14 +61,20 @@ while true; do
|
|||
esac
|
||||
done
|
||||
|
||||
if test "$port" -lt 1; then
|
||||
if test "$httpPort" -lt 1 -a "$httpsPort" -lt 1; then
|
||||
help
|
||||
exit $EXIT_FAILURE
|
||||
fi
|
||||
|
||||
settingsfile="/dev/shm/wserver-$$"
|
||||
settingsfile="/dev/shm/wserver-$$.settings"
|
||||
|
||||
logfile="/dev/shm/wserver-$$.log"
|
||||
|
||||
echo -n > "$logfile"
|
||||
|
||||
declare -A settings
|
||||
settings[serverDirectory]="$(pwd)"
|
||||
settings[logFile]="$logfile"
|
||||
settings[home]="$home"
|
||||
settings[name]="$name"
|
||||
settings[admin]="$admin"
|
||||
|
@ -69,9 +86,15 @@ settings[server]="ShellSpider V1"
|
|||
settings[index]="true"
|
||||
declare -p settings > $settingsfile
|
||||
|
||||
echo "Starting... "
|
||||
socat $(echoOnVerbose 2 "-vv") tcp-listen:$port,reuseaddr,fork SYSTEM:"./response.sh $settingsfile" > /dev/null
|
||||
|
||||
if test $? != 0; then
|
||||
exit $EXIT_FAILURE
|
||||
if test ! "$httpPort" -lt 1; then
|
||||
echo "Starting unencrypted on port $httpPort ..."
|
||||
socat $(echoOnVerbose 2 "-vv") tcp-listen:$httpPort,reuseaddr,fork SYSTEM:"./response.sh $settingsfile off" > /dev/null &
|
||||
fi
|
||||
if test ! "$httpsPort" -lt 1; then
|
||||
echo "Starting encrypted on port $httpsPort ..."
|
||||
socat $(echoOnVerbose 2 "-vv") openssl-listen:$httpsPort,verify=0,cert="$cert",reuseaddr,fork SYSTEM:"./response.sh $settingsfile on" > /dev/null &
|
||||
fi
|
||||
|
||||
while true; do
|
||||
tail -f $logfile
|
||||
done
|
||||
|
|
Loading…
Reference in a new issue