#!/usr/bin/python # Copyright 2007 Dan Smith import socket import dbus import gobject import dbus.mainloop.glib NM_SERVICE = 'org.freedesktop.NetworkManager' NM_OPATH = '/org/freedesktop/NetworkManager' NM_DSERVICE = "%s.Devices" % NM_SERVICE def ip_to_str(ip): ip = socket.ntohl(ip) d = ip & 0xFF c = (ip >> 8) & 0xFF b = (ip >> 16) & 0xFF a = (ip >> 24) & 0xFF return "%s.%s.%s.%s" % (a,b,c,d) class NetworkDevice: def __init__(self, path): bus = dbus.SystemBus() self._device = bus.get_object(NM_SERVICE, path) self.name = self._device.getName(NM_DSERVICE) self.type = self._device.getType(NM_DSERVICE) def getName(self): return self.name def getIP4Address(self): ip = self._device.getIP4Address(NM_DSERVICE) return ip_to_str(ip) def getType(self): if self.type == 2: return "Wireless" elif self.type == 1: return "Wired" else: return "Unknown" def isActive(self): return self._device.getLinkActive() == 1 def isDefault(self): props = self._device.getProperties(NM_DSERVICE) return props[10] != "0.0.0.0" def __str__(self): return "%s: %-15s (%10s) [Active: %-5s] [Default: %-5s]" % (self.name, self.getIP4Address(), self.getType(), self.isActive(), self.isDefault()) class NetworkDeviceFactory: def _paths(self): bus = dbus.SystemBus() proxy = bus.get_object(NM_SERVICE, NM_OPATH) return proxy.getDevices(dbus_interface=NM_SERVICE) def getDevice(self, name): devs = self._paths() for dev in devs: if name in dev: return NetworkDevice(dev) def getAllDevices(self): devs = self._paths() devices = [] for dev in devs: devices.append(NetworkDevice(dev)) return devices def getDefaultDevice(self): devs = self.getAllDevices() for dev in devs: if dev.isDefault(): return dev if __name__ == "__main__": d = NetworkDeviceFactory().getAllDevices() for dev in d: print dev d = NetworkDeviceFactory().getDefaultDevice() print "\nDefault Device:" print d