| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- #!/bin/bash
- clear
-
- SCPinst="/etc/VPS-MX/protocolos"
- mportas () {
- unset portas
- portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" |grep -v "COMMAND" | grep "LISTEN")
- while read port; do
- var1=$(echo $port | awk '{print $1}') && var2=$(echo $port | awk '{print $9}' | awk -F ":" '{print $2}')
- [[ "$(echo -e $portas|grep "$var1 $var2")" ]] || portas+="$var1 $var2\n"
- done <<< "$portas_var"
- i=1
- echo -e "$portas"
- }
- BARRA="\e[0;31m=====================================================\e[0m"
-
- pid_kill () {
- [[ -z $1 ]] && refurn 1
- pids="$@"
- for pid in $(echo $pids); do
- kill -9 $pid &>/dev/null
- done
- }
-
- det_py(){
- pidproxy3=$(ps x | grep "lacasitamx.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy3 ]] && pid_kill $pidproxy3
- echo -e "\033[1;91m SOCKS DETENIDO"
- rm /etc/VPS-MX/PortPD.log &>/dev/null
- rm -rf /etc/VPS-MX/protocolos/lacasitamx.py
-
- }
-
-
- pytho_py(){
- clear
- echo ""
- if [[ ! -e /etc/VPS-MX/fix ]]; then
- echo ""
- ins(){
- apt-get install python -y
- apt-get install python-pip -y
- }
- ins &>/dev/null && echo -e "INSTALANDO FIX" | pv -qL 40
- sleep 1.s
- [[ ! -e /etc/VPS-MX/fix ]] && touch /etc/VPS-MX/fix
- else
- echo ""
- fi
- clear
- echo ""
- echo ""
- msg -tit
- echo -e "$BARRA"
- echo -e "\033[1;31m HTTP | PYTHON | CUSTOM\033[0m"
- echo -e "$BARRA"
- #puerto a usar para proxy python
- while true; do
- echo -ne "\033[1;37m"
- read -p " ESCRIBE SU PUERTO: " proxycolor
- echo -e ""
- [[ $(mportas|grep -w "$proxycolor") ]] || break
- echo -e " ESTE PUERTO YA ESTÁ EN USO"
- unset proxycolor
- done
- #puerto local
- echo -e "$BARRA"
- while true; do
-
- echo -ne "\033[1;36m"
- read -p " Introduzca El puerto Local (22|443|80): " PORTLOC
- echo ""
- if [[ ! -z $PORTLOC ]]; then
- if [[ $(echo $PORTLOC|grep [0-9]) ]]; then
- [[ $(mportas|grep $PORTLOC|head -1) ]] && break || echo -e "ESTE PUERTO NO EXISTE"
- fi
- fi
- done
- #
- portlocal="$(mportas|grep $PORTLOC|awk '{print $2}'|head -1)"
- echo -e "$BARRA"
- read -p " Escribe el HTTP Response? (101|200|300): " encabezad
- tput cuu1 && tput dl1
- if [[ -z $encabezad ]]; then
- encabezad="200"
- echo -e " \e[31mResponse Default:\033[1;32m ${encabezad}"
- else
- echo -e " \e[31mResponse Elegido:\033[1;32m ${encabezad}"
- fi
- echo -e "$BARRA"
- echo -ne " Introduzca un texto para el status en HTML:\n \033[1;37m" && read mensage
- tput cuu1 && tput dl1
- if [[ -z $mensage ]]; then
- mensage="@lacasitamx"
- echo -e " \e[31mMensage Default: \033[1;32m${mensage} "
- else
- echo -e " \e[31mMensage: \033[1;32m ${mensage}"
- fi
- echo -e "$BARRA"
- [[ ! -e /etc/VPS-MX/protocolos/lacasitamx.py ]] && rm -rf /etc/VPS-MX/protocolos/lacasitamx.py
- #
- # Inicializando o Proxy
- (
- less << CPM > /etc/VPS-MX/protocolos/lacasitamx.py
- # -*- coding: utf-8 -*-
- import socket, threading, thread, select, signal, sys, time, getopt
- LISTENING_ADDR = '0.0.0.0'
- LISTENING_PORT = int("$proxycolor")
- PASS = ''
- BUFLEN = 4096 * 4
- TIMEOUT = 60
- DEFAULT_HOST = '127.0.0.1:$portlocal'
- msg = "HTTP/1.1 $encabezad $mensage\r\n\r\nHTTP/1.1 $encabezad !!!conexion exitosa!!!\r\n\r\n"
- RESPONSE = str(msg)
- class Server(threading.Thread):
- def __init__(self, host, port):
- threading.Thread.__init__(self)
- self.running = False
- self.host = host
- self.port = port
- self.threads = []
- self.threadsLock = threading.Lock()
- self.logLock = threading.Lock()
- def run(self):
- self.soc = socket.socket(socket.AF_INET)
- self.soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self.soc.settimeout(2)
- self.soc.bind((self.host, self.port))
- self.soc.listen(0)
- self.running = True
- try:
- while self.running:
- try:
- c, addr = self.soc.accept()
- c.setblocking(1)
- except socket.timeout:
- continue
- conn = ConnectionHandler(c, self, addr)
- conn.start()
- self.addConn(conn)
- finally:
- self.running = False
- self.soc.close()
- def printLog(self, log):
- self.logLock.acquire()
- print log
- self.logLock.release()
- def addConn(self, conn):
- try:
- self.threadsLock.acquire()
- if self.running:
- self.threads.append(conn)
- finally:
- self.threadsLock.release()
- def removeConn(self, conn):
- try:
- self.threadsLock.acquire()
- self.threads.remove(conn)
- finally:
- self.threadsLock.release()
- def close(self):
- try:
- self.running = False
- self.threadsLock.acquire()
- threads = list(self.threads)
- for c in threads:
- c.close()
- finally:
- self.threadsLock.release()
- class ConnectionHandler(threading.Thread):
- def __init__(self, socClient, server, addr):
- threading.Thread.__init__(self)
- self.clientClosed = False
- self.targetClosed = True
- self.client = socClient
- self.client_buffer = ''
- self.server = server
- self.log = 'Connection: ' + str(addr)
- def close(self):
- try:
- if not self.clientClosed:
- self.client.shutdown(socket.SHUT_RDWR)
- self.client.close()
- except:
- pass
- finally:
- self.clientClosed = True
- try:
- if not self.targetClosed:
- self.target.shutdown(socket.SHUT_RDWR)
- self.target.close()
- except:
- pass
- finally:
- self.targetClosed = True
- def run(self):
- try:
- self.client_buffer = self.client.recv(BUFLEN)
- hostPort = self.findHeader(self.client_buffer, 'X-Real-Host')
- if hostPort == '':
- hostPort = DEFAULT_HOST
- split = self.findHeader(self.client_buffer, 'X-Split')
- if split != '':
- self.client.recv(BUFLEN)
- if hostPort != '':
- passwd = self.findHeader(self.client_buffer, 'X-Pass')
-
- if len(PASS) != 0 and passwd == PASS:
- self.method_CONNECT(hostPort)
- elif len(PASS) != 0 and passwd != PASS:
- self.client.send('HTTP/1.1 400 WrongPass!\r\n\r\n')
- elif hostPort.startswith('127.0.0.1') or hostPort.startswith('localhost'):
- self.method_CONNECT(hostPort)
- else:
- self.client.send('HTTP/1.1 403 Forbidden!\r\n\r\n')
- else:
- print '- No X-Real-Host!'
- self.client.send('HTTP/1.1 400 NoXRealHost!\r\n\r\n')
- except Exception as e:
- self.log += ' - error: ' + e.strerror
- self.server.printLog(self.log)
- pass
- finally:
- self.close()
- self.server.removeConn(self)
- def findHeader(self, head, header):
- aux = head.find(header + ': ')
- if aux == -1:
- return ''
- aux = head.find(':', aux)
- head = head[aux+2:]
- aux = head.find('\r\n')
- if aux == -1:
- return ''
- return head[:aux];
- def connect_target(self, host):
- i = host.find(':')
- if i != -1:
- port = int(host[i+1:])
- host = host[:i]
- else:
- if self.method=='CONNECT':
- port = 443
- else:
- port = 80
- port = 8080
- port = 8799
- port = 3128
- (soc_family, soc_type, proto, _, address) = socket.getaddrinfo(host, port)[0]
- self.target = socket.socket(soc_family, soc_type, proto)
- self.targetClosed = False
- self.target.connect(address)
- def method_CONNECT(self, path):
- self.log += ' - CONNECT ' + path
- self.connect_target(path)
- self.client.sendall(RESPONSE)
- self.client_buffer = ''
- self.server.printLog(self.log)
- self.doCONNECT()
- def doCONNECT(self):
- socs = [self.client, self.target]
- count = 0
- error = False
- while True:
- count += 1
- (recv, _, err) = select.select(socs, [], socs, 3)
- if err:
- error = True
- if recv:
- for in_ in recv:
- try:
- data = in_.recv(BUFLEN)
- if data:
- if in_ is self.target:
- self.client.send(data)
- else:
- while data:
- byte = self.target.send(data)
- data = data[byte:]
- count = 0
- else:
- break
- except:
- error = True
- break
- if count == TIMEOUT:
- error = True
- if error:
- break
- def main(host=LISTENING_ADDR, port=LISTENING_PORT):
- print "\n:-------PythonProxy-------:\n"
- print "Listening addr: " + LISTENING_ADDR
- print "Listening port: " + str(LISTENING_PORT) + "\n"
- print ":-------------------------:\n"
- server = Server(LISTENING_ADDR, LISTENING_PORT)
- server.start()
- while True:
- try:
- time.sleep(2)
- except KeyboardInterrupt:
- print 'Stopping...'
- server.close()
- break
- if __name__ == '__main__':
- main()
- CPM
- ) > $HOME/proxy.log &
-
- chmod +x /etc/VPS-MX/protocolos/lacasitamx.py &>/dev/nulll
-
- screen -dmS pydic-"$proxycolor" python ${SCPinst}/lacasitamx.py "$proxycolor" "$mensage" && echo ""$proxycolor" "$mensage"" >> /etc/VPS-MX/PortPD.log
- }
-
- clear
- echo -e "$BARRA"
- msg -tit
- echo -e "$BARRA"
- pidproxy=$(ps x | grep -w "lacasitamx.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy ]] && plox="\e[1;32m[ON]" || plox="\e[1;31m[OFF]"
- #
- echo -e "\e[1;33m [1] \e[1;31m > \e[1;36mHTTP | PYTHON | CUSTOM $plox\e[0m"
- echo -e "\e[1;33m [2] \e[1;31m > \e[1;31mDESINSTALAR RECURSO\e[0m"
- echo -e "\e[1;33m [0] \e[1;31m > \e[1;37mVOLVER\e[0m"
- echo -e "$BARRA"
- read -p "SELECIONE UNA OPCION : " pix
- case $pix in
- 0) ;;
- 1) pytho_py ;;
- 2) det_py ;;
- esac
- #
|