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


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  python wifi macs bajo windows
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: python wifi macs bajo windows  (Leído 2,269 veces)
winnipu

Desconectado Desconectado

Mensajes: 91


Ver Perfil
python wifi macs bajo windows
« en: 21 Julio 2016, 10:20 »

Hola, alguien sabe que librerias hay que usar con python y corriendo bajo windows para ver las macs de los router wifi que hay en un determinado lugar?
Mi intencion es correr un script python que me muestre el nombre de las redes wifi, y las mac de sus routers que hay al alcance de mi antena.

He encontrado este codigo para python 2.7 pero quisiera actualizarlo a 3.4 y no se como hacerlo. No se como solventar lo de map para 3.4

Código:
import subprocess

ssid = {}
ssids = []
cmd = subprocess.Popen('netsh wlan show networks mode=BSSID',
                       shell=True, stdout=subprocess.PIPE)
for line in cmd.stdout:
    l = map(lambda x: x.strip(), line.strip().split(":"))
    if len(l) > 1:
        key, value = l[0], l[1]
        if key.startswith("SSID"):
            key = "name"
            if ssid:
                ssids.append(ssid)
            ssid = {}
            ssid[key] = value
        if "name" in ssid:
            ssid[key] = value
ssids.append(ssid)

# example of how to use ssids, list of ssid dictionaries
for ssid in ssids:
    print ssid["name"], ssid["Encryption"]


« Última modificación: 21 Julio 2016, 12:20 por winnipu » En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.225

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: python wifi macs bajo windows
« Respuesta #1 en: 21 Julio 2016, 15:01 »

1) deberías saber que devuelve(tipo) cmd.stdout
2)la  diferencia de map entre las versiones es que en 3.x devuelve un objeto, lo cual se solventa pasandolo a lista
3)igual si map no te gusta(en 3.x algunos lo desprecian) podés usar compresión de listas
4)y más importante ¿que querés solventar? ¿dónde pusiste el error que te da? salvo como dije lo quieras cambiar.
5)debuggeando el código no es tan difícil.


En línea

winnipu

Desconectado Desconectado

Mensajes: 91


Ver Perfil
Re: python wifi macs bajo windows
« Respuesta #2 en: 22 Julio 2016, 08:20 »

Como bien dices al ser cmd.stdout me genera este error:

l = map(lambda x: x.strip(), line.strip().split(":"))
TypeError: 'str' does not support the buffer interface

Trato de hacer un cast a map pero si lo hago me genera el mismo error. Realmente no controlo la funcion map y eso es lo que me esta generando el problema.



En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.225

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: python wifi macs bajo windows
« Respuesta #3 en: 22 Julio 2016, 16:03 »

tengo la sensación de que escribo en arameo, no importa nada que ponga
Citar
1) deberías saber que devuelve(tipo) cmd.stdout

Código
  1. for line in cmd.stdout:
  2. print(type (line))
  3.  

Citar
5)debuggeando el código no es tan difícil.
 

>>> <class 'bytes'>

lo cual me lleva a:

Código
  1. import subprocess
  2. cmd = subprocess.Popen('netsh wlan show networks mode=BSSID',
  3.                       shell=True, stdout=subprocess.PIPE)
  4. for line in cmd.stdout:
  5.         l = line.strip().split(":")
  6.  

>>> builtins.TypeError: 'str' does not support the buffer interface      
¿y dónde esta map?
ahhhhh, ahora veo, map no tiene nada que ver!!!!

hay tantas soluciones que da asco, pero solo voy a mostrarte una posible, porque en realidad parece que no te interesa aprender, sólo copiar.

Código
  1. for line in cmd.stdout:
  2.         linea= line.decode("cp1252")
  3.         l = linea.strip().split(":")
  4.         print(l)
  5.         print(type(l))
  6.  
      
>>>  <class 'list'>
milagro!!! ya devuelve una lista y no da el error!!!

pero... no es código original, bueno

Código
  1. linea= line.decode("cp1252")
  2.         l = map(lambda x: x.strip(), linea.strip().split(":"))
  3.         print(l)
  4.         print(type(l))
  5.  
      

>>> <map object at 0x0267B5D0>
>>> <class 'map'>

Citar
      
2)la  diferencia de map entre las versiones es que en 3.x devuelve un objeto, lo cual se solventa pasandolo a lista

 o sea, ¿algo así?
Código
  1. l = list(map(lambda x: x.strip(), linea.strip().split(":")))
  2.  print(type(l))
  3.  

>>> <class 'list'>
 
 guauuuu lo que es la ciencia!!!!
 pero....

Citar

 3)igual si map no te gusta(en 3.x algunos lo desprecian) podés usar compresión de listas
 

 ¿en que idioma está eso? no sé, pero buscando un poco en google
Código
  1.  
  2. l = [x.strip() for x in linea.strip().split(":")]
  3. print(type(l))
  4.  

y da lo mismo!!!, ah no, para, no puse los resultados de l, bueno si llegas a entender esto, poné print(l) y miralo vos.
 
Citar

 4)y más importante ¿que querés solventar? ¿dónde pusiste el error que te da? salvo como dije lo quieras cambiar.

 que bueno que entre algunos puntos, este se entendió!
 
Citar
Como bien dices al ser cmd.stdout me genera este error:

l = map(lambda x: x.strip(), line.strip().split(":"))
TypeError: 'str' does not support the buffer interface

Trato de hacer un cast a map pero si lo hago me genera el mismo error. Realmente no controlo la funcion map y eso es lo que me esta generando el problema.

y como dije antes¿que tiene que ver map?

en fin suerte en tu copia y pega de código, ahhh usa python 2.7 y te ahorrás aprender 3.X  

Saludos.
« Última modificación: 22 Julio 2016, 16:21 por tincopasan » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines