2010-10-22 16 views

Répondre

1

Vous devez utiliser IO # ioctl. Ceci est totalement non portable. Sur mon linux ces mots de code:

require 'socket' 
sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0) 
buf = ["eth0",""].pack('a16h16') 
sock.ioctl(0x891b, buf) 
netmask = "#{buf[20]}.#{buf[21]}.#{buf[22]}.#{buf[23]}" #=> "255.255.255.240" 

ioctl diffère considérablement entre les systèmes et je devais regarder à travers quelques fichiers d'en-tête du système pour obtenir la bonne taille pour le [] .pack, l'emplacement de l'adresse dans buf et la valeur numérique pour SIOCGIFBRDADDR (le premier argument à ioctl).

Si ces valeurs ne fonctionnent pas pour vous, je peux vous donner plus d'informations sur la façon de les trouver.

+0

Edité pour renommer la variable - c'est vraiment le masque de réseau, pas la diffusion;) – SteveRawlinson