rmacaddr 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rmacaddr.rb +87 -0
  3. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0c0c430b4c47bbe5008cc5dce7ced2769a1e448f
4
+ data.tar.gz: f1913c3ca366578343e1327e1cab35298790e849
5
+ SHA512:
6
+ metadata.gz: 47bbd2a3c7966621d5411e009b0e73f7ec3d64bd9a553956eac0e19f8a0916bd11e596140bdc3240253204af6341b4b4f2517ecf0c680fc441cb4047cccf9ba5
7
+ data.tar.gz: 1ba94c5b00303c86e45905e0551b4ba13497ebd6cb306a42f270e76136bbc88f3da7760367bb79a894a78465924b4d0af5e8c97fac792ed79bff543aa0222a77
data/lib/rmacaddr.rb ADDED
@@ -0,0 +1,87 @@
1
+ ##
2
+ # Cross platform MAC address determination. Works for:
3
+ # * /sbin/ifconfig
4
+ # * /bin/ifconfig
5
+ # * ifconfig
6
+ # * ipconfig /all
7
+ #
8
+ # To return an array of all MAC addresses:
9
+ #
10
+ # MacAddr.list
11
+ #
12
+
13
+ begin
14
+ require 'rubygems'
15
+ rescue LoadError
16
+ nil
17
+ end
18
+
19
+ require 'socket'
20
+
21
+ class MacAddr
22
+ RE = %r/(?:[^:\-]|\A)(?:[0-9A-F][0-9A-F][:\-]){5}[0-9A-F][0-9A-F](?:[^:\-]|\Z)/io
23
+
24
+ def self.list
25
+ @list ||= parse_list
26
+ end
27
+
28
+ def self.parse_list
29
+ from_getifaddrs || cmd_ifaddrs
30
+ end
31
+
32
+ def self.from_getifaddrs
33
+ return unless Socket.respond_to? :getifaddrs
34
+
35
+ link = Socket::PF_LINK if Socket.const_defined? :PF_LINK
36
+ packet = Socket::PF_PACKET if Socket.const_defined? :PF_PACKET
37
+ interface_packet_family = link || packet
38
+
39
+
40
+ interfaces = Socket.getifaddrs.select do |addr|
41
+ addr.addr.pfamily == interface_packet_family
42
+ end
43
+
44
+ mac_list, =
45
+ if Socket.const_defined? :PF_LINK then
46
+ interfaces.map do |addr|
47
+ addr.addr.getnameinfo
48
+ end.select do |m,|
49
+ !m.empty?
50
+ end
51
+ elsif Socket.const_defined? :PF_PACKET then
52
+ interfaces.map do |addr|
53
+ addr.addr.inspect_sockaddr[/hwaddr=([\h:]+)/, 1]
54
+ end.select do |mac_addr|
55
+ mac_addr != '00:00:00:00:00:00'
56
+ end
57
+ end
58
+
59
+ mac_list.select{|m| !m.empty?}
60
+ end
61
+
62
+ def self.cmd_ifaddrs
63
+ cmds = '/sbin/ifconfig', '/bin/ifconfig', 'ifconfig', 'ipconfig /all', 'cat /sys/class/net/*/address'
64
+
65
+ output = nil
66
+ cmds.each do |cmd|
67
+ stdout = `#{cmd}` rescue next
68
+ next unless stdout and stdout.size > 0
69
+ output = stdout and break
70
+ end
71
+ raise "all of #{ cmds.join ' ' } failed" unless output
72
+
73
+ @mac_address = cmd_parse(output)
74
+ end
75
+
76
+ def self.cmd_parse(output)
77
+ lines = output.split(/\n/)
78
+
79
+ candidates = lines.select{|line| line =~ RE}
80
+ raise 'no mac address candidates' unless candidates.first
81
+ candidates = candidates.map{|c| c[RE].strip}
82
+
83
+ raise 'no mac address found' if candidates.empty?
84
+
85
+ candidates
86
+ end
87
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rmacaddr
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - m
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-15 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: clone from http://rubygems.org/gems/macaddr
14
+ email:
15
+ - object.new@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/rmacaddr.rb
21
+ homepage: https://github.com/newobject/rmacaddr
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.2.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: ruby get mac addr
45
+ test_files: []