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.
- checksums.yaml +7 -0
- data/lib/rmacaddr.rb +87 -0
- 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: []
|