elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 24
11  Programación / Desarrollo Web / Re: enviar mas de una valor por $() Jquery en: 30 Octubre 2014, 20:29 pm
Podrías cambiar el #ID por $("input[name=buscar]").keyup...
Donde los 3 input tienen por "name" el valor "buscar".

Saludos!
12  Programación / Scripting / Re: [Python-CGI] PC Control Remoto - JaAViEr en: 30 Octubre 2014, 10:05 am
O.O que bueno lo probaré!
Muchísimas gracias !
13  Programación / Scripting / [Python-CGI] PC Control Remoto - JaAViEr en: 30 Octubre 2014, 08:51 am
¿ Qué es PC Control Remoto ?

PC Control Remoto es un programa/web desarrollado bajo el lenguaje de programación Python en conjunto con su librería CGI, la cuál nos permitirá montar un servidor CGI y poder llevar acabo nuestro cometido.

Este programa nos permitirá acceder a nuestro computador forma remota, con tu Navegador favorito, conectado vía LAN o a Internet (configuración aparte), desde cualquier navegador. Las funciones que nos brinda son las siguiente:
  • Consola - Terminal remota: Puedes ejecutar cualquier comando y obtener su salida desde tu navegador.
  • Comándos rápidos: Entre estos comándos rápidos tenemos las posibilidad de:
  • Apagar PC. (60 segundos).
  • Reiniciar PC. (60 segundos).
  • Cancelar Apagado/Reinicio.
  • Matar un proceso.
  • Iniciar un proceso.

[/list]
El programa en general se compone de:
  • Server.py - Programa encargado de crear el servidor bajo el puerto que queramos.
  • Index.py - Login e inicio del Panel de Control.
  • Terminal.py - Consola remota.
  • Comando_rapido.py - Comandos rápidos.
  • Logout.py - Cerrar sesión
Además de otros componentes como Topcoat (CSS), jQuery (JS).

Solo extraer en una carpeta y ejecutar server.py PUERTO

Adjunto el código de cada archivo Python mencionado anteriormente

server.py

Código
  1. '''
  2. Autor: JaAViEr
  3. Twitter: @javieresteban__
  4. Website: http://codigo.ga
  5. '''
  6. from CGIHTTPServer import CGIHTTPRequestHandler
  7. from BaseHTTPServer import HTTPServer
  8. import socket
  9. import sys
  10.  
  11. try:
  12.  
  13. port = int(sys.argv[1])
  14.  
  15. if port:
  16.  
  17. ip_interna = socket.gethostbyname(socket.gethostname())
  18. print "Panel de control: http://%s:%s/cgi-bin/index.py" % (ip_interna, port)
  19. server_address=('', port)
  20. httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
  21. httpd.serve_forever()
  22.  
  23. except:
  24.  
  25. print "-"*40
  26. print "Uso:"
  27. print sys.argv[0], "PUERTO"
  28. print "-"*40
  29. print "Ejemplo de uso:"
  30. print sys.argv[0], "5050"
  31. print "-"*40
  32.  
Luego de server.py, deben pasar como parámatro el puerto al cual estará asociado el servidor.



index.py

