2012-01-06 14 views

risposta

4

Non penso che ci sia alcuna funzione incorporata di Ruby per recuperare quell'indirizzo; probabilmente dovrai effettuare una chiamata di sistema per elencare il valore (ad esempio ifconfig su UNIX, ipconfig /all su Win32) e analizzare l'output secondo necessità.

Qualcosa di simile a questo (pseudocodice non testata):

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. Ho pensato che sarebbe stato simile al recupero dell'indirizzo IP, che era piuttosto semplice. – mcass20

+0

Im uno stagionato .NET dev alle prese con il vostro campione. L'ho ridotto a un paio di righe dal momento che funzionerà solo su Mac, ma restituisce solo zero. – mcass20

+0

@ mcass20: oops, ha fatto un pasticcio con l'espressione regolare win32, l'ha appena corretto (almeno per Win XP). – maerics

3

V'è un gioiello chiamato macaddr che fa questo, ma in fondo è l'analisi l'uscita del sistema di ifconfig. Puoi vedere il thread mentre era in fase di sviluppo al http://www.ruby-forum.com/topic/113956

+1

Puoi vedere il codice funzionale completo per questa libreria [su GitHub] (https://github.com/ahoward/macaddr/blob/master/lib/macaddr.rb) – Phrogz

+0

Grazie ragazzi. Sembra che i maestri mi abbiano dato il codice equivalente di quella gemma. – mcass20

Problemi correlati