rmacaddr 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []