Advertisement
s4ros

Wisimito

Sep 29th, 2016
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.01 KB | None | 0 0
  1. import os
  2. import time
  3. import sys
  4. import subprocess
  5.  
  6. class c:
  7.     head = '\033[95m'
  8.     blue = '\033[94m'
  9.     green = '\033[92m'
  10.     warn = '\033[93m'
  11.     fail = '\033[91m'
  12.     e = '\033[0m'
  13.     b = '\033[1m'
  14.     u = '\033[4m'
  15.  
  16. # -----------------------------------------------------------------------
  17. def check_user_permissions():
  18.   """
  19.    Checks if script has root privileges
  20.  """
  21.   if os.geteuid() != 0:
  22.     print "Sorry, you need root privileges."
  23.     sys.exit(1)
  24.   return 0
  25.  
  26. # -----------------------------------------------------------------------
  27. def get_iwlist_scan():
  28.   """
  29.  Returns output list of executing iwlist scanning subprocess
  30.  """
  31.   cmd = subprocess.Popen(["iwlist", "wlan0", "scanning"], stdout=subprocess.PIPE).communicate()[0].lstrip(" ").split("Cell")
  32.   output = []
  33.   for el in cmd:
  34.     new_element = el.split("\n")
  35.     output.append(new_element)
  36.   return output
  37.  
  38. # -----------------------------------------------------------------------
  39. def get_wifi_data():
  40.   """
  41.  Returns a list stripped out of Spaces supplied by iwlist scanning
  42.  """
  43.   output = []
  44.   for el in get_iwlist_scan():
  45.     new_list = []
  46.     for e in el:
  47.       new_list.append(e.lstrip())
  48.     output.append(new_list)
  49.   return output
  50.  
  51. # -----------------------------------------------------------------------
  52. def calculate_quality(quality):
  53.   """
  54.  Returns % value representation of Wifi's signal quality
  55.  """
  56.   return (int(quality)/70.0) * 100
  57.  
  58. # -----------------------------------------------------------------------
  59. def return_dict_data(wifi):
  60.   """
  61.  Returns a dictionary by parsing the stripped iwlist scanning subprocess
  62.  """
  63.   search_for = [ "Quality", "ESSID", "Channel", "Address" ]
  64.   output = dict()
  65.   finale = []
  66.  
  67.   for el in wifi:
  68.     if len(wifi) < 3:
  69.       continue
  70.     if "Address" in el:
  71.       output['mac'] = el.split(' ')[3]
  72.     elif "Quality" in el:
  73.       tmp = el.split(' ')
  74.       output['quality'] = calculate_quality(tmp[0].split('=')[1].split("/")[0])
  75.       output['signal'] = tmp[3].split('=')[1]+' dBm'
  76.     elif "ESSID" in el:
  77.       output['ssid'] = el.split(':')[1].split('"')[1]
  78.   return output
  79.  
  80. # -----------------------------------------------------------------------
  81. def build_wifi():
  82.   """
  83.  Returns the whole dictionary with informations about sorrounding wifi networks
  84.  """
  85.   data = get_wifi_data()
  86.   output = []
  87.   for el in data:
  88.     tmp = return_dict_data(el)
  89.     if tmp:
  90.       output.append(return_dict_data(el))
  91.   return output
  92.  
  93. # -----------------------------------------------------------------------
  94. def sort_by_quality(wifi):
  95.   sortedl = wifi
  96.   for i in range(len(sortedl)):
  97.     for j in range(len(sortedl)-1):
  98.       if sortedl[j+1]['quality'] > sortedl[j]['quality']:
  99.         sortedl[j+1], sortedl[j] = sortedl[j], sortedl[j+1]
  100.   return sortedl
  101. # -----------------------------------------------------------------------
  102.  
  103. def print_wifi(wifi):
  104.   #print "[%3.0f%%] WiFi SSID: %25s,\t(signal: %s)" % (wifi['quality'], wifi['ssid'], wifi['signal'])
  105.   # tp - ToPrint
  106.   tp =  c.b +"[" + c.e
  107.   ## quality
  108.   if wifi['quality'] > 75:
  109.     tp += c.green
  110.     ssid = c.green + c.b + "%25s" % wifi['ssid'] + c.e
  111.   elif wifi['quality'] <= 75 and wifi['quality'] > 50:
  112.     tp += c.blue
  113.     ssid = c.blue + c.b + "%25s" % wifi['ssid'] + c.e
  114.   elif wifi['quality'] <= 50 and wifi['quality'] > 25:
  115.     tp += c.warn
  116.     ssid = c.warn + c.b + "%25s" % wifi['ssid'] + c.e
  117.   else:
  118.     tp += c.fail
  119.     ssid = c.fail + c.b + "%25s" % wifi['ssid'] + c.e
  120.   tp += "%3.0f" % (wifi['quality']) + c.b + "]" + c.e
  121.   ## network ssid
  122.   tp += c.head + " WiFi SSID: " + c.e + ssid + ",\t"
  123.   ## signal
  124.   tp += c.b + "(" + c.e + c.u + "%s"%wifi['signal'] + c.e + c.b + ")"
  125.   print tp
  126. # -----------------------------------------------------------------------
  127. ## ** main() ** ##
  128. if __name__ == "__main__":
  129.  
  130.   while True:
  131.     check_user_permissions()
  132.     wifi = sort_by_quality(build_wifi())
  133.     for el in wifi:
  134.       print_wifi(el)
  135.     time.sleep(3)
  136.     os.system("clear")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement