Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: winnipu en 21 Julio 2016, 10:20 am



Título: python wifi macs bajo windows
Publicado por: winnipu en 21 Julio 2016, 10:20 am
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"]


Título: Re: python wifi macs bajo windows
Publicado por: tincopasan en 21 Julio 2016, 15:01 pm
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.


Título: Re: python wifi macs bajo windows
Publicado por: winnipu en 22 Julio 2016, 08:20 am
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.





Título: Re: python wifi macs bajo windows
Publicado por: tincopasan en 22 Julio 2016, 16:03 pm
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.