Bienvenido(a), Visitante. Por favor, ingresa o regístrate. ¿Perdiste tu email de activación?
  • Abril 23, 2017, 02:54:56 pm

Autor Tema: Detectar Unidades (HDD o FlashDrives)  (Leído 2906 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado k0ws

  • Underc0der
  • *
  • Mensajes: 145
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • I'm Back
    • Ver Perfil
  • Skype: k0wsit0
Detectar Unidades (HDD o FlashDrives)
« en: Febrero 20, 2014, 10:43:37 am »
Me aburria he hice este pequeño code para detectar ciertos tipos de unidades y listarlas:

Código: Python
  1. #############################################
  2. # Author: k0ws                              #
  3. # Usage: cUnidades()                        #
  4. # Webs: Indetectables ~ UdTools ~ Underc0de #
  5. #############################################
  6.  
  7. import win32file as file
  8. import win32api as api
  9. def cUnidades():
  10.  listdrives = api.GetLogicalDriveStrings().split("\x00")
  11.  i = 0
  12.  print "Lista de FlashDrives o HDD: "
  13.  for drive in listdrives:
  14.   if len(listdrives) == (i + 1):
  15.    break
  16.   if (file.GetDriveType(listdrives[i])) == 2:
  17.    try:
  18.     api.GetDiskFreeSpace(listdrives[i].replace('\\',''))
  19.     print listdrives[i] + " - Conectado"
  20.    except:
  21.     print listdrives[i] + " - Desconectado"
  22.   if (file.GetDriveType(listdrives[i])) == 3:
  23.    try:
  24.     api.GetDiskFreeSpace(listdrives[i].replace('\\',''))
  25.     print listdrives[i] + " - Conectado"
  26.    except:
  27.     print listdrives[i] + " - Desconectado"
  28.   i = i + 1
  29.  
  30. cUnidades()

Info sobre los tipos de unidades: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx
Se que se puede optimizar, pero paso  ::)

-Saludos-

Conectado ANTRAX

  • Administrator
  • *
  • Mensajes: 4943
  • Actividad:
    38.33%
  • Reputación 10
  • Sexo: Masculino
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #1 en: Febrero 20, 2014, 10:50:45 am »
Muy buen codigo bro!
Muy bueno verte por los lados de python!

Desconectado Sanko

  • Underc0der
  • *
  • Mensajes: 542
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • ¿Puedes?
    • Ver Perfil
    • Underc0de
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #2 en: Febrero 20, 2014, 11:20:57 am »
Muy bueno verte por python bro.
Para la próxima deberias contemplar usar librerias ntativas antes de hacer uso de las externas, habrá menos problemas con las dependencias y se reducirá el peso de la aplicación.

Ctypes es una buena solución, puedes importar las DLL's de windows y usar sus funciones, en este caso, GetLogicalDrives es de kernel32 y puedes usarla con ctypes:
"ctypes.windll.kernel32.GetLogicalDrives" -> http://www.nullege.com/codes/search/ctypes.windll.kernel32.GetLogicalDrives

Saludos bro
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Desconectado k0ws

  • Underc0der
  • *
  • Mensajes: 145
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • I'm Back
    • Ver Perfil
  • Skype: k0wsit0
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #3 en: Febrero 20, 2014, 11:36:00 am »
Muchas gracias Sanko, lo hare para la proxima  ;)

Desconectado deni_celine

  • Underc0der
  • *
  • Mensajes: 36
  • Actividad:
    0%
  • Reputación 0
  • un susurro con la fuerza de mil gritos
    • Ver Perfil
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #4 en: Febrero 20, 2014, 11:49:00 am »
interesante! hace poco estaba pensando en como detectar cuando se conecta un pendrive....

Desconectado 79137913

  • Co Admin
  • *
  • Mensajes: 521
  • Actividad:
    6.67%
  • Reputación 2
  • Sexo: Masculino
  • 4 Esquinas
    • MSN Messenger - fg_mdq@hotmail.com
    • Yahoo Instant Messenger - fg_mdq@yahoo.com
    • Ver Perfil
    • Doors.Party
    • Email
  • Skype: fg_mdq@hotmail.com
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #5 en: Febrero 20, 2014, 11:57:27 am »
HOLA!!!

No imports = Better Code

GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scout Team*                                                   DOORS.PARTY

Desconectado Once

  • Underc0der
  • *
  • Mensajes: 349
  • Actividad:
    5%
  • Reputación 0
    • Ver Perfil
    • El blog de Once
  • Twitter: @don_once
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #6 en: Febrero 20, 2014, 12:01:46 pm »
Muy bueno el código brothe, aparte de lo que te acaba de decir Sanko, te hago una observación más.