Código
  1. #-*- encoding:utf-8 -*-
  2. '''
  3. Autor: JaAViEr
  4. Twitter: @javieresteban__
  5. Website: http://codigo.ga
  6. '''
  7. import cgi
  8. import os
  9. import Cookie
  10. import md5
  11.  
  12. lista_usuarios = ["admin", "JaAViEr"] #Usuarios
  13. lista_passwords = ["root", "toor"] # Contraseñas
  14. method = os.environ.get("REQUEST_METHOD")
  15. logueado = False
  16. contenido_cookies = os.environ.get('HTTP_COOKIE')
  17.  
  18. tag_head = ''' <meta charset="UTF-8">
  19. <link rel="stylesheet" type="text/css" href="/topcoat/css/topcoat-mobile-dark.min.css" class="uib-framework-theme">
  20. <link rel="stylesheet" type="text/css" href="/css/index_main.less.css" class="main-less">
  21. <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  22. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
  23. <style type="text/css">
  24. /* Prevent copy paste for all elements except text fields */
  25. *  { -webkit-user-select:none; -webkit-tap-highlight-color:rgba(255, 255, 255, 0); }
  26. input, textarea  { -webkit-user-select:text; }
  27. </style>
  28. <script type="application/javascript" src="/js/jquery.min.js"></script>
  29. <script type="application/javascript" src="/js/index_user_scripts.js"></script>'''
  30.  
  31. def code_login(accion=False):
  32.  
  33. if accion == 'error':
  34.  
  35. mensaje_error = '''
  36.  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="topcoat/nav" data-ver="0">
  37. <div class="topcoat-navigation-bar__item center full">
  38. <h1 class="topcoat-navigation-bar__title">Verifica tus credenciales por favor[/size][/center]
  39. </div>
  40.  </div>
  41. '''
  42.  
  43. else:
  44.  
  45. mensaje_error = ''
  46.  
  47. return '''
  48. <!DOCTYPE html>
  49. <html>
  50.  
  51.  <head>
  52. ''' + tag_head + '''
  53. <title>Indetif&#237;cate en el sistema</title>
  54.  </head>
  55.  
  56.  <body>
  57.    <div class="uwrap">
  58.      <div class="upage" id="mainpage">
  59.        <div class="upage-outer">
  60.          <div class="upage-content" id="mainsub">
  61.  
  62.            <div class="grid grid-pad urow uib_row_2 row-height-2" data-uib="layout/row" data-ver="0">
  63.              <div class="col uib_col_2 col-0_12-12" data-uib="layout/col" data-ver="0">
  64.                <div class="widget-container content-area vertical-col">
  65.  
  66.                  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="topcoat/nav" data-ver="0">
  67.                    <div class="topcoat-navigation-bar__item center full">
  68.                      <h1 class="topcoat-navigation-bar__title">Indentif&#237;cate[/size][/center]
  69.                    </div>
  70.                  </div>
  71.                  <span class="uib_shim"></span>
  72.                </div>
  73.              </div>
  74.              <span class="uib_shim"></span>
  75.            </div>
  76.  
  77.            <div class="grid grid-pad urow uib_row_3 row-height-3" data-uib="layout/row" data-ver="0">
  78.  
  79. <form action="" method="POST">
  80. <div class="col uib_col_3 col-0_12-12" data-uib="layout/col" data-ver="0">
  81. <div class="widget-container content-area vertical-col">
  82. <div class="table-thing widget uib_w_2 d-margins" data-uib="topcoat/input" data-ver="0">
  83. <label class="narrow-control label-top-left">Usuario</label>
  84. <input class="wide-control topcoat-text-input" type="text" placeholder="Usuario" name="usuario">
  85. </div>
  86. <div class="table-thing widget d-margins" data-uib="topcoat/input" data-ver="0">
  87. <label class="narrow-control label-top-left">Contrase&#241;a</label>
  88. <input class="wide-control topcoat-text-input" type="password" placeholder="Contrase&#241;a" name="password">
  89. </div>
  90. <button class="widget d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0">Ingresar</button><span class="uib_shim"></span>
  91. </div>
  92. ''' +mensaje_error+ '''
  93. </form>
  94.              </div>
  95.              <span class="uib_shim"></span>
  96.            </div>
  97.          </div>
  98.          <!-- /upage-content -->
  99.  
  100.        </div>
  101.        <!-- /upage-outer -->
  102.  
  103.      </div>
  104.      <!-- /upage -->
  105.  
  106.    </div>
  107.    <!-- /uwrap -->
  108.  </body>
  109.  
  110. </html>'''
  111.  
  112. code = '''<!DOCTYPE html>
  113. <!--HTML5 doctype-->
  114. <html>
  115.  
  116. <head>
  117. ''' + tag_head + '''
  118. <title>Control Remoto :: 2014</title>
  119. </head>
  120.  
  121. <body>
  122. <!-- content goes here-->
  123. <div class="uwrap">
  124. <div class="upage" id="mainpage">
  125. <div class="upage-outer">
  126. <div class="upage-content" id="mainsub">
  127.  
  128. <div class="grid grid-pad urow uib_row_1 row-height-1" data-uib="layout/row" data-ver="0">
  129. <div class="col uib_col_2 col-0_12-12" data-uib="layout/col" data-ver="0">
  130. <div class="widget-container content-area vertical-col">
  131.  
  132. <div class="topcoat-navigation-bar widget uib_w_2 d-margins" data-uib="/topcoat/nav" data-ver="0">
  133. <div class="topcoat-navigation-bar__item center full">
  134. <h1 class="topcoat-navigation-bar__title">Panel de Control Remoto[/size][/center]
  135. </div>
  136. </div>
  137. <button class="widget uib_w_4 d-margins topcoat-button--large--cta" data-uib="/topcoat/button" data-ver="0">Consola - Terminal</button>
  138. <button class="widget uib_w_3 d-margins topcoat-button--large--cta" data-uib="/topcoat/button" data-ver="0">Enviar comando r&#225;pido</button>
  139. <button class="widget uib_w_5 d-margins topcoat-button--large" onclick='location.href="logout.py"' data-uib="/topcoat/button" data-ver="0">Salir</button>
  140. <span class="uib_shim"></span>
  141. </div>
  142. </div>
  143. <span class="uib_shim"></span>
  144. </div>
  145.  
  146. </div>
  147. <!-- /upage-content -->
  148.  
  149. </div>
  150. <!-- /upage-outer -->
  151.  
  152. </div>
  153. <div class="upage hidden" id="uib_page_3">
  154. <div class="upage-outer">
  155. <div id="uib_page_3sub" class="upage-content ">
  156. </div>
  157. </div>
  158. <!-- /upage-outer -->
  159. te </div>
  160. <div class="upage hidden" id="uib_page_2">
  161. <div class="upage-outer">
  162. <div id="uib_page_2sub" class="upage-content ">
  163. </div>
  164. </div>
  165. <!-- /upage-outer -->
  166. </div>
  167. <div class="upage hidden" id="uib_page_1">
  168. <div class="upage-outer">
  169. <div id="uib_page_1sub" class="upage-content ">
  170. </div>
  171. </div>
  172. <!-- /upage-outer -->
  173. </div>
  174.  
  175. <!-- /upage -->
  176.  
  177. </div>
  178. <!-- /uwrap -->
  179. </body>
  180.  
  181. </html>'''
  182.  
  183. def verificar_login(u, p):
  184.  
  185. if u in lista_usuarios and p in lista_passwords:
  186.  
  187. session = u + p
  188. session = md5.md5(session).hexdigest()
  189. return True
  190.  
  191. else:
  192.  
  193. return False
  194.  
  195. if contenido_cookies: #Si hay cookies...
  196.  
  197. valores_cookie = Cookie.SimpleCookie(contenido_cookies)
  198. session_actual = valores_cookie['sess'].value # session_actual = cookie "sess"
  199.  
  200. if session_actual == "false": # No logueado
  201.  
  202. logueado = False
  203.  
  204. else: # Verifica login
  205.  
  206. for a, b in zip(lista_usuarios, lista_passwords):
  207.  
  208. session_temporal = a + b
  209. session_temporal = md5.md5(session_temporal).hexdigest()
  210.  
  211. if session_actual == session_temporal:
  212.  
  213. logueado = True # Login coincide
  214. break
  215.  
  216. else:
  217.  
  218. pass
  219.  
  220. else: #No logueado, sess = false
  221.  
  222. print "Set-Cookie:sess=false"
  223.  
  224. print "Content-Type: text/html"
  225.  
  226. if method == "POST":
  227.  
  228. form = cgi.FieldStorage()
  229. usuario = form.getvalue('usuario')
  230. password = form.getvalue('password')
  231.  
  232. if verificar_login(usuario, password):
  233.  
  234. session = usuario + password
  235. session = md5.md5(session).hexdigest()
  236. print "Set-Cookie:sess=%s" % session
  237. print
  238. print code
  239.  
  240. else:
  241.  
  242. print
  243. print code_login('error')
  244.  
  245. elif method == "GET":
  246.  
  247. if not logueado:
  248.  
  249. print code_login()
  250.  
  251. else:
  252.  
  253. print code

