Quantcast
Channel: Preguntas más recientes con las etiquetas linux - Stack Overflow en español
Viewing all articles
Browse latest Browse all 1692

¿Cómo guardar la información de un archivo txt en un json usando python?

$
0
0

¡Hola! :D

Con ayuda del comando "iw" en Linux, hago un monitoreo de las redes Wi-Fi disponibles, el resultado lo guardo en un archivo txt. Todos los datos que se guardan, debo de separarlos y juntarlos en un json.

Esta es una muestra del archivo:

BSS 88:15:44:39:48:66(on wlp1s0) -- associated    last seen: 3905.256s [boottime]    TSF: 16770805099 usec (0d, 04:39:30)    freq: 2412    beacon interval: 100 TUs    capability: ESS Privacy ShortPreamble ShortSlotTime RadioMeasure (0x1431)    signal: -49.00 dBm    last seen: 3492 ms ago    Information elements from Probe Response frame:    SSID: Café Negro    Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0     DS Parameter set: channel 1BSS c8:d7:19:d4:7d:b9(on wlp1s0)    last seen: 3908.343s [boottime]    TSF: 7141877017905 usec (82d, 15:51:17)    freq: 5785    beacon interval: 100 TUs    capability: ESS Privacy (0x0011)    signal: -91.00 dBm    last seen: 405 ms ago    Information elements from Probe Response frame:    SSID: MOUREY C4    Supported rates: 6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0

Este es el código que he realizado (No tengo mucha experiencia en Python):

#!/usr/bin/python3.6import jsonimport datetime# Variablesaps = {}i = 0mac_range = slice(4, 21)with open('all_data.txt', 'r') as f:    text = f.readlines()# Función para obtener las direcciones MACdef getBSSID(text):    bssid = []     for line in text:         if line.startswith('BSS'):             mac = line[mac_range]             bssid.append(mac)    return bssid# Función para obtener el nombre de la red (SSID)def getSSID(text):    ssid = []    for line in text:        if line.startswith('    SSID'):            name_ssid = line[7:len(line)].strip()            ssid.append(name_ssid)    return ssid# Función para obtener el tiempo en que se identifico por última vezdef lastSeen(text):    last_seen = []    for line in text:        if line.startswith('    last seen'):            #print(line)            seconds = line            last_seen.append(seconds)    return last_seendef cleanLastSeen(lista):    new_last_seen = []    list_time = []    for i in range(len(lista)):        if i%2!=0:            new_last_seen.append(lista[i].strip())    for element in new_last_seen:         a = element.replace("last seen: ", "")#.replace("[boottime]", "")#.replace(" ", "")         list_time.append(a)    #return new_last_seen    return list_time# Función para obtener la potencia de la señaldef signal(text):    signal = []    for line in text:        if line.startswith('    signal'):            signal_dbm = line[8:len(line)].strip()            signal.append(signal_dbm)    return signaldef tsf(text):    tsf = []    for line in text:        if line.startswith('    TSF'):            tsf_data = line[5:len(line)].strip()            tsf.append(tsf_data)    return tsfdef freq(text):    freq = []    for line in text:        if line.startswith('    freq'):            freq_data = line[6:len(line)].strip()            freq.append(freq_data)    return freqdef beaconInterval(text):    beacon_interval = []    for line in text:        if line.startswith('    beacon interval'):            beacon_interval_data = line[17:len(line)].strip()            beacon_interval.append(beacon_interval_data)    return beacon_intervaldef capability(text):    capability = []    for line in text:        if line.startswith('    capability'):            capability_data = line[12:len(line)].strip()            capability.append(capability_data)    return capabilitydef supportedRates(text):    supported_rates = []    for line in text:        if(line.startswith('    Supported rates')):            supported_rates_data = line[17:len(line)].strip()            supported_rates.append(supported_rates_data)    return supported_rates#Pendientedef dsParameterSet(text):    ds_parameter_set = []    for line in text:        if(line.startswith('    DS Parameter set')):            ds_parameter_set_data = line[18:len(line)].strip()            ds_parameter_set.append(ds_parameter_set_data)        #else:            #ds_parameter_set_data = ""            #ds_parameter_set.append(ds_parameter_set_data)    return ds_parameter_setbssid = getBSSID(text)ssid = getSSID(text)signal = signal(text)last_seen = lastSeen(text)list_last_seen = cleanLastSeen(last_seen)tsf = tsf(text)freq = freq(text)beacon_interval = beaconInterval(text)capability = capability(text)supported_rates = supportedRates(text)#ds_parameter_set = dsParameterSet(text)json_data = {"aps": []}try:    for i in range(len(bssid)):        json_data["aps"].append({"mac_address": bssid[i],"ssid": ssid[i],"last_seen": list_last_seen[i],"signal": signal[i],"timestamp": datetime.datetime.now(),"tsf": tsf[i],"frequency": freq[i],"beacon_interval": beacon_interval[i],"capability": capability[i],"supported_rates": supported_rates[i],            #"ds_parameter_set": ds_parameter_set[i]            #"timestamp": ct        })except:    Exceptionprint(json.dumps(json_data, indent=4, default=str))

Esta es una muestra al ejecutar el código:

{"aps": [        {"mac_address": "88:15:44:39:48:66","ssid": "BBNet2","last_seen": "3492 ms ago","signal": "-49.00 dBm","timestamp": "2020-12-08 12:22:02.584492","tsf": "16770805099 usec (0d, 04:39:30)","frequency": "2412","beacon_interval": "100 TUs","capability": "ESS Privacy ShortPreamble ShortSlotTime RadioMeasure (0x1431)","supported_rates": "1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0"        },        {"mac_address": "e8:ed:05:32:91:e0","ssid": "AIKIDO DOJO\\x20","last_seen": "3314 ms ago","signal": "-37.00 dBm","timestamp": "2020-12-08 12:22:02.584503","tsf": "943151798510 usec (10d, 21:59:11)","frequency": "2437","beacon_interval": "100 TUs","capability": "ESS Privacy SpectrumMgmt ShortSlotTime (0x0511)","supported_rates": "1.0* 2.0* 5.5* 11.0* 18.0 24.0* 36.0 54.0"        },    ]}

El problema es que, al principio todos los datos eran similares, pero llega un punto el que una red sí cuenta con cierto dato pero otra red no lo tiene.Como por ejemplo, el dato DS Parameter set

Entonces, mi duda es, ¿cómo puedo guardar la información de cada red adecuadamente teniendo en cuenta que los datos pueden estar o no estar?

Espero puedan ayudarme con alguna idea.

¡Muchas Gracias!


Viewing all articles
Browse latest Browse all 1692

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>