Get the IP address of WIFI interface

Anssi Saari as at sci.fi
Mon May 16 15:57:29 EDT 2011


Neal Becker <ndbecker2 at 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






More information about the Python-list mailing list