terminal.py

Código
  1. #-*- encoding:utf-8 -*-
  2. '''
  3. Autor: JaAViEr
  4. Twitter: @javieresteban__
  5. Website: http://codigo.ga
  6. '''
  7. import cgi
  8. import os
  9. import Cookie
  10. import md5
  11.  
  12. print "Content-Type: text/html"
  13. print
  14.  
  15. code_terminal = '''
  16. <!DOCTYPE html>
  17. <html>
  18.  
  19.  <head>
  20.    <link rel="stylesheet" type="text/css" href="/topcoat/css/topcoat-mobile-dark.min.css" class="uib-framework-theme">
  21.    <link rel="stylesheet" type="text/css" href="/css/terminal_main.less.css" class="main-less">
  22.    <meta charset="UTF-8">
  23.    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
  24. <title>Terminal</title>
  25.    <script src="/js/jquery.min.js"></script>
  26.  </head>
  27.  
  28.  <body>
  29.    <div class="uwrap">
  30.      <div class="upage" id="mainpage">
  31.        <div class="upage-outer">
  32.          <div class="upage-content" id="mainsub">
  33.  
  34.            <div class="grid grid-pad urow uib_row_1 row-height-1" data-uib="layout/row" data-ver="0">
  35.              <div class="col uib_col_1 col-0_12-12" data-uib="layout/col" data-ver="0">
  36.                <div class="widget-container content-area vertical-col">
  37.  
  38.                  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="/topcoat/nav" data-ver="0">
  39.                    <div class="topcoat-navigation-bar__item center full">
  40.                      <h1 class="topcoat-navigation-bar__title">Consola - Terminal[/size][/center]
  41.                    </div>
  42.                  </div>
  43.                  <div class="table-thing widget uib_w_2 d-margins" data-uib="/topcoat/textarea" data-ver="0">
  44.                    <label class="narrow-control label-inline"></label>
  45.                    <textarea class="wide-control topcoat-textarea" type="text" placeholder="Comandos" name="comando"></textarea>
  46.                  </div>
  47. <button class="widget uib_w_2 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick='execute();'>&#161;Ejecutar!</button>
  48. <button class="widget uib_w_2 d-margins topcoat-button" data-uib="topcoat/button" data-ver="0" onclick='location.href="index.py"'>Volver</button>
  49. <hr>
  50. Salida:
  51. <span id="loader"></span>
  52.                  <span class="uib_shim"></span>
  53.                </div>
  54.              </div>
  55.              <span class="uib_shim"></span>
  56.            </div>
  57.          </div>
  58.          <!-- /upage-content -->
  59.  
  60.        </div>
  61.        <!-- /upage-outer -->
  62.  
  63.      </div>
  64.      <!-- /upage -->
  65.  
  66.    </div>
  67.    <!-- /uwrap -->
  68. <script language="javascript">
  69.  
  70. function execute(){
  71.  
  72. comando = $("textarea[name=comando]").val();
  73. $("#loader").load("terminal.py", {"comando":comando});
  74.  
  75. }
  76. </script>
  77.  </body>
  78.  
  79. </html>'''
  80.  
  81. logueado = False
  82. lista_usuarios = ["admin", "JaAViEr"] #Usuarios
  83. lista_passwords = ["root", "toor"] # Contrase&#241;as
  84. method = os.environ['REQUEST_METHOD']
  85. lectura_cookies = os.environ.get('HTTP_COOKIE')
  86.  
  87. if lectura_cookies:
  88.  
  89. valores_cookie = Cookie.SimpleCookie(lectura_cookies)
  90. session_actual = valores_cookie['sess'].value # session_actual = cookie "sess"
  91.  
  92. if session_actual != "false":
  93.  
  94. for a, b in zip(lista_usuarios, lista_passwords):
  95.  
  96. session_temporal = a + b
  97. session_temporal = md5.md5(session_temporal).hexdigest()
  98.  
  99. if session_actual == session_temporal:
  100.  
  101. logueado = True # Login coincide
  102. break
  103.  
  104. else:
  105.  
  106. pass
  107. else:
  108.  
  109. pass
  110.  
  111. if logueado:
  112. if method == "GET":
  113.  
  114. print code_terminal
  115.  
  116. elif method == "POST":
  117.  
  118. form = cgi.FieldStorage()
  119. comando = form.getvalue("comando")
  120. lineas = comando.split("\n")
  121. print '''
  122. <span  style="font-family:Trebuchet Ms; color: #fff;" class="wide-control">
  123. <br />
  124. '''
  125. for l in lineas:
  126.  
  127. try:
  128.  
  129. run = os.popen(l, "r")
  130. run_content = run.read()
  131. run_content = run_content.replace("\n", "<br>")
  132. run_content = run_content.replace(" ", "&nbsp;")
  133. print run_content
  134. run.close()
  135.  
  136. except:
  137.  
  138. print "Error al ejecutar comando %s" % (l)
  139.  
  140. print "</span>"
  141. else:
  142. print "<script>location.href='index.py';</script>"
