91 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/python
 | |
| 
 | |
| import dbus
 | |
| import sys, os
 | |
| import time
 | |
| 
 | |
| WPAS_DBUS_SERVICE = "fi.epitest.hostap.WPASupplicant"
 | |
| WPAS_DBUS_INTERFACE = "fi.epitest.hostap.WPASupplicant"
 | |
| WPAS_DBUS_OPATH = "/fi/epitest/hostap/WPASupplicant"
 | |
| 
 | |
| WPAS_DBUS_INTERFACES_INTERFACE = "fi.epitest.hostap.WPASupplicant.Interface"
 | |
| WPAS_DBUS_INTERFACES_OPATH = "/fi/epitest/hostap/WPASupplicant/Interfaces"
 | |
| WPAS_DBUS_BSSID_INTERFACE = "fi.epitest.hostap.WPASupplicant.BSSID"
 | |
| 
 | |
| def byte_array_to_string(s):
 | |
| 	import urllib
 | |
| 	r = ""    
 | |
| 	for c in s:
 | |
| 		if c >= 32 and c < 127:
 | |
| 			r += "%c" % c
 | |
| 		else:
 | |
| 			r += urllib.quote(chr(c))
 | |
| 	return r
 | |
| 
 | |
| def main():
 | |
| 	if len(sys.argv) != 2:
 | |
| 		print "Usage: wpas-test.py <interface>"
 | |
| 		os._exit(1)
 | |
| 
 | |
| 	ifname = sys.argv[1]
 | |
| 
 | |
| 	bus = dbus.SystemBus()
 | |
| 	wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH)
 | |
| 	wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE)
 | |
| 
 | |
| 	# See if wpa_supplicant already knows about this interface
 | |
| 	path = None
 | |
| 	try:
 | |
| 		path = wpas.getInterface(ifname)
 | |
| 	except dbus.dbus_bindings.DBusException, exc:
 | |
| 		if str(exc) != "wpa_supplicant knows nothing about this interface.":
 | |
| 			raise exc
 | |
| 		try:
 | |
| 			path = wpas.addInterface(ifname, {'driver': dbus.Variant('wext')})
 | |
| 		except dbus.dbus_bindings.DBusException, exc:
 | |
| 			if str(exc) != "wpa_supplicant already controls this interface.":
 | |
| 				raise exc
 | |
| 
 | |
| 	if_obj = bus.get_object(WPAS_DBUS_SERVICE, path)
 | |
| 	iface = dbus.Interface(if_obj, WPAS_DBUS_INTERFACES_INTERFACE)
 | |
| 	iface.scan()
 | |
| 	# Should really wait for the "scanResults" signal instead of sleeping
 | |
| 	time.sleep(5)
 | |
| 	res = iface.scanResults()
 | |
| 
 | |
| 	print "Scanned wireless networks:"
 | |
| 	for opath in res:
 | |
| 		net_obj = bus.get_object(WPAS_DBUS_SERVICE, opath)
 | |
| 		net = dbus.Interface(net_obj, WPAS_DBUS_BSSID_INTERFACE)
 | |
| 		props = net.properties()
 | |
| 
 | |
| 		# Convert the byte-array for SSID and BSSID to printable strings
 | |
| 		bssid = ""
 | |
| 		for item in props["bssid"]:
 | |
| 			bssid = bssid + ":%02x" % item
 | |
| 		bssid = bssid[1:]
 | |
| 		ssid = byte_array_to_string(props["ssid"])
 | |
| 		wpa = "no"
 | |
| 		if props.has_key("wpaie"):
 | |
| 			wpa = "yes"
 | |
| 		wpa2 = "no"
 | |
| 		if props.has_key("rsnie"):
 | |
| 			wpa2 = "yes"
 | |
| 		freq = 0
 | |
| 		if props.has_key("frequency"):
 | |
| 			freq = props["frequency"]
 | |
| 		caps = props["capabilities"]
 | |
| 		qual = props["quality"]
 | |
| 		level = props["level"]
 | |
| 		noise = props["noise"]
 | |
| 		maxrate = props["maxrate"] / 1000000
 | |
| 
 | |
| 		print "  %s  ::  ssid='%s'  wpa=%s  wpa2=%s  quality=%d%%  rate=%d  freq=%d" % (bssid, ssid, wpa, wpa2, qual, maxrate, freq)
 | |
| 
 | |
| 	wpas.removeInterface(dbus.ObjectPath(path))
 | |
| 	# Should fail here with unknown interface error
 | |
| 	iface.scan()
 | |
| 
 | |
| if __name__ == "__main__":
 | |
| 	main()
 | |
| 
 | 