Cuando usas el for, no tienes que usar un contador entero (como sí se hace en los while) porque el for ya lleva la cuenta. Y si lo que haces es recorrer una lista como en tu caso, no es necesario que hagas esto: listdrives ya que la variable drive que definiste para el for tiene esa misma información; por lo que puedes cambiar el listdrives por drive

en lugar de:

Código: Python
  1. if (file.GetDriveType(listdrives[i])) == 2:

puedes poner:

Código: Python
  1. if (file.GetDriveType(drive)) == 2:

Y te evitas el contador.

Saludos!

Código: Python
  1.  

Desconectado deni_celine

  • Underc0der
  • *
  • Mensajes: 36
  • Actividad:
    0%
  • Reputación 0
  • un susurro con la fuerza de mil gritos
    • Ver Perfil
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #7 en: Febrero 20, 2014, 01:08:10 pm »
Basandome en tu code y en lo comentado por Sanko se me ocurre algo asi para detectar cuando algn conecta un pendrive

Código: Python
  1. import ctypes
  2. import time
  3. print "is running.."
  4. while(1):
  5.     drive_bitmask = ctypes.windll.kernel32.GetLogicalDrives()
  6.     for letter in range(65,91):
  7.         if drive_bitmask & 1:
  8.             unidad = chr(letter)+ u":\\"
  9.             if (ctypes.windll.kernel32.GetDriveTypeW(unidad)==2) :
  10.                 print "se ha insertado",unidad
  11.                 #hace algo
  12.                 time.sleep(3600) #duerme un ratito
  13.         drive_bitmask >>= 1
  14.  

Desconectado k0ws

  • Underc0der
  • *
  • Mensajes: 145
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • I'm Back
    • Ver Perfil
  • Skype: k0wsit0
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #8 en: Febrero 20, 2014, 01:50:31 pm »
Gracias 11Sep, eso del contador me ha pasado por que antes programa java y lo usaba mucho jajaja, ni me fije. Thx Bro.
@deni_celine: He mirado tu code por encima y no entiendo esta parte:
Código: Python
  1. if drive_bitmask & 1:

-Saludos-

Desconectado Sanko

  • Underc0der
  • *
  • Mensajes: 542
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • ¿Puedes?
    • Ver Perfil
    • Underc0de
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #9 en: Febrero 20, 2014, 03:07:13 pm »
Gracias 11Sep, eso del contador me ha pasado por que antes programa java y lo usaba mucho jajaja, ni me fije. Thx Bro.
@deni_celine: He mirado tu code por encima y no entiendo esta parte:
Código: Python
  1. if drive_bitmask & 1:

-Saludos-

Tomatelo como
Código: Python
  1. if drive_bitmask == 1:
o lo que vendría siendo lo mismo que
Código: Python
  1. if drive_bitmask:#True
a nivel de bits es lo mismo, pero mejor validado. Tal vez este metiendo la pata vaya, que nos explique el sino
« Última modificación: Febrero 20, 2014, 03:10:06 pm por Sanko »
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Desconectado deni_celine

  • Underc0der
  • *
  • Mensajes: 36
  • Actividad:
    0%
  • Reputación 0
  • un susurro con la fuerza de mil gritos
    • Ver Perfil
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #10 en: Febrero 20, 2014, 03:21:22 pm »
& es un AND a nivel de bits y va preguntando bit by bit si es verdadero , la siguiente instrucción es para moverse al siguiente bit
Código: Python
  1. drive_bitmask >>= 1
  2.  

 y Si como dice Sanko se obtendría el mismo resultado con

Código: Python
  1.     if drive_bitmask:#True
  2.  

pero mejor validado xd

Y se hace esto debido a que en el resultado de la función GetLogicalDrives el primer bit corresponde a la unidad A, el siguiente B, el tercero a C y asi sucesivamente.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364972%28v=vs.85%29.aspx

Bueno eso es lo que entendí  yo .... que solo estoy aprendiendo xd

Desconectado Sanko

  • Underc0der
  • *
  • Mensajes: 542
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • ¿Puedes?
    • Ver Perfil
    • Underc0de
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #11 en: Febrero 20, 2014, 03:26:32 pm »
& es un AND a nivel de bits y va preguntando bit by bit si es verdadero , la siguiente instrucción es para moverse al siguiente bit
Código: Python
  1. drive_bitmask >>= 1
  2.  

 y Si como dice Sanko se obtendría el mismo resultado con

Código: Python
  1.     if drive_bitmask:#True
  2.  

pero mejor validado xd