comando_rapido.py
Código
  1. #-*- encoding:utf-8 -*-
  2. '''
  3. Autor: JaAViEr
  4. Twitter: @javieresteban__
  5. Website: http://codigo.ga
  6. '''
  7. import cgi
  8. import os
  9. import subprocess
  10. import Cookie
  11. import md5
  12.  
  13. print "Content-Type: text/html"
  14. print
  15. code_terminal = '''
  16. <!DOCTYPE html>
  17. <html>
  18.  
  19.  <head>
  20.    <link rel="stylesheet" type="text/css" href="/topcoat/css/topcoat-mobile-dark.min.css" class="uib-framework-theme">
  21.    <link rel="stylesheet" type="text/css" href="/css/terminal_main.less.css" class="main-less">
  22.    <meta charset="UTF-8">
  23.    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
  24. <title>Comandos r&#225;pidos</title>
  25.    <script src="/js/jquery.min.js"></script>
  26.  </head>
  27.  
  28.  <body>
  29.    <div class="uwrap">
  30.      <div class="upage" id="mainpage">
  31.        <div class="upage-outer">
  32.          <div class="upage-content" id="mainsub">
  33.  
  34.            <div class="grid grid-pad urow uib_row_3 row-height-3" data-uib="layout/row" data-ver="0">
  35.              <div class="col uib_col_3 col-0_12-12" data-uib="layout/col" data-ver="0">
  36.                <div class="widget-container content-area vertical-col">
  37.  
  38.                  <div class="topcoat-navigation-bar widget uib_w_1 d-margins" data-uib="topcoat/nav" data-ver="0">
  39.                    <div class="topcoat-navigation-bar__item center full">
  40.                      <h1 class="topcoat-navigation-bar__title">Comandos r&#225;pidos[/size][/center]
  41.                    </div>
  42.                  </div>
  43.                  <span class="uib_shim"></span>
  44.                </div>
  45.              </div>
  46.              <span class="uib_shim"></span>
  47.            </div>
  48.  
  49.            <div class="grid grid-pad urow uib_row_4 row-height-4" data-uib="layout/row" data-ver="0">
  50.              <div class="col uib_col_4 col-0_12-12" data-uib="layout/col" data-ver="0">
  51.                <div class="widget-container content-area vertical-col">
  52.  
  53. <button class="widget uib_w_2 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="comando('apagar'); return false;">Apagar</button>
  54. <button class="widget uib_w_3 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="comando('reiniciar'); return false;">Reiniciar</button>
  55. <button class="widget uib_w_4 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="comando('cancelar salida'); return false;">Cancelar Apagado/Rein.</button>
  56. <button class="widget uib_w_5 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="matar_proceso('mostrar'); return false;">Matar proceso</button>
  57. <span id="matar_proceso" style="display:none">
  58. <hr>
  59. <input class="wide-control topcoat-text-input" type="text" placeholder="proceso.ext" name="proceso">
  60. <button class="widget uib_w_6 d-margins topcoat-button wide-control" data-uib="topcoat/button" data-ver="0" onclick="matar_proceso('kill'); return false;">&#161;Matar ahora!</button>
  61. <hr>
  62. </span>
  63. <button class="widget uib_w_6 d-margins topcoat-button--cta" data-uib="topcoat/button" data-ver="0" onclick="iniciar_proceso('mostrar'); return false;">Iniciar proceso</button>
  64. <span id="iniciar_proceso" style="display:none">
  65. <hr>
  66. <input class="wide-control topcoat-text-input" type="text" placeholder="proceso.ext" name="iniciar_proceso">
  67. <button class="widget uib_w_6 d-margins topcoat-button wide-control" data-uib="topcoat/button" data-ver="0" onclick="iniciar_proceso('iniciar'); return false;">&#161;Iniciar ahora!</button>
  68. <hr>
  69. </span>
  70. <button class="widget uib_w_2 d-margins topcoat-button" data-uib="topcoat/button" data-ver="0" onclick='location.href="index.py"'>Volver</button>
  71.  <span class="uib_shim"></span>
  72.  
  73.                </div>
  74.              </div>
  75.              <span class="uib_shim"></span>
  76.            </div>
  77.          </div>
  78.          <!-- /upage-content -->
  79.  
  80.        </div>
  81.        <!-- /upage-outer -->
  82.  
  83.      </div>
  84.      <!-- /upage -->
  85.  
  86.    </div>
  87.    <!-- /uwrap -->
  88.  </body>
  89.  <span id="loader" style="display:none;"></span>
  90.  <script language="javascript">
  91.  
  92.  function comando(cmd){
  93.  
  94. $("#loader").load("comando_rapido.py", {"comando":cmd});
  95.  
  96.  }
  97.  function matar_proceso(param){
  98.  
  99. if(param == 'mostrar'){
  100. $("#matar_proceso").fadeIn();
  101. $("#iniciar_proceso").fadeOut();
  102. }else if(param == 'kill'){
  103. proceso = $("input[name=proceso]").val();
  104. $("#loader").load("comando_rapido.py", {"kill": proceso});
  105. $("#matar_proceso").fadeOut();
  106. $("input[name=proceso]").val("");
  107. }
  108.  }
  109.  
  110.  function iniciar_proceso(accion){
  111.  
  112.  if (accion == "mostrar"){
  113.  
  114. $("#matar_proceso").fadeOut();
  115. $("#iniciar_proceso").fadeIn();
  116.  
  117.  }else if(accion == "iniciar"){
  118.  
  119.  
  120. nuevo_proceso = $("input[name=iniciar_proceso]").val();
  121. $("#loader").load("comando_rapido.py", {"correr": nuevo_proceso});
  122. $("#iniciar_proceso").fadeOut();
  123. $("input[name=iniciar_procesoproceso]").val("");
  124.  
  125.  }
  126.  
  127.  }
  128.  </script>
  129.  
  130.  
  131. </html>'''
  132.  
  133. logueado = False
  134. lista_usuarios = ["admin", "JaAViEr"] #Usuarios
  135. lista_passwords = ["root", "toor"] # Contrase&#241;as
  136. method = os.environ['REQUEST_METHOD']
  137. lectura_cookies = os.environ.get('HTTP_COOKIE')
  138. if lectura_cookies:
  139. valores_cookie = Cookie.SimpleCookie(lectura_cookies)
  140. session_actual = valores_cookie['sess'].value # session_actual = cookie "sess"
  141.  
  142. if session_actual != "false":
  143. for a, b in zip(lista_usuarios, lista_passwords):
  144.  
  145. session_temporal = a + b
  146. session_temporal = md5.md5(session_temporal).hexdigest()
  147.  
  148. if session_actual == session_temporal:
  149. logueado = True # Login coincide
  150. break
  151.  
  152. else:
  153.  
  154. pass
  155. else:
  156.  
  157. pass
  158.  
  159. if logueado:
  160. if os.name == "nt":
  161.  
  162. so = "windows"
  163.  
  164. else:
  165.  
  166. so = "unix"
  167.  
  168. if method == "GET":
  169.  
  170. print code_terminal
  171.  
  172. elif method == "POST":
  173.  
  174. form = cgi.FieldStorage()
  175. comando = form.getvalue("comando")
  176. kill = form.getvalue("kill")
  177. correr = form.getvalue("correr")
  178. iniciar_proceso = ""
  179. matador = ""
  180.  
  181. try:
  182.  
  183. if correr:
  184.  
  185. if so == "windows":
  186.  
  187. iniciar_proceso = "start %s" % (correr)
  188.  
  189. elif so == "unix":
  190.  
  191. iniciar_proceso = "%s" % (correr)
  192.  
  193. subprocess.call(iniciar_proceso)
  194.  
  195. if kill:
  196.  
  197. if so == "windows":
  198.  
  199. matador = "taskkill /F /IM %s" % (kill)
  200.  
  201. elif so == "unix":
  202.  
  203. matador = "pkill -9 %s" % (kill)
  204.  
  205. kill = subprocess.call(matador)
  206. kill.close()
  207.  
  208. if comando == "apagar":
  209.  
  210. if so == "windows":
  211.  
  212. accion = "shutdown /S /T 60"
  213.  
  214. elif so == "unix":
  215.  
  216. accion = "sudo poweroff"
  217.  
  218.  
  219. elif comando == "reiniciar":
  220.  
  221. if so == "windows":
  222.  
  223. accion = "shutdown /R /T 60"
  224.  
  225. elif so == "unix":
  226.  
  227. accion = "sudo reboot"
  228.  
  229. #accion = ""
  230.  
  231. elif comando == "cancelar salida":
  232.  
  233. if so == "windows":
  234.  
  235. accion = "shutdown /A"
  236.  
  237. elif so == "unix":
  238.  
  239. accion = ""
  240.  
  241. #accion = ""
  242.  
  243.  
  244. action = subprocess.call(accion)
  245. action.close()
  246. except:
  247.  
  248. pass
  249.  
  250. else:
  251. print "<script>location.href='index.py';</script>"
