[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