2009-11-02 5 views
3

Bon moment de la journée.Mac + Ruby: Impossible d'accéder à ioctl de Socket? Comment réparer?

code Ruby:

def hw_address(iface) 
    sock = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM,0) 

    buf = [iface,""].pack('a16h16') 
    sock.ioctl(SIOCGIFHWADDR, buf); 

    sock.close 

    return buf[18..24].to_etheraddr 
end 

puts hw_address('lo0') 

Ce qu'il faut faire: obtient mac adresse de l'interface.

Fonctionne sur Debian comme prévu. Mais sous Mac OS X, im obtenir erreur: `` ioctl ': Opération non pris en charge sur la prise (Errno :: EOPNOTSUPP) `

Y at-il de toute façon de fixer/transmettre ce message d'erreur & Faire fonctionner ioctl sur les sockets?

+2

D'où obtenez-vous la définition de SIOCGIFHWADDR? Sur mon Mac, cela ne semble pas être défini même dans les fichiers d'en-tête du système - il y a un SIOCGLIFADDR dans sockio.h qui semble faire la même chose (mais je ne sais pas comment y accéder depuis ruby). – SteveRawlinson

+0

Merci, obtenu à partir de sources de freebsd. –

Répondre

0

http://hintsforums.macworld.com/showthread.php?t=97909

« fonction suivante [s] ne sont pas disponibles chez Mac OS X:

1) Bibliothèque minuterie POSIX (-librt Temps réel) 2) de ioctl avec commande SIOCGIFHWADDR - Pour obtenir le Mac Adresse de l'interface réseau. "

C'est la vie.

+0

Merci pour 2 ans + 26 jours de réponse :) –

+0

Revue plus tard encore, si je me souviens bien, j'ai eu la même question, trouvé la réponse, et encerclé pour le documenter. –

Questions connexes