sockspy.sh 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. #!/bin/bash
  2. #25/01/2021 by @Kalix1
  3. clear
  4. clear
  5. SCPdir="/etc/VPS-MX"
  6. SCPfrm="${SCPdir}/herramientas" && [[ ! -d ${SCPfrm} ]] && exit
  7. SCPinst="${SCPdir}/protocolos"&& [[ ! -d ${SCPinst} ]] && exit
  8. declare -A cor=( [0]="\033[1;37m" [1]="\033[1;34m" [2]="\033[1;31m" [3]="\033[1;33m" [4]="\033[1;32m" )
  9. [[ $(dpkg --get-selections|grep -w "python"|head -1) ]] || apt-get install python -y &>/dev/null
  10. [[ $(dpkg --get-selections|grep -w "python-pip"|head -1) ]] || apt-get install python pip -y &>/dev/null
  11. mportas () {
  12. unset portas
  13. portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" |grep -v "COMMAND" | grep "LISTEN")
  14. while read port; do
  15. var1=$(echo $port | awk '{print $1}') && var2=$(echo $port | awk '{print $9}' | awk -F ":" '{print $2}')
  16. [[ "$(echo -e $portas|grep "$var1 $var2")" ]] || portas+="$var1 $var2\n"
  17. done <<< "$portas_var"
  18. i=1
  19. echo -e "$portas"
  20. }
  21. meu_ip () {
  22. MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
  23. MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
  24. [[ "$MEU_IP" != "$MEU_IP2" ]] && echo "$MEU_IP2" || echo "$MEU_IP"
  25. }
  26. IP=$(wget -qO- ipv4.icanhazip.com)
  27. tcpbypass_fun () {
  28. [[ -e $HOME/socks ]] && rm -rf $HOME/socks > /dev/null 2>&1
  29. [[ -d $HOME/socks ]] && rm -rf $HOME/socks > /dev/null 2>&1
  30. cd $HOME && mkdir socks > /dev/null 2>&1
  31. cd socks
  32. patch="https://raw.githubusercontent.com/NetVPS/VPS-MX_Oficial/master/LINKS-LIBRERIAS/backsocz.zip"
  33. arq="backsocz"
  34. wget $patch -o /dev/null
  35. unzip $arq > /dev/null 2>&1
  36. mv -f ./ssh /etc/ssh/sshd_config && service ssh restart 1> /dev/null 2>/dev/null
  37. mv -f sckt$(python3 --version|awk '{print $2}'|cut -d'.' -f1,2) /usr/sbin/sckt
  38. mv -f scktcheck /bin/scktcheck
  39. chmod +x /bin/scktcheck
  40. chmod +x /usr/sbin/sckt
  41. rm -rf $HOME/socks
  42. cd $HOME
  43. msg="$2"
  44. [[ $msg = "" ]] && msg="@vpsmod"
  45. portxz="$1"
  46. [[ $portxz = "" ]] && portxz="8080"
  47. screen -dmS sokz scktcheck "$portxz" "$msg" > /dev/null 2>&1
  48. }
  49. gettunel_fun () {
  50. echo "master=NetVPS" > ${SCPinst}/pwd.pwd
  51. while read service; do
  52. [[ -z $service ]] && break
  53. echo "127.0.0.1:$(echo $service|cut -d' ' -f2)=$(echo $service|cut -d' ' -f1)" >> ${SCPinst}/pwd.pwd
  54. done <<< "$(mportas)"
  55. screen -dmS getpy python ${SCPinst}/PGet.py -b "0.0.0.0:$1" -p "${SCPinst}/pwd.pwd"
  56. [[ "$(ps x | grep "PGet.py" | grep -v "grep" | awk -F "pts" '{print $1}')" ]] && {
  57. echo -e "$(fun_trans "Gettunel Iniciado con Sucesso")"
  58. msg -bar
  59. echo -ne "$(fun_trans "Su contraseña Gettunel es"):"
  60. echo -e "\033[1;32m NetVPS"
  61. msg -bar
  62. } || echo -e "$(fun_trans "Gettunel no fue iniciado")"
  63. msg -bar
  64. }
  65. PythonDic_fun () {
  66. if [[ ! -e /etc/VPS-MX/fix ]]; then
  67. echo ""
  68. ins(){
  69. apt-get install python -y
  70. apt-get install python pip -y
  71. }
  72. ins &>/dev/null && echo -e "INSTALANDO FIX" | pv -qL 40
  73. sleep 1.s
  74. [[ ! -e /etc/VPS-MX/fix ]] && touch /etc/VPS-MX/fix
  75. else
  76. echo ""
  77. fi
  78. clear
  79. echo ""
  80. echo ""
  81. msg -tit
  82. msg -bar
  83. echo -e "\033[1;31m SOCKS DIRECTO-PY | CUSTOM\033[0m"
  84. while true; do
  85. msg -bar
  86. echo -ne "\033[1;37m"
  87. read -p " ESCRIBE SU PUERTO: " porta_socket
  88. echo -e ""
  89. [[ $(mportas|grep -w "$porta_socket") ]] || break
  90. echo -e " ESTE PUERTO YA ESTÁ EN USO"
  91. unset porta_socket
  92. done
  93. msg -bar
  94. echo -e "\033[1;97m Digite Un Puerto Local 22|443|80\033[1;37m"
  95. msg -bar
  96. while true; do
  97. echo -ne "\033[1;36m"
  98. read -p " Digite Un Puerto SSH/DROPBEAR activo: " PORTLOC
  99. echo -e ""
  100. if [[ ! -z $PORTLOC ]]; then
  101. if [[ $(echo $PORTLOC|grep [0-9]) ]]; then
  102. [[ $(mportas|grep $PORTLOC|head -1) ]] && break || echo -e "ESTE PUERTO NO EXISTE"
  103. fi
  104. fi
  105. done
  106. #
  107. puertoantla="$(mportas|grep $PORTLOC|awk '{print $2}'|head -1)"
  108. msg -bar
  109. echo -ne " Escribe El HTTP Response? 101|200|300: \033[1;37m" && read cabezado
  110. tput cuu1 && tput dl1
  111. if [[ -z $cabezado ]]; then
  112. cabezado="200"
  113. echo -e " \e[31mResponse Default:\033[1;32m ${cabezado}"
  114. else
  115. echo -e " \e[31mResponse Elegido:\033[1;32m ${cabezado}"
  116. fi
  117. msg -bar
  118. echo -e "$(fun_trans "Introdusca su Mini-Banner")"
  119. msg -bar
  120. echo -ne " Introduzca el texto de estado plano o en HTML:\n \033[1;37m" && read texto_soket
  121. tput cuu1 && tput dl1
  122. if [[ -z $texto_soket ]]; then
  123. texto_soket="@lacasitamx"
  124. echo -e " \e[31mMensage Default: \033[1;32m${texto_soket} "
  125. else
  126. echo -e " \e[31mMensage: \033[1;32m ${texto_soket}"
  127. fi
  128. msg -bar
  129. (
  130. less << CPM > /etc/VPS-MX/protocolos/PDirect.py
  131. import socket, threading, thread, select, signal, sys, time, getopt
  132. # Listen
  133. LISTENING_ADDR = '0.0.0.0'
  134. LISTENING_PORT = int("$porta_socket")
  135. PASS = ''
  136. # CONST
  137. BUFLEN = 4096 * 4
  138. TIMEOUT = 60
  139. DEFAULT_HOST = '127.0.0.1:$puertoantla'
  140. RESPONSE = 'HTTP/1.1 $cabezado <strong>$texto_soket</strong>\r\n\r\nHTTP/1.1 $cabezado Conexion Exitosa\r\n\r\n'
  141. class Server(threading.Thread):
  142. def __init__(self, host, port):
  143. threading.Thread.__init__(self)
  144. self.running = False
  145. self.host = host
  146. self.port = port
  147. self.threads = []
  148. self.threadsLock = threading.Lock()
  149. self.logLock = threading.Lock()
  150. def run(self):
  151. self.soc = socket.socket(socket.AF_INET)
  152. self.soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  153. self.soc.settimeout(2)
  154. self.soc.bind((self.host, self.port))
  155. self.soc.listen(0)
  156. self.running = True
  157. try:
  158. while self.running:
  159. try:
  160. c, addr = self.soc.accept()
  161. c.setblocking(1)
  162. except socket.timeout:
  163. continue
  164. conn = ConnectionHandler(c, self, addr)
  165. conn.start()
  166. self.addConn(conn)
  167. finally:
  168. self.running = False
  169. self.soc.close()
  170. def printLog(self, log):
  171. self.logLock.acquire()
  172. print log
  173. self.logLock.release()
  174. def addConn(self, conn):
  175. try:
  176. self.threadsLock.acquire()
  177. if self.running:
  178. self.threads.append(conn)
  179. finally:
  180. self.threadsLock.release()
  181. def removeConn(self, conn):
  182. try:
  183. self.threadsLock.acquire()
  184. self.threads.remove(conn)
  185. finally:
  186. self.threadsLock.release()
  187. def close(self):
  188. try:
  189. self.running = False
  190. self.threadsLock.acquire()
  191. threads = list(self.threads)
  192. for c in threads:
  193. c.close()
  194. finally:
  195. self.threadsLock.release()
  196. class ConnectionHandler(threading.Thread):
  197. def __init__(self, socClient, server, addr):
  198. threading.Thread.__init__(self)
  199. self.clientClosed = False
  200. self.targetClosed = True
  201. self.client = socClient
  202. self.client_buffer = ''
  203. self.server = server
  204. self.log = 'Connection: ' + str(addr)
  205. def close(self):
  206. try:
  207. if not self.clientClosed:
  208. self.client.shutdown(socket.SHUT_RDWR)
  209. self.client.close()
  210. except:
  211. pass
  212. finally:
  213. self.clientClosed = True
  214. try:
  215. if not self.targetClosed:
  216. self.target.shutdown(socket.SHUT_RDWR)
  217. self.target.close()
  218. except:
  219. pass
  220. finally:
  221. self.targetClosed = True
  222. def run(self):
  223. try:
  224. self.client_buffer = self.client.recv(BUFLEN)
  225. hostPort = self.findHeader(self.client_buffer, 'X-Real-Host')
  226. if hostPort == '':
  227. hostPort = DEFAULT_HOST
  228. split = self.findHeader(self.client_buffer, 'X-Split')
  229. if split != '':
  230. self.client.recv(BUFLEN)
  231. if hostPort != '':
  232. passwd = self.findHeader(self.client_buffer, 'X-Pass')
  233. if len(PASS) != 0 and passwd == PASS:
  234. self.method_CONNECT(hostPort)
  235. elif len(PASS) != 0 and passwd != PASS:
  236. self.client.send('HTTP/1.1 400 WrongPass!\r\n\r\n')
  237. elif hostPort.startswith('127.0.0.1') or hostPort.startswith('localhost'):
  238. self.method_CONNECT(hostPort)
  239. else:
  240. self.client.send('HTTP/1.1 403 Forbidden!\r\n\r\n')
  241. else:
  242. print '- No X-Real-Host!'
  243. self.client.send('HTTP/1.1 400 NoXRealHost!\r\n\r\n')
  244. except Exception as e:
  245. self.log += ' - error: ' + e.strerror
  246. self.server.printLog(self.log)
  247. pass
  248. finally:
  249. self.close()
  250. self.server.removeConn(self)
  251. def findHeader(self, head, header):
  252. aux = head.find(header + ': ')
  253. if aux == -1:
  254. return ''
  255. aux = head.find(':', aux)
  256. head = head[aux+2:]
  257. aux = head.find('\r\n')
  258. if aux == -1:
  259. return ''
  260. return head[:aux];
  261. def connect_target(self, host):
  262. i = host.find(':')
  263. if i != -1:
  264. port = int(host[i+1:])
  265. host = host[:i]
  266. else:
  267. if self.method=='CONNECT':
  268. port = 443
  269. else:
  270. port = 80
  271. port = 8080
  272. port = 8799
  273. port = 3128
  274. (soc_family, soc_type, proto, _, address) = socket.getaddrinfo(host, port)[0]
  275. self.target = socket.socket(soc_family, soc_type, proto)
  276. self.targetClosed = False
  277. self.target.connect(address)
  278. def method_CONNECT(self, path):
  279. self.log += ' - CONNECT ' + path
  280. self.connect_target(path)
  281. self.client.sendall(RESPONSE)
  282. self.client_buffer = ''
  283. self.server.printLog(self.log)
  284. self.doCONNECT()
  285. def doCONNECT(self):
  286. socs = [self.client, self.target]
  287. count = 0
  288. error = False
  289. while True:
  290. count += 1
  291. (recv, _, err) = select.select(socs, [], socs, 3)
  292. if err:
  293. error = True
  294. if recv:
  295. for in_ in recv:
  296. try:
  297. data = in_.recv(BUFLEN)
  298. if data:
  299. if in_ is self.target:
  300. self.client.send(data)
  301. else:
  302. while data:
  303. byte = self.target.send(data)
  304. data = data[byte:]
  305. count = 0
  306. else:
  307. break
  308. except:
  309. error = True
  310. break
  311. if count == TIMEOUT:
  312. error = True
  313. if error:
  314. break
  315. def main(host=LISTENING_ADDR, port=LISTENING_PORT):
  316. print "\n:-------PythonProxy-------:\n"
  317. print "Listening addr: " + LISTENING_ADDR
  318. print "Listening port: " + str(LISTENING_PORT) + "\n"
  319. print ":-------------------------:\n"
  320. server = Server(LISTENING_ADDR, LISTENING_PORT)
  321. server.start()
  322. while True:
  323. try:
  324. time.sleep(2)
  325. except KeyboardInterrupt:
  326. print 'Stopping...'
  327. server.close()
  328. break
  329. if __name__ == '__main__':
  330. main()
  331. CPM
  332. ) > $HOME/proxy.log &
  333. chmod +x /etc/VPS-MX/protocolos/PDirect.py
  334. #screen -dmS pydic-"$porta_socket" python ${SCPinst}/PDirect.py "$porta_socket" "$texto_soket" && echo ""$porta_socket" "$texto_soket"" >> /etc/VPS-MX/PortPD.log
  335. [[ -z $porta_socket ]] && conf="$porta_socket "
  336. [[ -z $texto_soket ]] && conf+="$texto_soket"
  337. echo -e "[Unit]
  338. Description=PDirect Service
  339. After=network.target
  340. StartLimitIntervalSec=0
  341. [Service]
  342. Type=simple
  343. User=root
  344. WorkingDirectory=/root
  345. ExecStart=/usr/bin/python ${SCPinst}/PDirect.py $conf
  346. Restart=always
  347. RestartSec=3s
  348. [Install]
  349. WantedBy=multi-user.target" > /etc/systemd/system/python.$porta_socket.service
  350. systemctl enable python.$porta_socket &>/dev/null
  351. systemctl start python.$porta_socket &>/dev/null
  352. systemctl restart python.$porta_socket &>/dev/null
  353. echo "$porta_socket" >/etc/VPS-MX/py.log
  354. echo ""$porta_socket" "$texto_soket"" >> /etc/VPS-MX/PortPD.log
  355. }
  356. pid_kill () {
  357. [[ -z $1 ]] && refurn 1
  358. pids="$@"
  359. for pid in $(echo $pids); do
  360. kill -9 $pid &>/dev/null
  361. done
  362. }
  363. selecionador(){
  364. clear
  365. echo ""
  366. echo ""
  367. echo ""
  368. while true; do
  369. msg -bar
  370. echo -ne "\033[1;37m"
  371. read -p " ESCRIBE SU PUERTO: " porta_socket
  372. echo -e ""
  373. [[ $(mportas|grep -w "$porta_socket") ]] || break
  374. echo -e " ESTE PUERTO YA ESTÁ EN USO"
  375. unset porta_socket
  376. done
  377. echo -e "$(fun_trans "Introdusca su Mini-Banner")"
  378. msg -bar
  379. echo -ne "Introduzca el texto de estado plano o en HTML:\n \033[1;37m" && read texto_soket
  380. msg -bar
  381. }
  382. remove_fun () {
  383. echo -e "Parando Socks Python"
  384. msg -bar
  385. pidproxy=$(ps x | grep "PPub.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy ]] && pid_kill $pidproxy
  386. pidproxy2=$(ps x | grep "PPriv.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy2 ]] && pid_kill $pidproxy2
  387. pidproxy3=$(ps x | grep "PDirect.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy3 ]] && pid_kill $pidproxy3
  388. pidproxy4=$(ps x | grep "POpen.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy4 ]] && pid_kill $pidproxy4
  389. pidproxy5=$(ps x | grep "PGet.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy5 ]] && pid_kill $pidproxy5
  390. pidproxy6=$(ps x | grep "scktcheck" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy6 ]] && pid_kill $pidproxy6
  391. pidproxy7=$(ps x | grep "python.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy7 ]] && pid_kill $pidproxy7
  392. pidproxy8=$(ps x | grep "lacasitamx.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy8 ]] && pid_kill $pidproxy8
  393. echo -e "\033[1;91mSocks DETENIDOS"
  394. msg -bar
  395. rm -rf /etc/VPS-MX/PortPD.log
  396. echo "" > /etc/VPS-MX/PortPD.log
  397. py=$(cat /etc/VPS-MX/py.log|cut -d'|' -f1)
  398. systemctl stop python.${py} &>/dev/null
  399. systemctl disable python.${py} &>/dev/null
  400. rm /etc/systemd/system/python.${py}.service &>/dev/null
  401. exit 0
  402. }
  403. iniciarsocks () {
  404. pidproxy=$(ps x | grep -w "PPub.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy ]] && P1="\033[1;32m[ON]" || P1="\e[37m[\033[1;31mOFF\e[37m]"
  405. pidproxy2=$(ps x | grep -w "PPriv.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy2 ]] && P2="\033[1;32m[ON]" || P2="\e[37m[\033[1;31mOFF\e[37m]"
  406. pidproxy3=$(ps x | grep -w "PDirect.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy3 ]] && P3="\033[1;32m[ON]" || P3="\e[37m[\033[1;31mOFF\e[37m]"
  407. pidproxy4=$(ps x | grep -w "POpen.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy4 ]] && P4="\033[1;32m[ON]" || P4="\e[37m[\033[1;31mOFF\e[37m]"
  408. pidproxy5=$(ps x | grep "PGet.py" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy5 ]] && P5="\033[1;32m[ON]" || P5="\e[37m[\033[1;31mOFF\e[37m]"
  409. pidproxy6=$(ps x | grep "scktcheck" | grep -v "grep" | awk -F "pts" '{print $1}') && [[ ! -z $pidproxy6 ]] && P6="\033[1;32m[ON]" || P6="\e[37m[\033[1;31mOFF\e[37m]"
  410. msg -bar
  411. msg -tit
  412. echo -e " \e[91m\e[43mINSTALADOR DE PROXY'S\e[0m "
  413. msg -bar
  414. echo -e " \e[1;93m[\e[92m1\e[93m] \e[97m$(msg -verm2 "➛ ")\033[1;97mProxy Python SIMPLE $P1"
  415. echo -e " \e[1;93m[\e[92m2\e[93m] \e[97m$(msg -verm2 "➛ ")\033[1;97mProxy Python SEGURO $P2"
  416. echo -e " \e[1;93m[\e[92m3\e[93m] \e[97m$(msg -verm2 "➛ ")\033[1;97mProxy Python DIRECTO $P3"
  417. echo -e " \e[1;93m[\e[92m4\e[93m] \e[97m$(msg -verm2 "➛ ")\033[1;97mProxy Python OPENVPN $P4"
  418. echo -e " \e[1;93m[\e[92m5\e[93m] \e[97m$(msg -verm2 "➛ ")\033[1;97mProxy Python GETTUNEL $P5"
  419. echo -e " \e[1;93m[\e[92m6\e[93m] \e[97m$(msg -verm2 "➛ ")\033[1;97mProxy Python TCP BYPASS $P6"
  420. echo -e " \e[1;93m[\e[92m7\e[93m] \e[97m$(msg -verm2 "➛ ")\033[1;97mDETENER SERVICIO PYTHON"
  421. msg -bar
  422. echo -e " \e[1;93m[\e[92m0\e[93m] \e[97m$(msg -verm2 "➛ ") \e[97m\033[1;41m VOLVER \033[1;37m"
  423. msg -bar
  424. IP=(meu_ip)
  425. while [[ -z $portproxy || $portproxy != @(0|[1-7]) ]]; do
  426. echo -ne " Digite Una Opcion: \033[1;37m" && read portproxy
  427. tput cuu1 && tput dl1
  428. done
  429. case $portproxy in
  430. 1)
  431. selecionador
  432. screen -dmS screen python ${SCPinst}/PPub.py "$porta_socket" "$texto_soket";;
  433. 2)
  434. selecionador
  435. screen -dmS screen python3 ${SCPinst}/PPriv.py "$porta_socket" "$texto_soket" "$IP";;
  436. 3)PythonDic_fun;;
  437. 4)
  438. selecionador
  439. screen -dmS screen python ${SCPinst}/POpen.py "$porta_socket" "$texto_soket";;
  440. 5)
  441. selecionador
  442. gettunel_fun "$porta_socket";;
  443. 6)
  444. selecionador
  445. tcpbypass_fun "$porta_socket" "$texto_soket";;
  446. 7)remove_fun;;
  447. 0)return;;
  448. esac
  449. echo -e "\033[1;92m$(fun_trans "Procedimiento COMPLETO")"
  450. msg -bar
  451. }
  452. iniciarsocks