#!/bin/bash # # a simple remote shell for m0n0wall # # run a script: # m0n0sh # # run a single command: # m0n0sh -c # # run interactive shell: # m0n0sh USER="admin" # username PASS="mono" # password IP="192.168.0.1" # m0n0wall ip address PROTO="http" # webgui port (http/https) PROMPT="m0n0sh # " URL="$PROTO://$IP/exec_raw.php?cmd=" WGET="wget -q -O- -t1 -T3 --http-user=$USER --http-passwd=$PASS $URL" die(){ echo "connection failed. ($PROTO://$USER:$PASS@$IP)" >&2 exit 1 } urlencode(){ echo "$@" | awk ' BEGIN { split ("1 2 3 4 5 6 7 8 9 A B C D E F", hextab, " ") hextab [0] = 0 for ( i=1; i<=255; ++i ) ord [ sprintf ("%c", i) "" ] = i + 0 } { encoded = "" for ( i=1; i<=length ($0); ++i ) { c = substr ($0, i, 1) if ( c ~ /[a-zA-Z0-9.-]/ ) { encoded = encoded c } else if ( c == " " ) { encoded = encoded "+" } else { lo = ord [c] % 16 hi = int (ord [c] / 16); encoded = encoded "%" hextab [hi] hextab [lo] } } print encoded }' } if [ "$1" = "-c" ]; then shift ${WGET}"$(urlencode "$@")" || die elif [ ! -z "$*" -a -f "$1" ]; then while read LINE; do [ -z "$LINE" ] || ${WGET}"$(urlencode "$LINE")" || die done < $1 else echo -n "$PROMPT" while read LINE; do [ -z "$LINE" ] || ${WGET}"$(urlencode "$LINE")" || die echo -n "$PROMPT" done fi