Neal Becker <ndbeck...@gmail.com> writes: > Here's some useful snippits for linux: > > def get_default_if(): > f = open('/proc/net/route') > for i in csv.DictReader(f, delimiter="\t"): > if long(i['Destination'], 16) == 0: > return i['Iface'] > return None > > def get_ip_address(ifname): > s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) > return socket.inet_ntoa(fcntl.ioctl( > s.fileno(), > 0x8915, # SIOCGIFADDR > struct.pack('256s', ifname[:15]) > )[20:24])
One possible solution in Linux is asking NetworkManager, if it's in use. It knows which interfaces are active and what kind they are (LAN, WLAN, WWAN etc.) NetworkManager communicates via dbus and even includes python example scripts. So here's my scriptlet based on NetworkManager example nm-state.py. This one prints out all active devices and their type and IP address. Easily modified to print only WLAN types. import dbus, socket, struct bus = dbus.SystemBus() proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager") manager = dbus.Interface(proxy, "org.freedesktop.NetworkManager") # Get device-specific state devices = manager.GetDevices() for d in devices: dev_proxy = bus.get_object("org.freedesktop.NetworkManager", d) prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties") # Get the device's current state and interface name state = prop_iface.Get("org.freedesktop.NetworkManager.Device", "State") name = prop_iface.Get("org.freedesktop.NetworkManager.Device", "Interface") ifa = "org.freedesktop.NetworkManager.Device" type = prop_iface.Get(ifa, "DeviceType") addr = prop_iface.Get(ifa, "Ip4Address") # and print them out if state == 8: # activated addr_dotted = socket.inet_ntoa(struct.pack('<L', addr)) s = "Device %s is activated and has type %s and address %s" print s % (name, type, addr_dotted) else: print "Device %s is not activated" % name -- http://mail.python.org/mailman/listinfo/python-list