Neal Becker <[email protected]> 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