import os
import time
import sys
import subprocess
class c:
head = '\033[95m'
blue = '\033[94m'
green = '\033[92m'
warn = '\033[93m'
fail = '\033[91m'
e = '\033[0m'
b = '\033[1m'
u = '\033[4m'
# -----------------------------------------------------------------------
def check_user_permissions():
"""
Checks if script has root privileges
"""
if os.geteuid() != 0:
print "Sorry, you need root privileges."
sys.exit(1)
return 0
# -----------------------------------------------------------------------
def get_iwlist_scan():
"""
Returns output list of executing iwlist scanning subprocess
"""
cmd = subprocess.Popen(["iwlist", "wlan0", "scanning"], stdout=subprocess.PIPE).communicate()[0].lstrip(" ").split("Cell")
output = []
for el in cmd:
new_element = el.split("\n")
output.append(new_element)
return output
# -----------------------------------------------------------------------
def get_wifi_data():
"""
Returns a list stripped out of Spaces supplied by iwlist scanning
"""
output = []
for el in get_iwlist_scan():
new_list = []
for e in el:
new_list.append(e.lstrip())
output.append(new_list)
return output
# -----------------------------------------------------------------------
def calculate_quality(quality):
"""
Returns % value representation of Wifi's signal quality
"""
return (int(quality)/70.0) * 100
# -----------------------------------------------------------------------
def return_dict_data(wifi):
"""
Returns a dictionary by parsing the stripped iwlist scanning subprocess
"""
search_for = [ "Quality", "ESSID", "Channel", "Address" ]
output = dict()
finale = []
for el in wifi:
if len(wifi) < 3:
continue
if "Address" in el:
output['mac'] = el.split(' ')[3]
elif "Quality" in el:
tmp = el.split(' ')
output['quality'] = calculate_quality(tmp[0].split('=')[1].split("/")[0])
output['signal'] = tmp[3].split('=')[1]+' dBm'
elif "ESSID" in el:
output['ssid'] = el.split(':')[1].split('"')[1]
return output
# -----------------------------------------------------------------------
def build_wifi():
"""
Returns the whole dictionary with informations about sorrounding wifi networks
"""
data = get_wifi_data()
output = []
for el in data:
tmp = return_dict_data(el)
if tmp:
output.append(return_dict_data(el))
return output
# -----------------------------------------------------------------------
def sort_by_quality(wifi):
sortedl = wifi
for i in range(len(sortedl)):
for j in range(len(sortedl)-1):
if sortedl[j+1]['quality'] > sortedl[j]['quality']:
sortedl[j+1], sortedl[j] = sortedl[j], sortedl[j+1]
return sortedl
# -----------------------------------------------------------------------
def print_wifi(wifi):
#print "[%3.0f%%] WiFi SSID: %25s,\t(signal: %s)" % (wifi['quality'], wifi['ssid'], wifi['signal'])
# tp - ToPrint
tp = c.b +"[" + c.e
## quality
if wifi['quality'] > 75:
tp += c.green
ssid = c.green + c.b + "%25s" % wifi['ssid'] + c.e
elif wifi['quality'] <= 75 and wifi['quality'] > 50:
tp += c.blue
ssid = c.blue + c.b + "%25s" % wifi['ssid'] + c.e
elif wifi['quality'] <= 50 and wifi['quality'] > 25:
tp += c.warn
ssid = c.warn + c.b + "%25s" % wifi['ssid'] + c.e
else:
tp += c.fail
ssid = c.fail + c.b + "%25s" % wifi['ssid'] + c.e
tp += "%3.0f" % (wifi['quality']) + c.b + "]" + c.e
## network ssid
tp += c.head + " WiFi SSID: " + c.e + ssid + ",\t"
## signal
tp += c.b + "(" + c.e + c.u + "%s"%wifi['signal'] + c.e + c.b + ")"
print tp
# -----------------------------------------------------------------------
## ** main() ** ##
if __name__ == "__main__":
while True:
check_user_permissions()
wifi = sort_by_quality(build_wifi())
for el in wifi:
print_wifi(el)
time.sleep(3)
os.system("clear")
Comments