Y se hace esto debido a que en el resultado de la función GetLogicalDrives el primer bit corresponde a la unidad A, el siguiente B, el tercero a C y asi sucesivamente.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364972%28v=vs.85%29.aspx

Bueno eso es lo que entendí  yo .... que solo estoy aprendiendo xd

si eso decia la doc que retornaba, me habian dejado con la duda ya xd
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Desconectado overxfl0w13

  • Underc0der
  • *
  • Mensajes: 25
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • Hola1
    • Ver Perfil
  • Skype: overxfl0w13
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #12 en: Febrero 20, 2014, 04:31:18 pm »
& es un AND a nivel de bits y va preguntando bit by bit si es verdadero , la siguiente instrucción es para moverse al siguiente bit
Código: Python
  1. drive_bitmask >>= 1
  2.  

¿Moverse al siguiente bit? rara explicación para la operación de desplazamiento.

Lo que conseguimos con ese operador es desplazar los bits de la variable a izquierdas o a derechas dependiendo del sentido indicado. Python ya distingue si tiene que realizar desplazamiento lógico o aritmético distinguiendo si el valor es con signo o sin signo.

Para lo que se suelen utilizar es para realizar multiplicaciones eficientes a nivel del procesador ya que es menos costoso realizar un par de sumas y desplazamientos con un CSA y un Barrel shifter por ejemplo con coste log(n) + C que calcular una multiplicación usando el algoritmo de recodificación por parejas que suele dar buenos resultados con un coste de n/2.

Si te fijas al desplazar n veces un bit a izquierdas estamos multiplicando por 2^n mientras que al desplazar n bits a derechas dividimos por 2^n, esto lo aplican los compiladores en los casos en los que sea más eficiente separar una multiplicación de esta forma que utilizar el operador de multiplicación de la ALU.

Ej:   3 * 36 ( operamos con 7 bits ) -> 36 = 2^5 + 2^2 -> 3*36 = 3*2^5 + 3*2^2
       0000011 * 0100100
       Desplazamos los bits del 3 5 veces a izquierdas -> 1100000
       Desplazamos los bits del 3 2 veces a izquierdas -> 0001100
       Sumamos los resultados -> 1101100 = 108 = 3*36

Con pocos bits como este caso la ganancia es mínima, la multiplicación serían (con el algoritmo de recodificación por parejas, si no, serían 8 ciclos) 4 ciclos (3.5 redondeado al alza) + 1 de inicialización, en total 5 ciclos mientras que con el otro método hemos sacado el resultado con 3 ciclos.

Creo que me he ido del tema pero necesitaba explicarlo xD.

Gracias 11Sep, eso del contador me ha pasado por que antes programa java y lo usaba mucho jajaja, ni me fije. Thx Bro.
@deni_celine: He mirado tu code por encima y no entiendo esta parte:
Código: Python
  1. if drive_bitmask & 1:

-Saludos-

En java también existe esa forma de iterar:
Código: Java
  1.     public static <E> void testit(E[] vec){
  2.         for(E i : vec){
  3.             System.out.println(i.toString());
  4.         }
  5.     }
  6.    
  7.     public static void main(String args[])
  8.     {
  9.         Integer nVect[] = new Integer[5];
  10.         for(int i=0;i<5;i++) nVect[i] = new Integer(i);
  11.         testit(nVect);
  12.     }
  13.  

Un saludo :D
« Última modificación: Febrero 20, 2014, 04:41:02 pm por overxfl0w13 »

Desconectado deni_celine

  • Underc0der
  • *
  • Mensajes: 36
  • Actividad:
    0%
  • Reputación 0
  • un susurro con la fuerza de mil gritos
    • Ver Perfil
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #13 en: Febrero 20, 2014, 04:50:39 pm »
los resultados que obtiene la función son, en mi caso...

59322604 = 11100010010011000011101100
29661302 = 1110001001001100001110110
14830651 = 111000100100110000111011
7415325   = 1110001001001100001110

por eso digo que se va moviendo un bit, a la izquierda .... es una explicación un tanto rara, pero con el ejemplo se entiende.... como dije estoy aprendiendo y aún entiendo menos de la mitad de lo que dijiste xd , de todas formas es interesante
« Última modificación: Febrero 20, 2014, 06:07:35 pm por deni_celine »

Desconectado k0ws

  • Underc0der
  • *
  • Mensajes: 145
  • Actividad:
    0%
  • Reputación 0
  • Sexo: Masculino
  • I'm Back
    • Ver Perfil
  • Skype: k0wsit0
Re:Detectar Unidades (HDD o FlashDrives)
« Respuesta #14 en: Febrero 20, 2014, 04:52:23 pm »
Todo correcto  ;D

 


Ayúdanos con tu donación!