167 lines
5.0 KiB
Bash
167 lines
5.0 KiB
Bash
|
#!/bin/bash
|
||
|
# -*- mode: sh; fill-column: 75; tab-width: 8; coding: utf-8-unix -*-
|
||
|
|
||
|
ROLE=proxy
|
||
|
#NO prog=proxy_export
|
||
|
. /usr/local/bin/usr_local_tput.bash || exit 2
|
||
|
|
||
|
[ -f /usr/local/bin/proxy_ping_lib.bash ] || \
|
||
|
{ ERROR missing /usr/local/bin/proxy_ping_lib.bash ; exit 1; }
|
||
|
# /sbin/ifconfig on Debian morons and /bin/ifconfig on Gentoo
|
||
|
|
||
|
# [ "$USER" != root ] && export PATH=/sbin:$PATH
|
||
|
|
||
|
## proxy_to_virbr1_15
|
||
|
proxy_to_virbr1_15 () {
|
||
|
if ifconfig | grep -q virbr1 ; then
|
||
|
PROXY_VIREXT_IP=$( ifconfig virbr1 | grep inet | sed -e 's/.*inet //' -e 's/ .*//' )
|
||
|
[ $? -eq 0 -a -n "$PROXY_VIREXT_IP" ] && \
|
||
|
PROXY_VIREXT_HOST=$( echo $PROXY_VIREXT_IP | sed -e 's/2$/15/' ) && \
|
||
|
[ -n "$PROXY_VIREXT_HOST" ] && \
|
||
|
export no_proxy="localhost,127.0.0.1,$PROXY_VIREXT_HOST" && \
|
||
|
export https_proxy=http://$PROXY_VIREXT_HOST:9128 && \
|
||
|
export socks_proxy=socks5://$PROXY_VIREXT_HOST:9050 && \
|
||
|
export TOR_SOCKS_HOST=$PROXY_VIREXT_HOST && \
|
||
|
export TOR_SOCKS_PORT=9050
|
||
|
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
## proxy_http_host_httpproxy
|
||
|
proxy_http_host_httpproxy () {
|
||
|
if netstat -nle4 | grep -q 127.0.0.1:3128 >/dev/null ; then
|
||
|
export http_proxy=http://127.0.0.1:3128
|
||
|
export https_proxy=http://127.0.0.1:3128
|
||
|
export RSYNC_PROXY=127.0.0.1:3128
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
proxy_https_host_selektor () { proxy_https_host_tor $* ; }
|
||
|
proxy_https_host_tor () {
|
||
|
if netstat -nle4 | grep -q 127.0.0.1:9128 >/dev/null ; then
|
||
|
export https_proxy=http://127.0.0.1:9128
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
proxy_socks_host_tor () {
|
||
|
local file=/etc/tor/torrc
|
||
|
if [ -f $file ] ; then
|
||
|
port=`grep -hi ^socksport /etc/tor/torrc /etc/tor/torrc-defaults | sed -e 's/SocksPort //' -e 's/.*://'`
|
||
|
[ -z "$port" ] && port=9050
|
||
|
export socks_proxy=socks5://127.0.0.1:$port
|
||
|
return 0
|
||
|
else
|
||
|
[ -n "$DEBUG" ] && [ "$DEBUG" -ne 0 ] && \
|
||
|
echo >&2 WARN: $prog $file not found
|
||
|
return 1
|
||
|
fi
|
||
|
if netstat -nle4 | grep -q 127.0.0.1:$port >/dev/null ; then
|
||
|
export socks_proxy=socks5://127.0.0.1:$port
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
proxy_socks_host_selektor () {
|
||
|
local file=/var/lib/tor/.SelekTOR/3xx/SelekTOR.xml
|
||
|
if [ -f $file ] ; then
|
||
|
port=`grep PREF_LISTENPORT $file | sed -e 's/.*">//' -e 's/<.*//'`
|
||
|
[ -z "$port" ] && port=9050
|
||
|
export socks_proxy=socks5://127.0.0.1:$port
|
||
|
return 0
|
||
|
else
|
||
|
[ -n "$DEBUG" ] && [ "$DEBUG" -ne 0 ] && \
|
||
|
echo >&2 WARN: $prog $file not found
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
# proxy_export_mode
|
||
|
proxy_export_mode () {
|
||
|
ppl=/usr/local/bin/proxy_ping_lib.bash
|
||
|
|
||
|
[ -z "$MODE" ] && MODE=$( $ppl proxy_ping_mode )
|
||
|
[ -z "$MODE" ] && MODE=host
|
||
|
|
||
|
# $0=bash
|
||
|
[ -n "$DEBUG" ] && [ "$DEBUG" -ne 0 ] && \
|
||
|
debug $prog MODE=$MODE ONE=$MODE 0=$0 "$#" "$@"
|
||
|
|
||
|
if [ "$MODE" = from -o "$MODE" = whonix ] ; then
|
||
|
export no_proxy="localhost,127.0.0.1,10.0.2.15"
|
||
|
proxy_http_host_httpproxy
|
||
|
proxy_to_virbr1_15
|
||
|
|
||
|
elif [ "$MODE" = client ] ; then
|
||
|
# inherit the environment
|
||
|
proxy_http_host_httpproxy
|
||
|
proxy_https_host_tor
|
||
|
proxy_socks_host_tor
|
||
|
|
||
|
elif [ "$MODE" = nat ] ; then
|
||
|
export no_proxy="localhost,127.0.0.1,10.0.2.2,10.0.2.0/24"
|
||
|
# get external
|
||
|
external=`grep external$ /etc/hosts|sed -e 's/ .*//'`
|
||
|
if [ $? -eq 0 ] && [ -n "$external" ] ; then
|
||
|
# get the ports and PROXY_MODE of the host
|
||
|
export socks_proxy=socks5://$external:9050
|
||
|
export http_proxy=http://$external:3128
|
||
|
export https_proxy=http://$external:9128
|
||
|
fi
|
||
|
|
||
|
elif [ "$MODE" = vda -o "$MODE" = workstation ] ; then
|
||
|
export no_proxy="localhost,127.0.0.1,10.152.152.10"
|
||
|
export socks_proxy=socks5://10.152.152.10:9050
|
||
|
proxy_http_host_httpproxy
|
||
|
export https_proxy=http://10.152.152.10:9128
|
||
|
|
||
|
elif [ "$MODE" = gateway ] ; then
|
||
|
|
||
|
export no_proxy="localhost,127.0.0.1,10.0.2.2,10.0.2.15"
|
||
|
export socks_proxy=socks5://10.0.2.15:9050
|
||
|
proxy_http_host_httpproxy
|
||
|
export https_proxy=http://10.0.2.15:9128
|
||
|
|
||
|
elif [ "$MODE" = selektor ] ; then
|
||
|
export http_proxy=http://127.0.0.1:3128
|
||
|
export https_proxy=http://127.0.0.1:9128
|
||
|
export no_proxy="localhost,127.0.0.1"
|
||
|
|
||
|
proxy_http_host_httpproxy
|
||
|
proxy_https_host_selektor
|
||
|
proxy_socks_host_selektor
|
||
|
|
||
|
elif true || [ "$MODE" = to -o "$MODE" = to_tor -o "$MODE" = tor ] ; then
|
||
|
|
||
|
export http_proxy=http://127.0.0.1:3128
|
||
|
export https_proxy=http://127.0.0.1:9128
|
||
|
export socks_proxy=http://127.0.0.1:9050
|
||
|
export no_proxy="localhost,127.0.0.1"
|
||
|
proxy_http_host_httpproxy
|
||
|
proxy_https_host_tor
|
||
|
proxy_socks_host_tor
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# echo $0 $* "$0" = 'tostop' -o
|
||
|
if [ "$0" = '-bash' -o "$0" = '/bin/bash' -o "$0" = 'bash' ] ; then
|
||
|
proxy_export_mode
|
||
|
[ -n "$DEBUG" ] && [ "$DEBUG" -ne 0 ] && \
|
||
|
env | grep proxy | while read line ; do debug $line ; done
|
||
|
elif [ -x /usr/bin/basename ] && \
|
||
|
[ `basename -- "$0"` = 'proxy_export.bash' -o \
|
||
|
"$( basename -- "`readlink $0`" )" = 'proxy_export.bash' ] ; then
|
||
|
|
||
|
if [ "$#" -eq 1 ] && [ "$1" = '-h' -o "$1" = '--help' ] ; then
|
||
|
echo USAGE: $0 && grep '^## ' $0 | sed -e 's/^## //'|sort
|
||
|
|
||
|
elif [ "$#" -eq 0 ] || [ "$#" -eq 1 -a $1 = mode ]; then
|
||
|
set -- proxy_export_mode
|
||
|
fi
|
||
|
|
||
|
eval "$@"
|
||
|
exit $?
|
||
|
fi
|