logout.py

Código
  1. import cgi
  2. '''
  3. Autor: JaAViEr
  4. Twitter: @javieresteban__
  5. Website: http://codigo.ga
  6. '''
  7. print "Content-Type: text/html"
  8. print "Set-Cookie: sess=false"
  9. print "Location:index.py"
  10. print
  11. print "<script>location.href='index.py';</script>"

Un par de Screenshots de como luce el programa...
Identificación

Panel de control

Consola-Terminal Remota

Comando rápidos

Comandos rápidos - Iniciar Proceso

Comandos rápidos - Matar Proceso
14  Foros Generales / Foro Libre / [Dato]BTC Cloud Mining en: 14 Julio 2014, 00:26 am
Hola, muy buenos días.

Hace unos días me topé con un servicio de BTC Cloud Mining, el cuál nos permite minar BTC sin tener que comprar algún tipo de Hardware, solo invirtiendo BTC en GHS (Potencia) , los BTC minados son depositados a tu cuenta y puedes re-invertir lo ganado en más potencia, lo que obviamente se traduce en mayor cantidad de GHS = Mayor cantidad de ganancias en BTC.

¡ Se los recomiendo a toda costa !

Una vez que adquieres GHS , el proceso de minado comienza automáticamente.

Luego de Crear una Cuenta vas a "Balance" y puedes hacer depósitos en BTC a la cuenta que se te ha asignado, de esa forma puedes invertir tus BTC en más GHS.

Saludos, Javier.
15  Programación / Scripting / Re: [Código-PyQT4]Protector de Archivo - JaAViEr en: 27 Abril 2014, 06:42 am
buen code , parece que volviste a programar javier.
Estoy intentando retomar el ritmo de PyQT4 :) , hace mucho no programaba Python :)
16  Programación / Scripting / [Código-PyQT4]Protector de Archivo - JaAViEr en: 26 Abril 2014, 05:55 am
Hola, buenos días!

El siguiente programa tiene por función el poder restaurar un archivo que se ha modificado o eliminado.

El funcionamiento del programa es muy sencillo



Clic en "Buscar..." , ubicamos el archivo que deseamos proteger y damos clic en "Abrir" , una vez hecho esto el programa ya estará atento a los cambios del programa. El programa lanzará un alerta en caso de que:
  • El archivo se haya eliminado.
  • El archivo se haya modificado.
