Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from subprocess import Popen, PIPE
- from getpass import getuser
- from sys import exit
- class AP:
- def __init__(self):
- self.mac = '00:00:00:00:00:00'
- self.essid = ''
- self.channel = -1
- self.frequency = .0
- self.signal_level = 0
- self.signal_quality = .0
- self.encryption_mode = None
- self.bit_rates = []
- self.last_beacon = 0
- class Scan:
- def __init__(self):
- self.cells = []
- def read(self, data):
- d = [l.strip() for l in data.splitlines()]; i = 0
- mac = d[i].split('-')[1][-17:]; i+=1
- channel = int(d[i].split(':')[1]); i+=1
- frequency = float(d[i].split(':')[1][:5]); i+=1
- quality = float(eval(d[i].split()[0].split('=')[1]+'.'))
- level = int(d[i].split()[2].split('=')[1][:3]); i+=1
- enc = bool(d[i].split(':')[1]=='on'); i+=1
- essid = d[i].split(':')[1][1:-1]; i+=1
- bitrates = [int(v[:2].strip())
- for v in d[i].split(':')[-1].split(';')]; i+=1
- bitrates.append([int(v[:2].strip())
- for v in d[i].split(':')[-1].split(';')]); i+=1
- bitrates.append([int(v[:2].strip())
- for v in d[i].split(':')[-1].split(';')]); i+=3
- lastbeacon = int(d[i].split(':')[-1][:-6]); i+= 1
- mode = 'WPE' if enc else ''
- while d[i]:
- if d[i].find('WPA2') != -1:
- mode = 'WPA2'
- elif d[i].find('WPA') != -1:
- mode = 'WPA'
- i+=1
- newcell = AP()
- newcell.mac = mac
- newcell.essid = essid
- newcell.channel = channel
- newcell.frequency = frequency
- newcell.signal_level = level
- newcell.signal_quality = quality
- newcell.encryption_mode = mode
- newcell.bit_rates = bitrates
- newcell.last_beacon = lastbeacon
- self.cells.append(newcell)
- def get(self, attr, value):
- result = []
- for cell in self.cells:
- v = getattr(cell, attr).lower()
- opts = [v.lower() for v in list(value)]
- if v in opts:
- result.append(cell)
- return result
- def getscandata(dev):
- cmd = 'iwlist %s scan'%dev
- pipe = Popen(cmd.split(), 1024, stdout=PIPE, stderr=PIPE)
- if not pipe.stderr.read():
- return pipe.stdout.read().split('Cell')
- if __name__ == '__main__':
- if getuser() != 'root':
- print 'Run with root'
- exit()
- scan = Scan()
- print 'scanning... '
- rawdata = getscandata('wlan3')
- print 'done'
- print 'parsing data...'
- for d in rawdata[1:]:
- scan.read(d)
- print 'done'
- print 'Listing all wpa protected Access Points'
- for ap in scan.get('encryption_mode', ['wpa', 'wpa2']):
- print "%s - %.2f%%"%(ap.essid, ap.signal_quality*100)
Add Comment
Please, Sign In to add comment