[gull] IPV6 & IPV4
Daniel Cordey
dc at mjt.ch
Fri Nov 13 13:38:00 CET 2009
On Friday 13 November 2009 13:01:28 Erik Rossen wrote:
> It is used within the kernel to communicate between various subsystems,
> though this usage is not documented here
:-) Mais cette info est interessante.
> ou python-netifaces dans Debian sid?
Chapeau ! Aucune de mes recherches sur le net ne m'a mene a ce package; mais
il est vrai que je suis assez mauvais dans mes recherches (j'sais pas... je ne
dois pas etre cable comme il faut).
Package tres interessant et qui facilite la vie. Depuis mon dernir mail, j'ai
ecrit un petit bout de code pour extraire les adresses IPV4 de mes interfaces,
mais je dois avouer que ce package est beaucoup plus complet et facile a
utiliser.
En attendant, voici mon bout de code Python n;utilisant que les modules
standards.
dc
from os import environ
from struct import pack
from fcntl import ioctl
from socket import inet_ntoa, socket, AF_INET, SOCK_DGRAM
# From bits/ioctls.h
SIOCGIFHWADDR = 0x8927 # Get hardware address
SIOCGIFADDR = 0x8915 # get PA address
SIOCGIFNETMASK = 0x891b # get network PA mask
SIOCGIFNAME = 0x8910 # get iface name
SIOCSIFLINK = 0x8911 # set iface channel
SIOCGIFCONF = 0x8912 # get iface list
SIOCGIFFLAGS = 0x8913 # get flags
SIOCSIFFLAGS = 0x8914 # set flags
SIOCGIFINDEX = 0x8933 # name -> if_index mapping
SIOCGIFCOUNT = 0x8938 # get number of devices
SIOCGSTAMP = 0x8906 # get packet timestamp (as a timeval)
# Get interface's list
f = open('/proc/net/if_inet6',
'r')
lines = [x[:-1].split(' ') for x in f.readlines()]
# For each (valid) device, print IPV4 address
for dev in [x[-1] for x in lines if int(x[0], 16) > 1] :
s = socket(AF_INET,
SOCK_DGRAM)
ip_b = ioctl(s.fileno(),
SIOCGIFADDR,
pack('256s',
dev[:15]))[20:24]
print '%-6s%s' % (dev,
inet_ntoa(ip_b))
More information about the gull
mailing list