Junto con cualquiera de ambas alertas el programa nos dará la posibilidad de restaurar a la versión anterior (A la versión del archivo al momento de ejecutarse este programa y seleccionar el archivo)
Sin más que decir, el código
Código
  1. # -*- coding: utf-8 -*-
  2.  
  3. #Autor: JaAViEr | 0X5D
  4. #Twitter: @javieresteban__
  5.  
  6. from PyQt4 import QtCore, QtGui
  7. import sys, threading, os
  8.  
  9. try:
  10.    _fromUtf8 = QtCore.QString.fromUtf8
  11. except AttributeError:
  12.    def _fromUtf8(s):
  13. return s
  14.  
  15. class Formulario(QtGui.QWidget):
  16.  
  17. def __init__(self):
  18.  
  19. QtGui.QWidget.__init__(self)
  20. self.setWindowTitle("Protector de Archivos :: 2014")
  21. self.setFixedSize(400, 48)
  22. self.gridLayout = QtGui.QGridLayout(self)
  23. self.label = QtGui.QLabel(self)
  24. self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
  25. self.archivo = QtGui.QLineEdit(self)
  26. self.archivo.setDisabled(True)
  27. self.gridLayout.addWidget(self.archivo, 0, 1, 1, 1)
  28. self.boton = QtGui.QPushButton(self)
  29. self.gridLayout.addWidget(self.boton, 0, 2, 1, 1)
  30. self.label.setText("Archivo:")
  31. self.boton.setText("Buscar...")
  32. self.connect(self.boton, QtCore.SIGNAL("clicked()"), self.buscar_archivo)
  33. self.connect(self.archivo, QtCore.SIGNAL("returnPressed()"), self.empezar)
  34.  
  35. def buscar_archivo(self):
  36.  
  37. self.file = QtGui.QFileDialog.getOpenFileName(self, 'Buscar Archivo', '')
  38. leer = open(self.file, "rb")
  39. self.lineas = leer.read()
  40. leer.close()
  41. self.archivo.setText(self.file)
  42. self.size = os.path.getsize(self.file)
  43. self.empezar()
  44.  
  45. def empezar(self):
  46.  
  47. h = Hilo()
  48. h.start()
  49.  
  50. class Hilo(threading.Thread):
  51.  
  52. def run(self):
  53.  
  54. while True:
  55. try:
  56. open(form.file)
  57. estado = True
  58. except:
  59. estado = False
  60.  
  61. if estado:
  62. tama = os.path.getsize(form.file)
  63. if tama == form.size:
  64. pass
  65. else:
  66. self.restaurar()
  67. else:
  68. self.restaurar()
  69.  
  70. def restaurar(self):
  71.  
  72. try:
  73. f = open(form.file, "wb")
  74. f.write(form.lineas)
  75. f.close()
  76. QtGui.QMessageBox.about(None, 'Alerta',_fromUtf8('El archivo se restaur&#243; exitosamente!'))
  77. except:
  78. QtGui.QMessageBox.about(None, 'Alerta',_fromUtf8('Error al intentar restaurar!'))
  79. app = QtGui.QApplication(sys.argv)
  80. form = Formulario()
  81. form.show()
  82. app.exec_()
  83.  

Saludos, Javier.
17  Programación / Scripting / [Código-PyQT4] Manejo de Stock sencillo V1 - JaAViEr en: 26 Abril 2014, 01:04 am
Hola, muy buenos días.

Hace unos días re-re-re-re-tome PyQT4 & SQLite, con lo que se me ocurrió hacer un programa (a forma de práctica) que me ayude a manejar el Stock de productos, con opción de:
  • Eliminar Producto
  • Agregar Producto
  • Actualizar Producto
El programa luce exactamente así:


Para Editar o Actualizar Producto primero debemos seleccionar el producto y posteriormente dar clic en el botón de la acción que deseamos realizar
Actualizar Producto:

Agregar Producto:


Sin más preámbulos , el código:

