d.sh 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. #!/bin/bash
  2. clear
  3. echo -e "\033[1;33m ""\033[1;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
  4. echo -e "\033[1;33m ""\E[41;1;37m << INSTALA Y DESINSTALAR DROPBEAR >> \033[0m"
  5. echo -e "\033[1;33m ""\033[1;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
  6. echo ""
  7. echo -e "\E[41;1;37mPARA ESTE PROCESO DEVES INSTALAR DROPBEAR PRIMERO\033[0m"
  8. echo ""
  9. echo -e "\E[48;1;37m[1] • INSTALAR DROPBEAR\033[0m ""\E[48;1;37m[5] • CAMBIAR PUERTO DROPBEAR\033[0m"
  10. echo -e "\E[48;1;37m[2] • DESACTIVAR DROPBEAR\033[0m"
  11. echo -e "\E[48;1;37m[3] • ACTIVAR DROPBEAR\033[0m"
  12. echo ""
  13. echo -e "\033[1;33m\033[0m ""\E[41;1;37m[04]-AUTO MENU\033[0m"
  14. echo -e "\033[1;33m\033[0m ""\E[41;1;37m[0]-SALIR\033[0m"
  15. function j () {
  16. echo -ne "\E[41;1;37mESCRIVE TU NUEVO PUERTO DROPBEAR DESEADO:\033[0m""\033[1;37m>> "; read t
  17. sleep 2.5s
  18. echo ""
  19. echo -e "\E[44;1;37mNUEVO PUERTO DROPBEAR \E[41;1;37m$t\033[0m\E[44;1;37m A SIDO AGREGADO\033[0m"
  20. sleep 2.5s
  21. (
  22. less << f > /etc/default/dropbear
  23. NO_START=0
  24. DROPBEAR_EXTRA_ARGS="-p $t"
  25. DROPBEAR_BANNER="/etc/dropbear/banner"
  26. DROPBEAR_RECEIVE_WINDOW=65536
  27. f
  28. )
  29. (
  30. less << u > /root/ddd.sh
  31. import socket, threading, thread, select, signal, sys, time, getopt
  32. # CONFIG
  33. LISTENING_ADDR = '0.0.0.0'
  34. LISTENING_PORT = $t
  35. PASS = ''
  36. # CONST
  37. BUFLEN = 4096 * 4
  38. TIMEOUT = 60
  39. DEFAULT_HOST = "127.0.0.1:22"
  40. RESPONSE = 'HTTP/1.1 200 OMAR PROTOCOLO \r\n\r\n'
  41. class Server(threading.Thread):
  42. def __init__(self, host, port):
  43. threading.Thread.__init__(self)
  44. self.running = False
  45. self.host = host
  46. self.port = port
  47. self.threads = []
  48. self.threadsLock = threading.Lock()
  49. self.logLock = threading.Lock()
  50. def run(self):
  51. self.soc = socket.socket(socket.AF_INET)
  52. self.soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  53. self.soc.settimeout(2)
  54. self.soc.bind((self.host, self.port))
  55. self.soc.listen(0)
  56. self.running = True
  57. try:
  58. while self.running:
  59. try:
  60. c, addr = self.soc.accept()
  61. c.setblocking(1)
  62. except socket.timeout:
  63. continue
  64. conn = ConnectionHandler(c, self, addr)
  65. conn.start();
  66. self.addConn(conn)
  67. finally:
  68. self.running = False
  69. self.soc.close()
  70. def printLog(self, log):
  71. self.logLock.acquire()
  72. print log
  73. self.logLock.release()
  74. def addConn(self, conn):
  75. try:
  76. self.threadsLock.acquire()
  77. if self.running:
  78. self.threads.append(conn)
  79. finally:
  80. self.threadsLock.release()
  81. def removeConn(self, conn):
  82. try:
  83. self.threadsLock.acquire()
  84. self.threads.remove(conn)
  85. finally:
  86. self.threadsLock.release()
  87. def close(self):
  88. try:
  89. self.running = False
  90. self.threadsLock.acquire()
  91. threads = list(self.threads)
  92. for c in threads:
  93. c.close()
  94. finally:
  95. self.threadsLock.release()
  96. class ConnectionHandler(threading.Thread):
  97. def __init__(self, socClient, server, addr):
  98. threading.Thread.__init__(self)
  99. self.clientClosed = False
  100. self.targetClosed = True
  101. self.client = socClient
  102. self.client_buffer = ''
  103. self.server = server
  104. self.log = 'Connection: ' + str(addr)
  105. def close(self):
  106. try:
  107. if not self.clientClosed:
  108. self.client.shutdown(socket.SHUT_RDWR)
  109. self.client.close()
  110. except:
  111. pass
  112. finally:
  113. self.clientClosed = True
  114. try:
  115. if not self.targetClosed:
  116. self.target.shutdown(socket.SHUT_RDWR)
  117. self.target.close()
  118. except:
  119. pass
  120. finally:
  121. self.targetClosed = True
  122. def run(self):
  123. try:
  124. self.client_buffer = self.client.recv(BUFLEN)
  125. hostPort = self.findHeader(self.client_buffer, 'X-Real-Host')
  126. if hostPort == '':
  127. hostPort = DEFAULT_HOST
  128. split = self.findHeader(self.client_buffer, 'X-Split')
  129. if split != '':
  130. self.client.recv(BUFLEN)
  131. if hostPort != '':
  132. passwd = self.findHeader(self.client_buffer, 'X-Pass')
  133. if len(PASS) != 0 and passwd == PASS:
  134. self.method_CONNECT(hostPort)
  135. elif len(PASS) != 0 and passwd != PASS:
  136. self.client.send('HTTP/1.1 400 WrongPass!\r\n\r\n')
  137. elif hostPort.startswith('127.0.0.1') or hostPort.startswith('localhost'):
  138. self.method_CONNECT(hostPort)
  139. else:
  140. self.client.send('HTTP/1.1 403 Forbidden!\r\n\r\n')
  141. else:
  142. print '- No X-Real-Host!'
  143. self.client.send('HTTP/1.1 400 NoXRealHost!\r\n\r\n')
  144. except Exception as e:
  145. self.log += ' - error: ' + e.strerror
  146. self.server.printLog(self.log)
  147. pass
  148. finally:
  149. self.close()
  150. self.server.removeConn(self)
  151. def findHeader(self, head, header):
  152. aux = head.find(header + ': ')
  153. if aux == -1:
  154. return ''
  155. aux = head.find(':', aux)
  156. head = head[aux+2:]
  157. aux = head.find('\r\n')
  158. if aux == -1:
  159. return ''
  160. return head[:aux];
  161. def connect_target(self, host):
  162. i = host.find(':')
  163. if i != -1:
  164. port = int(host[i+1:])
  165. host = host[:i]
  166. else:
  167. if self.method=='CONNECT':
  168. port = 443
  169. else:
  170. port = 22
  171. (soc_family, soc_type, proto, _, address) = socket.getaddrinfo(host, port)[0]
  172. self.target = socket.socket(soc_family, soc_type, proto)
  173. self.targetClosed = False
  174. self.target.connect(address)
  175. def method_CONNECT(self, path):
  176. self.log += ' - CONNECT ' + path
  177. self.connect_target(path)
  178. self.client.sendall(RESPONSE)
  179. self.client_buffer = ''
  180. self.server.printLog(self.log)
  181. self.doCONNECT()
  182. def doCONNECT(self):
  183. socs = [self.client, self.target]
  184. count = 0
  185. error = False
  186. while True:
  187. count += 1
  188. (recv, _, err) = select.select(socs, [], socs, 3)
  189. if err:
  190. error = True
  191. if recv:
  192. for in_ in recv:
  193. try:
  194. data = in_.recv(BUFLEN)
  195. if data:
  196. if in_ is self.target:
  197. self.client.send(data)
  198. else:
  199. while data:
  200. byte = self.target.send(data)
  201. data = data[byte:]
  202. count = 0
  203. else:
  204. break
  205. except:
  206. error = True
  207. break
  208. if count == TIMEOUT:
  209. error = True
  210. if error:
  211. break
  212. def print_usage():
  213. print 'Usage: proxy.py -p <port>'
  214. print ' proxy.py -b <bindAddr> -p <port>'
  215. print ' proxy.py -b 0.0.0.0 -p 1080'
  216. def parse_args(argv):
  217. global LISTENING_ADDR
  218. global LISTENING_PORT
  219. try:
  220. opts, args = getopt.getopt(argv,"hb:p:",["bind=","port="])
  221. except getopt.GetoptError:
  222. print_usage()
  223. sys.exit(2)
  224. for opt, arg in opts:
  225. if opt == '-h':
  226. print_usage()
  227. sys.exit()
  228. elif opt in ("-b", "--bind"):
  229. LISTENING_ADDR = arg
  230. elif opt in ("-p", "--port"):
  231. LISTENING_PORT = int(arg)
  232. def main(host=LISTENING_ADDR, port=LISTENING_PORT):
  233. print "\n ==============================\n"
  234. print "\n PYTHON PROXY \n"
  235. print "\n ==============================\n"
  236. print "corriendo ip: " + LISTENING_ADDR
  237. print "corriendo port: " + str(LISTENING_PORT) + "\n"
  238. print "Se ha Iniciado Por Favor Cierre el Terminal\n"
  239. server = Server(LISTENING_ADDR, LISTENING_PORT)
  240. server.start()
  241. while True:
  242. try:
  243. time.sleep(2)
  244. except KeyboardInterrupt:
  245. print 'Stopping...'
  246. server.close()
  247. break
  248. if __name__ == '__main__':
  249. parse_args(sys.argv[1:])
  250. main()
  251. u
  252. )
  253. service dropbear stop
  254. service dropbear start
  255. /root/d.sh
  256. }
  257. while [ "$opcion" != "0" ]
  258. do
  259. echo -ne "\E[41;1;37mOPCION:\033[0m""\033[1;37m>>\033[0m "; read opcion
  260. case $opcion in
  261. 1)/root/dd.sh
  262. echo -e "\E[44;1;37mDROPBEAR INSTALADO CON EXITO\033[0m"
  263. ;;
  264. 2)echo -e "\E[44;1;37mDROPBEAR AUTO DETENIDO CON EXITO\033[0m"
  265. sleep 1s
  266. service dropbear stop && /root/menu
  267. ;;
  268. 3)echo -e "\E[44;1;37mDROPBEAR ACTIVADO CON EXITO\033[0m"
  269. sleep 1s
  270. service dropbear start && /root/menu
  271. ;;
  272. 4)/root/menu
  273. ;;
  274. 5)j
  275. ;;
  276. esac
  277. exit
  278. done
  279. clear