Guest User

Untitled

a guest
Jan 23rd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.58 KB | None | 0 0
  1. from subprocess import Popen, PIPE
  2. from getpass import getuser
  3. from sys import exit
  4.  
  5. class AP:
  6.     def __init__(self):
  7.         self.mac = '00:00:00:00:00:00'
  8.         self.essid = ''
  9.         self.channel = -1
  10.         self.frequency = .0
  11.         self.signal_level = 0
  12.         self.signal_quality = .0
  13.         self.encryption_mode = None
  14.         self.bit_rates = []
  15.         self.last_beacon = 0
  16.        
  17. class Scan:
  18.     def __init__(self):
  19.         self.cells = []
  20.        
  21.     def read(self, data):
  22.         d = [l.strip() for l in data.splitlines()]; i = 0
  23.         mac = d[i].split('-')[1][-17:]; i+=1
  24.         channel = int(d[i].split(':')[1]); i+=1
  25.         frequency = float(d[i].split(':')[1][:5]); i+=1
  26.         quality = float(eval(d[i].split()[0].split('=')[1]+'.'))
  27.         level = int(d[i].split()[2].split('=')[1][:3]); i+=1
  28.         enc = bool(d[i].split(':')[1]=='on'); i+=1
  29.         essid = d[i].split(':')[1][1:-1]; i+=1
  30.         bitrates = [int(v[:2].strip())
  31.                     for v in d[i].split(':')[-1].split(';')]; i+=1
  32.         bitrates.append([int(v[:2].strip())
  33.                     for v in d[i].split(':')[-1].split(';')]); i+=1
  34.         bitrates.append([int(v[:2].strip())
  35.                     for v in d[i].split(':')[-1].split(';')]); i+=3
  36.         lastbeacon = int(d[i].split(':')[-1][:-6]); i+= 1
  37.         mode = 'WPE' if enc else ''
  38.         while d[i]:
  39.             if d[i].find('WPA2') != -1:
  40.                 mode = 'WPA2'
  41.             elif d[i].find('WPA') != -1:
  42.                 mode = 'WPA'
  43.             i+=1
  44.         newcell = AP()
  45.         newcell.mac = mac
  46.         newcell.essid = essid
  47.         newcell.channel = channel
  48.         newcell.frequency = frequency
  49.         newcell.signal_level = level
  50.         newcell.signal_quality = quality
  51.         newcell.encryption_mode = mode
  52.         newcell.bit_rates = bitrates
  53.         newcell.last_beacon = lastbeacon
  54.         self.cells.append(newcell)
  55.        
  56.     def get(self, attr, value):
  57.         result = []
  58.         for cell in self.cells:
  59.             v = getattr(cell, attr).lower()
  60.             opts = [v.lower() for v in list(value)]
  61.             if v in opts:
  62.                 result.append(cell)
  63.         return result
  64.     def get_sorted(self, attr, n=None, rev=False):
  65.         return sorted(self.cells,
  66.                       key=lambda c: getattr(c, attr),
  67.                       reverse=rev)[:n]
  68.      
  69. def getscandata(dev):
  70.     cmd = 'iwlist %s scan'%dev
  71.     pipe = Popen(cmd.split(), 1024, stdout=PIPE, stderr=PIPE)
  72.     if not pipe.stderr.read():
  73.         return pipe.stdout.read().split('Cell')
  74.        
  75.  
  76. if __name__ == '__main__':
  77.     if getuser() != 'root':
  78.         print 'Run with root'
  79.         exit()
  80.        
  81.     scan = Scan()
  82.    
  83.     print 'scanning... '
  84.     rawdata = getscandata('wlan3')
  85.     if not rawdata:
  86.         print 'error scanning network.'
  87.         exit()
  88.     print 'done'
  89.    
  90.     print 'parsing data...'
  91.     for d in rawdata[1:]:
  92.         scan.read(d)
  93.     print 'done'
  94.    
  95.     for ap in scan.get_sorted('signal_quality', 5, rev=True):
  96.         print '%s - %.2f%%'%(ap.essid, ap.signal_quality*100)
Add Comment
Please, Sign In to add comment