Código
  1. # -*- coding: cp1252 -*-
  2.  
  3. from PyQt4 import QtCore, QtGui
  4. import sys, sqlite3
  5.  
  6. try:
  7.    _fromUtf8 = QtCore.QString.fromUtf8
  8. except AttributeError:
  9.    def _fromUtf8(s):
  10. return s
  11.  
  12. class Formulario(QtGui.QWidget):
  13.  
  14. def __init__(self, parent=None):
  15.  
  16. QtGui.QWidget.__init__(self, parent)
  17. self.setFixedSize(591, 471)
  18. self.gridLayout = QtGui.QGridLayout(self)
  19. self.label = QtGui.QLabel(self)
  20. self.gridLayout.addWidget(self.label, 0, 0, 1, 2)
  21. self.treeWidget = QtGui.QTreeWidget(self)
  22. self.treeWidget.header().setDefaultSectionSize(150)
  23. self.gridLayout.addWidget(self.treeWidget, 1, 0, 1, 3)
  24. self.boton_eliminar = QtGui.QPushButton(self)
  25. self.gridLayout.addWidget(self.boton_eliminar, 2, 0, 1, 1)
  26. self.boton_agregar = QtGui.QPushButton(self)
  27. self.gridLayout.addWidget(self.boton_agregar, 2, 1, 1, 1)
  28. self.boton_actualizar = QtGui.QPushButton(self)
  29. self.gridLayout.addWidget(self.boton_actualizar, 2, 2, 1, 1)
  30. self.setWindowTitle("Visualizador de Stock")
  31. self.label.setText(_fromUtf8("Informaci&#243;n del stock actual:"))
  32. self.treeWidget.headerItem().setText(0, "ID")
  33. self.treeWidget.headerItem().setText(1, "Producto")
  34. self.treeWidget.headerItem().setText(2, "Precio unitario")
  35. self.treeWidget.headerItem().setText(3, "Cantidad")
  36. __sortingEnabled = self.treeWidget.isSortingEnabled()
  37. self.treeWidget.setSortingEnabled(False)
  38.  
  39. self.conexion = sqlite3.connect("stock.db")
  40. self.controla = self.conexion.cursor()
  41. try:
  42. self.controla.execute("CREATE TABLE stock (id int, nombre text, precio int, cantidad int)")
  43. self.controla.execute("INSERT INTO stock VALUES (1, 'Producto Demo', 2500, 100)")
  44. self.commit()
  45. except:
  46. pass
  47.  
  48. self.treeWidget.setSortingEnabled(__sortingEnabled)
  49. self.boton_eliminar.setText("Eliminar producto")
  50. self.boton_agregar.setText("Agregar producto")
  51. self.boton_actualizar.setText(_fromUtf8("Actualizar informaci&#243;n"))
  52. self.connect(self.boton_eliminar, QtCore.SIGNAL("clicked()"), self.eliminar)
  53. self.connect(self.boton_agregar, QtCore.SIGNAL("clicked()"), self.agregar)
  54. self.connect(self.boton_actualizar, QtCore.SIGNAL("clicked()"), self.actualizar)
  55. self.connect(self.treeWidget, QtCore.SIGNAL("itemPressed(QTreeWidgetItem*, int)"), self.seleccion)
  56. self.carga()
  57.  
  58. def carga(self):
  59.  
  60. self.treeWidget.reset()
  61. self.controla.execute("SELECT * FROM stock")
  62. l = 0
  63. for row in self.controla:
  64. item_0 = QtGui.QTreeWidgetItem(self.treeWidget)
  65. id, nombre, precio, cantidad = row
  66. self.treeWidget.topLevelItem(l).setText(0, str(id))
  67. self.treeWidget.topLevelItem(l).setText(1, nombre)
  68. self.treeWidget.topLevelItem(l).setText(2, str(precio))
  69. self.treeWidget.topLevelItem(l).setText(3, str(cantidad))
  70. item_0 = QtGui.QTreeWidgetItem(self.treeWidget)
  71. l = l + 1
  72.  
  73. self.conexion.commit()
  74.  
  75. def agregar(self):
  76.  
  77. agregar.show()
  78.  
  79. def seleccion(self, qt, i):
  80. self.item = self.treeWidget.currentItem()
  81. self.id_prod = self.item.text(0)
  82. self.nombre_prod = self.item.text(1)
  83. self.precio_prod = self.item.text(2)
  84. self.cantidad_prod = self.item.text(3)
  85.  
  86. def eliminar(self):
  87. if self.id_prod:
  88. reply = QtGui.QMessageBox.question(self,  'Message',  _fromUtf8('&#191;Est&#225;s seguro?'),  QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes)
  89. if reply == QtGui.QMessageBox.Yes:
  90. self.controla.execute("DELETE FROM stock WHERE id = %s" % self.id_prod)
  91. self.conexion.commit()
  92. self.carga()
  93.  
  94. def actualizar(self):
  95.  
  96. actualizar.cargador(str(self.id_prod), self.nombre_prod, str(self.precio_prod), str(self.cantidad_prod))
  97. actualizar.show()
  98.  
  99. class Agregar(QtGui.QWidget):
  100.  
  101. def __init__(self, parent=None):
  102.  
  103. QtGui.QWidget.__init__(self, parent)
  104. self.setFixedSize(400, 151)
  105. self.gridLayout = QtGui.QGridLayout(self)
  106. self.label_nombre = QtGui.QLabel(self)
  107. self.gridLayout.addWidget(self.label_nombre, 0, 0, 1, 1)
  108. self.input_nombre = QtGui.QLineEdit(self)
  109. self.gridLayout.addWidget(self.input_nombre, 0, 2, 1, 1)
  110. self.label_precio = QtGui.QLabel(self)
  111. self.gridLayout.addWidget(self.label_precio, 1, 0, 1, 1)
  112. self.input_precio = QtGui.QLineEdit(self)
  113. self.gridLayout.addWidget(self.input_precio, 1, 2, 1, 1)
  114. self.label_cantidad = QtGui.QLabel(self)
  115. self.gridLayout.addWidget(self.label_cantidad, 2, 0, 1, 2)
  116. self.input_cantidad = QtGui.QLineEdit(self)
  117. self.gridLayout.addWidget(self.input_cantidad, 2, 2, 1, 1)
  118. self.input_id = QtGui.QLineEdit(self)
  119. self.gridLayout.addWidget(self.input_id, 3, 2, 1, 1)
  120. self.label_id = QtGui.QLabel(self)
  121. self.gridLayout.addWidget(self.label_id, 3, 0, 1, 1)
  122. self.boton_agregar = QtGui.QPushButton(self)
  123. self.gridLayout.addWidget(self.boton_agregar, 4, 0, 1, 3)
  124. self.setWindowTitle("Agregar producto")
  125. self.label_nombre.setText("Nombre:")
  126. self.label_precio.setText("Precio:")
  127. self.label_cantidad.setText("Cantidad:")
  128. self.label_id.setText("ID:")
  129. self.boton_agregar.setText("Agregar")
  130. self.connect(self.boton_agregar, QtCore.SIGNAL("clicked()"), self.agregar_producto)
  131.  
  132. def agregar_producto(self):
  133.  
  134. self.conexion = sqlite3.connect("stock.db")
  135. self.get = self.conexion.cursor()
  136. id = str(self.input_id.text())
  137. nombre = str(self.input_nombre.text())
  138. precio = str(self.input_precio.text())
  139. cantidad = str(self.input_cantidad.text())
  140. query = "SELECT * FROM stock WHERE id = %s" % id
  141. if self.get.execute(query).fetchone() != None:
  142. QtGui.QMessageBox.question(self,  'Alerta',  _fromUtf8('El ID ya est&#225; asociado a otro producto.'))
  143. else:
  144. self.get.execute("INSERT INTO stock VALUES (%s, '%s', %s, %s)" % (int(id), nombre, int(precio), int(cantidad)))
  145. self.conexion.commit()
  146. form.carga()
  147. self.hide()
  148.  
  149. class Actualizar(QtGui.QWidget):
  150.  
  151. def __init__(self):
  152.  
  153. QtGui.QWidget.__init__(self)
  154. self.setFixedSize(400, 151)
  155. self.gridLayout = QtGui.QGridLayout(self)
  156. self.label_nombre = QtGui.QLabel(self)
  157. self.gridLayout.addWidget(self.label_nombre, 0, 0, 1, 1)
  158. self.input_nombre = QtGui.QLineEdit(self)
  159. self.gridLayout.addWidget(self.input_nombre, 0, 2, 1, 1)
  160. self.label_precio = QtGui.QLabel(self)
  161. self.gridLayout.addWidget(self.label_precio, 1, 0, 1, 1)
  162. self.input_precio = QtGui.QLineEdit(self)
  163. self.gridLayout.addWidget(self.input_precio, 1, 2, 1, 1)
  164. self.label_cantidad = QtGui.QLabel(self)
  165. self.gridLayout.addWidget(self.label_cantidad, 2, 0, 1, 2)
  166. self.input_cantidad = QtGui.QLineEdit(self)
  167. self.gridLayout.addWidget(self.input_cantidad, 2, 2, 1, 1)
  168. self.label_id = QtGui.QLabel(self)
  169. self.gridLayout.addWidget(self.label_id, 3, 0, 1, 1)
  170. self.input_id = QtGui.QLineEdit(self)
  171. self.input_id.setDisabled(True)
  172. self.gridLayout.addWidget(self.input_id, 3, 2, 1, 1)
  173. self.boton_actualizar = QtGui.QPushButton(self)
  174. self.gridLayout.addWidget(self.boton_actualizar, 4, 0, 1, 3)
  175. self.setWindowTitle("Agregar producto")
  176. self.label_nombre.setText("Nombre:")
  177. self.label_precio.setText("Precio:")
  178. self.label_cantidad.setText("Cantidad:")
  179. self.label_id.setText("ID:")
  180. self.boton_actualizar.setText("Actualizar")
  181. self.connect(self.boton_actualizar, QtCore.SIGNAL("clicked()"), self.actualizar)
  182.  
  183. def cargador(self, id="", nombre="", precio="", cantidad=""):
  184.  
  185. self.input_id.setText(id)
  186. self.input_nombre.setText(nombre)
  187. self.input_precio.setText(precio)
  188. self.input_cantidad.setText(cantidad)
  189.  
  190. def actualizar(self):
  191.  
  192. self.id = str(self.input_id.text())
  193. self.nombre = str(self.input_nombre.text())
  194. self.precio = str(self.input_precio.text())
  195. self.cantidad = str(self.input_cantidad.text())
  196. self.conexion = sqlite3.connect("stock.db")
  197. self.get = self.conexion.cursor()
  198. query = "UPDATE stock SET nombre = '%s', precio = %s, cantidad = %s WHERE id = %s " % (self.nombre, int(self.precio), int(self.cantidad), int(self.id))
  199. try:
  200. self.get.execute(query)
  201. self.conexion.commit()
  202. form.carga()
  203. self.hide()
  204. QtGui.QMessageBox.question(self,  'Alerta',  _fromUtf8('Producto actualizado correctamente.'))
  205. except:
  206. QtGui.QMessageBox.question(self,  'Alerta',  _fromUtf8('No se pudo actualizar.'))
  207.  
  208. app = QtGui.QApplication(sys.argv)
  209. actualizar = Actualizar()
  210. agregar = Agregar()
  211. form = Formulario()
  212. form.show()
  213. app.exec_()
  214.  

