wpas-test.py
Go to the documentation of this file.
00001 #!/usr/bin/python
00002 
00003 import dbus
00004 import sys, os
00005 import time
00006 
00007 WPAS_DBUS_SERVICE = "fi.epitest.hostap.WPASupplicant"
00008 WPAS_DBUS_INTERFACE = "fi.epitest.hostap.WPASupplicant"
00009 WPAS_DBUS_OPATH = "/fi/epitest/hostap/WPASupplicant"
00010 
00011 WPAS_DBUS_INTERFACES_INTERFACE = "fi.epitest.hostap.WPASupplicant.Interface"
00012 WPAS_DBUS_INTERFACES_OPATH = "/fi/epitest/hostap/WPASupplicant/Interfaces"
00013 WPAS_DBUS_BSSID_INTERFACE = "fi.epitest.hostap.WPASupplicant.BSSID"
00014 
00015 def byte_array_to_string(s):
00016         import urllib
00017         r = ""    
00018         for c in s:
00019                 if c >= 32 and c < 127:
00020                         r += "%c" % c
00021                 else:
00022                         r += urllib.quote(chr(c))
00023         return r
00024 
00025 def main():
00026         if len(sys.argv) != 2:
00027                 print "Usage: wpas-test.py <interface>"
00028                 os._exit(1)
00029 
00030         ifname = sys.argv[1]
00031 
00032         bus = dbus.SystemBus()
00033         wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH)
00034         wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE)
00035 
00036         # See if wpa_supplicant already knows about this interface
00037         path = None
00038         try:
00039                 path = wpas.getInterface(ifname)
00040         except dbus.dbus_bindings.DBusException, exc:
00041                 if str(exc) != "wpa_supplicant knows nothing about this interface.":
00042                         raise exc
00043                 try:
00044                         path = wpas.addInterface(ifname, {'driver': dbus.Variant('wext')})
00045                 except dbus.dbus_bindings.DBusException, exc:
00046                         if str(exc) != "wpa_supplicant already controls this interface.":
00047                                 raise exc
00048 
00049         if_obj = bus.get_object(WPAS_DBUS_SERVICE, path)
00050         iface = dbus.Interface(if_obj, WPAS_DBUS_INTERFACES_INTERFACE)
00051         iface.scan()
00052         # Should really wait for the "scanResults" signal instead of sleeping
00053         time.sleep(5)
00054         res = iface.scanResults()
00055 
00056         print "Scanned wireless networks:"
00057         for opath in res:
00058                 net_obj = bus.get_object(WPAS_DBUS_SERVICE, opath)
00059                 net = dbus.Interface(net_obj, WPAS_DBUS_BSSID_INTERFACE)
00060                 props = net.properties()
00061 
00062                 # Convert the byte-array for SSID and BSSID to printable strings
00063                 bssid = ""
00064                 for item in props["bssid"]:
00065                         bssid = bssid + ":%02x" % item
00066                 bssid = bssid[1:]
00067                 ssid = byte_array_to_string(props["ssid"])
00068                 wpa = "no"
00069                 if props.has_key("wpaie"):
00070                         wpa = "yes"
00071                 wpa2 = "no"
00072                 if props.has_key("rsnie"):
00073                         wpa2 = "yes"
00074                 freq = 0
00075                 if props.has_key("frequency"):
00076                         freq = props["frequency"]
00077                 caps = props["capabilities"]
00078                 qual = props["quality"]
00079                 level = props["level"]
00080                 noise = props["noise"]
00081                 maxrate = props["maxrate"] / 1000000
00082 
00083                 print "  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  quality=%d%%  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, qual, maxrate, freq)
00084 
00085         wpas.removeInterface(dbus.ObjectPath(path))
00086         # Should fail here with unknown interface error
00087         iface.scan()
00088 
00089 if __name__ == "__main__":
00090         main()
00091 


wpa_supplicant
Author(s): Package maintained by Blaise Gassend
autogenerated on Thu Apr 24 2014 15:34:36