123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- #!/usr/bin/python
- import dbus
- import sys, os
- import time
- import gobject
- from dbus.mainloop.glib import DBusGMainLoop
- WPAS_DBUS_SERVICE = "fi.w1.wpa_supplicant1"
- WPAS_DBUS_INTERFACE = "fi.w1.wpa_supplicant1"
- WPAS_DBUS_OPATH = "/fi/w1/wpa_supplicant1"
- WPAS_DBUS_INTERFACES_INTERFACE = "fi.w1.wpa_supplicant1.Interface"
- WPAS_DBUS_INTERFACES_OPATH = "/fi/w1/wpa_supplicant1/Interfaces"
- WPAS_DBUS_BSS_INTERFACE = "fi.w1.wpa_supplicant1.BSS"
- WPAS_DBUS_NETWORK_INTERFACE = "fi.w1.wpa_supplicant1.Network"
- 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 list_interfaces(wpas_obj):
- ifaces = wpas_obj.Get(WPAS_DBUS_INTERFACE, 'Interfaces',
- dbus_interface=dbus.PROPERTIES_IFACE)
- for path in ifaces:
- if_obj = bus.get_object(WPAS_DBUS_SERVICE, path)
- ifname = if_obj.Get(WPAS_DBUS_INTERFACES_INTERFACE, 'Ifname',
- dbus_interface=dbus.PROPERTIES_IFACE)
- print ifname
- def interfaceAdded(interface, properties):
- print "InterfaceAdded(%s): Ifname=%s" % (interface, properties['Ifname'])
- def interfaceRemoved(interface):
- print "InterfaceRemoved(%s)" % (interface)
- def propertiesChanged(properties):
- for i in properties:
- print "PropertiesChanged: %s=%s" % (i, properties[i])
- def showBss(bss):
- net_obj = bus.get_object(WPAS_DBUS_SERVICE, bss)
- net = dbus.Interface(net_obj, WPAS_DBUS_BSS_INTERFACE)
- # Convert the byte-array for SSID and BSSID to printable strings
- val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'BSSID',
- dbus_interface=dbus.PROPERTIES_IFACE)
- bssid = ""
- for item in val:
- bssid = bssid + ":%02x" % item
- bssid = bssid[1:]
- val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'SSID',
- dbus_interface=dbus.PROPERTIES_IFACE)
- ssid = byte_array_to_string(val)
- val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'WPA',
- dbus_interface=dbus.PROPERTIES_IFACE)
- wpa = "no"
- if val != None:
- wpa = "yes"
- val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'RSN',
- dbus_interface=dbus.PROPERTIES_IFACE)
- wpa2 = "no"
- if val != None:
- wpa2 = "yes"
- freq = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'Frequency',
- dbus_interface=dbus.PROPERTIES_IFACE)
- signal = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'Signal',
- dbus_interface=dbus.PROPERTIES_IFACE)
- val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'Rates',
- dbus_interface=dbus.PROPERTIES_IFACE)
- if len(val) > 0:
- maxrate = val[0] / 1000000
- else:
- maxrate = 0
- print " %s :: ssid='%s' wpa=%s wpa2=%s signal=%d rate=%d freq=%d" % (bssid, ssid, wpa, wpa2, signal, maxrate, freq)
- def scanDone(success):
- gobject.MainLoop().quit()
- print "Scan done: success=%s" % success
- def scanDone2(success, path=None):
- print "Scan done: success=%s [path=%s]" % (success, path)
- def bssAdded(bss, properties):
- print "BSS added: %s" % (bss)
- showBss(bss)
- def bssRemoved(bss):
- print "BSS removed: %s" % (bss)
- def blobAdded(blob):
- print "BlobAdded(%s)" % (blob)
- def blobRemoved(blob):
- print "BlobRemoved(%s)" % (blob)
- def networkAdded(network, properties):
- print "NetworkAdded(%s)" % (network)
- def networkRemoved(network):
- print "NetworkRemoved(%s)" % (network)
- def networkSelected(network):
- print "NetworkSelected(%s)" % (network)
- def propertiesChangedInterface(properties):
- for i in properties:
- print "PropertiesChanged(interface): %s=%s" % (i, properties[i])
- def propertiesChangedBss(properties):
- for i in properties:
- print "PropertiesChanged(BSS): %s=%s" % (i, properties[i])
- def propertiesChangedNetwork(properties):
- for i in properties:
- print "PropertiesChanged(Network): %s=%s" % (i, properties[i])
- def main():
- dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
- global bus
- bus = dbus.SystemBus()
- wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH)
- if len(sys.argv) != 2:
- list_interfaces(wpas_obj)
- os._exit(1)
- wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE)
- bus.add_signal_receiver(interfaceAdded,
- dbus_interface=WPAS_DBUS_INTERFACE,
- signal_name="InterfaceAdded")
- bus.add_signal_receiver(interfaceRemoved,
- dbus_interface=WPAS_DBUS_INTERFACE,
- signal_name="InterfaceRemoved")
- bus.add_signal_receiver(propertiesChanged,
- dbus_interface=WPAS_DBUS_INTERFACE,
- signal_name="PropertiesChanged")
- ifname = sys.argv[1]
- path = wpas.GetInterface(ifname)
- if_obj = bus.get_object(WPAS_DBUS_SERVICE, path)
- iface = dbus.Interface(if_obj, WPAS_DBUS_INTERFACES_INTERFACE)
- iface.connect_to_signal("ScanDone", scanDone2,
- path_keyword='path')
- bus.add_signal_receiver(scanDone,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="ScanDone",
- path=path)
- bus.add_signal_receiver(bssAdded,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="BSSAdded",
- path=path)
- bus.add_signal_receiver(bssRemoved,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="BSSRemoved",
- path=path)
- bus.add_signal_receiver(blobAdded,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="BlobAdded",
- path=path)
- bus.add_signal_receiver(blobRemoved,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="BlobRemoved",
- path=path)
- bus.add_signal_receiver(networkAdded,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="NetworkAdded",
- path=path)
- bus.add_signal_receiver(networkRemoved,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="NetworkRemoved",
- path=path)
- bus.add_signal_receiver(networkSelected,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="NetworkSelected",
- path=path)
- bus.add_signal_receiver(propertiesChangedInterface,
- dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE,
- signal_name="PropertiesChanged",
- path=path)
- bus.add_signal_receiver(propertiesChangedBss,
- dbus_interface=WPAS_DBUS_BSS_INTERFACE,
- signal_name="PropertiesChanged")
- bus.add_signal_receiver(propertiesChangedNetwork,
- dbus_interface=WPAS_DBUS_NETWORK_INTERFACE,
- signal_name="PropertiesChanged")
- gobject.MainLoop().run()
- if __name__ == "__main__":
- main()
|