Fuente: http://codigo.ga/python/python-qt4-manejo-de-stock-sencillo-v1-jaavier/
18  Programación / Scripting / Re: [Python] Traductor Ingles-Español en: 16 Abril 2014, 12:26 pm
Yo programé un traductor español inglés sin internet. La cosa es que tu añades las palabras, luego es cosa de ponerse a escribir y traduce. Nunca lo he acabado, falta gente :P
19  Programación / Desarrollo Web / [WordPress] AddThis: Compartiendo nuestras entradas en Redes Sociales en: 12 Abril 2014, 06:47 am
Fuente original del artículo: http://miweb.in/addthis-compartiendo-nuestras-entradas-en-redes-sociales/

Si eres de los que maneja un blog con presencia en redes sociales como Facebook & Twitter este plugin te encantará. Se trata del plugin "AddThis", el cual nos añadirá en cada entrada, página y categoría una barra completa para compartir en cientos de servicios, entre ellos Twitter, Facebook, Bit.ly, E-mail, etc.


¡ Manos a la obra !


Para llevar acabo nuestro cometido, es preciso que se dirijan a Plugins &gt; Añadir Nuevo > Buscar e ingresar "Addthis".



 

Yo ya lo tengo instalado, pero le das clic a "Instalar ahora" y lo activas. Una vez hecho esto podemos pasar a la configuración de nuestro nuevo plugin.


Configurando AddThis
Nos dirigimos a Ajustes > AddThis

Te explico:

Top Sharing Tool : Si tienes activa esta opción, te añadirá la barra de compartir en la parte superior de cada página. Puedes deshabilitar esta opción seleccionando "Do not show a sharing tool at the Top of posts".

Bottom Sharing Tool: Añade la barra de compartir en la parte inferior de cada página. Al igual que en la opción anterior, puedes desactivarla cliqueando en "Do not show a sharing tool at the Top of posts".

A la derecha tenemos un panel de como se verían nuestras entradas con la actual configuración, como se ve en el ejemplo, solo está marcado que añada la barra en la parte inferior de nuestras páginas.



Este plugin nos frece la posibilidad de desactivar estas barras al momento de añadir una nueva página, entrada o categoría.

¿ Alguna consulta ? No dudes en enviarla en el comentario de esta entrada.

 

Saludos, Javier.
20  Programación / Desarrollo Web / Re: [WordPress] ¿ Cómo añadir una entrada en WordPress 3.8.2 ? en: 12 Abril 2014, 06:47 am
Mmm buen aporte ya lo sabía pero para la gente nueva en wordpress le vendrá bien este tipo de tutoriales, crear nuevas pestañas y cosas así yo estaba perdido al comenzar con wordpress y no paraba de Googlear para enocontrar soluciones, buen aporte.

Saludos.
Justamente de estas cosas estoy escribiendo en el Blog, así la gente se inicia en WordPress.
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 24
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines