Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #5534

Re: Get the IP address of WIFI interface

From Anssi Saari <as@sci.fi>
Newsgroups comp.lang.python
Subject Re: Get the IP address of WIFI interface
Date 2011-05-16 22:57 +0300
Message-ID <vg3pqni5sgm.fsf@pepper.modeemi.fi> (permalink)
References <BANLkTi=YN7CW_y3w5EK-36uPwPcxXgPm8A@mail.gmail.com> <mailman.1591.1305457483.9059.python-list@python.org>

Show all headers | View raw


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


Back to comp.lang.python | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Re: Get the IP address of WIFI interface Neal Becker <ndbecker2@gmail.com> - 2011-05-15 07:04 -0400
  Re: Get the IP address of WIFI interface Anssi Saari <as@sci.fi> - 2011-05-16 22:57 +0300

csiph-web