2012-01-06 29 views

Respuesta

4

No creo que haya ninguna función incorporada de Ruby para recuperar esa dirección; es probable que deba realizar una llamada al sistema para listar el valor (por ejemplo, ifconfig en UNIX, ipconfig /all en Win32) y analizar la salida según sea necesario.

Algo como esto (pseudocódigo no probado):

def mac_address 
    platform = RUBY_PLATFORM.downcase 
    output = `#{(platform =~ /win32/) ? 'ipconfig /all' : 'ifconfig'}` 
    case platform 
    when /darwin/ 
     $1 if output =~ /en1.*?(([A-F0-9]{2}:){5}[A-F0-9]{2})/im 
    when /win32/ 
     $1 if output =~ /Physical Address.*?(([A-F0-9]{2}-){5}[A-F0-9]{2})/im 
    # Cases for other platforms... 
    else nil 
    end 
end 
+0

Ouch. Pensé que sería similar a recuperar la dirección IP, lo cual fue bastante sencillo. – mcass20

+0

Soy un experimentado desarrollador de .NET que lucha con su muestra. Lo reduje a un par de líneas, ya que solo se ejecutará en Mac pero simplemente devuelve nada. – mcass20

+0

@ mcass20: oops, estropeó la expresión regular de win32, simplemente lo arregló (al menos para Win XP). – maerics

3

Hay una gema llamada macaddr que hace esto, pero básicamente es analizando la salida del sistema de ifconfig. Puede ver el hilo cuando se estaba desarrollando en http://www.ruby-forum.com/topic/113956

+1

Puede ver el código funcional completo para esta biblioteca [en GitHub] (https://github.com/ahoward/macaddr/blob/master/lib/macaddr.rb) – Phrogz

+0

Gracias chicos. Parece que la maerics me ha dado el código equivalente de esa gema. – mcass20

Cuestiones relacionadas