macaddr-steakknife 1.8.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
- checksums.yaml.gz.sig +0 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -0
- data/README +59 -0
- data/lib/macaddr/version.rb +3 -0
- data/lib/macaddr.rb +141 -0
- data/macaddr.gemspec +27 -0
- data.tar.gz.sig +0 -0
- metadata +83 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 98d2f145a651cc19d738f1755c5dcb09bb21b834
|
4
|
+
data.tar.gz: eb9f51c5a6898fd4af44fc8c7cdf87316c380336
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a98a15a9d9c5de171d33fa5a1ab7e186445c3cb59097388695b4e246edff597d49599879fbea4f62565bb117aeb56e6787699f0c37e6a8b3cca22149e0991b2c
|
7
|
+
data.tar.gz: 6885cb3fd78ef5708c17b470501433ffc99da71bcf7bc7985898e432d4c7d26110d204653fff886506f023143942266ecdf92bb5fd55f968b3ad8cd4b6c36fe6
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
same as ruby's
|
data/README
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
NAME
|
2
|
+
|
3
|
+
macaddr
|
4
|
+
|
5
|
+
DESCRIPTION
|
6
|
+
|
7
|
+
cross platform mac address determination for ruby
|
8
|
+
|
9
|
+
URI
|
10
|
+
|
11
|
+
http://github.com/steakknife/macaddr
|
12
|
+
|
13
|
+
(previously)
|
14
|
+
http://github.com/ahoward/macaddr
|
15
|
+
http://rubyforg.org/projects/codeforpeople
|
16
|
+
|
17
|
+
INSTALL
|
18
|
+
|
19
|
+
cd ${TMPDIR-/tmp}
|
20
|
+
git clone https://github.com/steakknife/macaddr
|
21
|
+
cd macaddr
|
22
|
+
gem build *.gemspec
|
23
|
+
gem install *.gem
|
24
|
+
|
25
|
+
Install Gemfile 1.9+
|
26
|
+
|
27
|
+
gem 'macaddr', git: 'https://github.com/steakknife/macaddr.git'
|
28
|
+
|
29
|
+
Install Gemfile 1.8+
|
30
|
+
|
31
|
+
gem 'macaddr', git => 'https://github.com/steakknife/macaddr.git'
|
32
|
+
|
33
|
+
HISTORY
|
34
|
+
Even newer:
|
35
|
+
- #ifaddrs - list all Ifaddr's
|
36
|
+
- #iface_macs - Hash with all interfaces to mac addresses
|
37
|
+
New:
|
38
|
+
- Get rid of systemu, only use Ruby's Socket.getifaddrs
|
39
|
+
- Actually implement array of all macs as #addrs
|
40
|
+
1.7.x:
|
41
|
+
- added a Gemfile for easier testing/dev with Bundler
|
42
|
+
- added an example .rvmrc file that will setup for ruby 1.9.3
|
43
|
+
- updated systemu gem to ~>2.4.0 to work with ruby 1.9.3
|
44
|
+
|
45
|
+
1.1.0:
|
46
|
+
- added dependancy on systemu to work around butt-licky windoze io
|
47
|
+
capture: http://redmine.ruby-lang.org/issues/show/3215
|
48
|
+
|
49
|
+
1.0.0:
|
50
|
+
- rdoc added
|
51
|
+
- eric hodel kicks ass. to find why, see
|
52
|
+
http://drawohara.com/post/44678286/eric-hodel-kicks-ass
|
53
|
+
|
54
|
+
SYNOPSIS
|
55
|
+
|
56
|
+
require 'macaddr'
|
57
|
+
|
58
|
+
Mac.addr #=> first mac addr on your system
|
59
|
+
Mac.addrs #=> all mac addrs on your system
|
data/lib/macaddr.rb
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
autoload :RbConfig, 'rbconfig'
|
2
|
+
autoload :Socket, 'socket'
|
3
|
+
autoload :Which, 'which'
|
4
|
+
|
5
|
+
##
|
6
|
+
# Cross platform MAC address determination.
|
7
|
+
#
|
8
|
+
# To return the first MAC address on the system:
|
9
|
+
#
|
10
|
+
# Mac.address
|
11
|
+
#
|
12
|
+
# To return an array of all MAC addresses:
|
13
|
+
#
|
14
|
+
# Mac.addresses
|
15
|
+
module Mac
|
16
|
+
extend self
|
17
|
+
|
18
|
+
# @return [String] First hardware address,
|
19
|
+
# in no particular order (varies by system)
|
20
|
+
def address
|
21
|
+
addresses.first
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Array<String>] All hardware address,
|
25
|
+
# in no particular order (varies by system)
|
26
|
+
def addresses
|
27
|
+
iface_macs.values.compact || []
|
28
|
+
end
|
29
|
+
|
30
|
+
alias_method :mac_address, :address
|
31
|
+
alias_method :addr, :address
|
32
|
+
alias_method :addrs, :addresses
|
33
|
+
|
34
|
+
# @return [Array<Ifaddr>] Return all interface Ifaddrs
|
35
|
+
def ifaddrs
|
36
|
+
return [] if !Socket.respond_to?(:getifaddrs) || INTERFACE_PACKET_FAMILY.nil?
|
37
|
+
Socket.getifaddrs.select { |iface| iface.addr && iface.addr.pfamily == INTERFACE_PACKET_FAMILY }
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Hash<String,[String,nil]>]
|
41
|
+
# all interfaces as keys, values are MAC addresses ((if present)
|
42
|
+
def iface_macs
|
43
|
+
h = iface_macs_raw.map do |k, v|
|
44
|
+
v = nil if v.empty? || v !~ EXACT_MAC_REGEX || v =~ EMPTY_MAC
|
45
|
+
[k, v]
|
46
|
+
end
|
47
|
+
Hash[h]
|
48
|
+
end
|
49
|
+
|
50
|
+
INTERFACE_PACKET_FAMILY = [:PF_LINK, :PF_PACKET].map { |c| Socket.const_defined?(c) && Socket.const_get(c) }.first
|
51
|
+
EMPTY_MAC = /00(?:[^\h]?00){5}(?:[^\h]?00){2}?/.freeze
|
52
|
+
HWADDR_REGEX = /hwaddr=([\h:]+)/.freeze
|
53
|
+
WINDOWS_REGEX = /win(32|dows|ce)|(ms|cyg|bcc)win|mingw32|djgpp/i.freeze
|
54
|
+
WINDOWS = RbConfig::CONFIG["host_os"] =~ WINDOWS_REGEX || RUBY_PLATFORM =~ WINDOWS_REGEX || ENV['OS'] == 'Windows_NT'
|
55
|
+
# EUI48 and EUI64
|
56
|
+
LOOSE_MAC_REGEX = /\h\h(?:[^\h]\h\h){5}(?:[^\h]\h\h){2}?/.freeze
|
57
|
+
EXACT_MAC_REGEX = /\A#{LOOSE_MAC_REGEX}\z/.freeze
|
58
|
+
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def iface_macs_raw
|
63
|
+
if Socket.const_defined? :PF_LINK
|
64
|
+
from_getnameinfo
|
65
|
+
elsif Socket.const_defined? :PF_PACKET
|
66
|
+
from_inspect_sockaddr
|
67
|
+
elsif WINDOWS
|
68
|
+
for_windows
|
69
|
+
else
|
70
|
+
from_ifconfig
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
def for_windows
|
76
|
+
from_ipconfig || from_getmac
|
77
|
+
end
|
78
|
+
|
79
|
+
def clean(arg)
|
80
|
+
arg.delete('"')
|
81
|
+
end
|
82
|
+
|
83
|
+
def from_getmac
|
84
|
+
return [] unless Which.which 'getmac'
|
85
|
+
%x{getmac /fo CSV /nh}
|
86
|
+
.split(/\n/)
|
87
|
+
.collect { |interface| mac, name = interface.split(/,/); [ clean(name), clean(mac) ] }
|
88
|
+
.compact
|
89
|
+
end
|
90
|
+
|
91
|
+
def filter_mac(line)
|
92
|
+
line.gsub(/\h\h(?:-\h\h){12}/, "") # delete DHCPv6
|
93
|
+
.gsub(/\h{,4}(?::\h{,4}){,31}}/, "") # delete IPv6
|
94
|
+
.gsub(/\d{1,3}(?:\.\d{1,3}){3}/, "") # delete IPv4
|
95
|
+
.gsub(/00(?:-00){3}(?:-\h\h){4}(?:-\h\h){2}?/, "") # delete Tunnel
|
96
|
+
.gsub(/\h{6}(?:-?\h{4}){3}-?\h{12}/, "") # delete GUIDs/UUIDs
|
97
|
+
.scan(LOOSE_MAC_REGEX) # mac address(es)
|
98
|
+
end
|
99
|
+
|
100
|
+
def from_ifconfig
|
101
|
+
name = nil
|
102
|
+
%x{ifconfig}
|
103
|
+
.split(/\n/)
|
104
|
+
.collect do |line|
|
105
|
+
if line =~ /\A([^:\s]+):.*\z/
|
106
|
+
name = clean($1)
|
107
|
+
nil
|
108
|
+
elsif line =~ /(?:ether|HWaddr)\s+/
|
109
|
+
mac = filter_mac(line)
|
110
|
+
[name, mac.first] if !name.nil? && !mac.empty?
|
111
|
+
end
|
112
|
+
end
|
113
|
+
.compact
|
114
|
+
end
|
115
|
+
|
116
|
+
def from_ipconfig
|
117
|
+
name = nil
|
118
|
+
%x{ipconfig /all}
|
119
|
+
.split(/\n/)
|
120
|
+
.collect do |line|
|
121
|
+
if line =~ /\A[^:]+\s*adapter\s*([^:]+):\z/
|
122
|
+
name = clean($1)
|
123
|
+
nil
|
124
|
+
else
|
125
|
+
mac = filter_mac(line)
|
126
|
+
[name, mac] if !name.nil? && !mac.empty?
|
127
|
+
end
|
128
|
+
end
|
129
|
+
.compact
|
130
|
+
end
|
131
|
+
|
132
|
+
def from_getnameinfo
|
133
|
+
ifaddrs.map { |iface| mac = iface.addr.getnameinfo[0]; [iface.name, mac] }
|
134
|
+
end
|
135
|
+
|
136
|
+
def from_inspect_sockaddr
|
137
|
+
ifaddrs.map { |iface| mac = iface.addr.inspect_sockaddr[HWADDR_REGEX, 1]; [iface.name, mac] }
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
MacAddr = Macaddr = Mac
|
data/macaddr.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
2
|
+
require 'macaddr/version'
|
3
|
+
Gem::Specification::new do |spec|
|
4
|
+
spec.name = "macaddr-steakknife"
|
5
|
+
spec.version = MacAddr::VERSION
|
6
|
+
spec.platform = Gem::Platform::RUBY
|
7
|
+
spec.summary = "macaddr"
|
8
|
+
spec.description = "Cross-platform mac address determination for ruby"
|
9
|
+
spec.license = "Ruby"
|
10
|
+
|
11
|
+
spec.files =
|
12
|
+
["Gemfile",
|
13
|
+
"LICENSE",
|
14
|
+
"README",
|
15
|
+
"lib/macaddr.rb",
|
16
|
+
"lib/macaddr/version.rb",
|
17
|
+
"macaddr.gemspec",
|
18
|
+
]
|
19
|
+
|
20
|
+
spec.require_path = "lib"
|
21
|
+
|
22
|
+
spec.rubyforge_project = "codeforpeople"
|
23
|
+
spec.author = "Ara T. Howard"
|
24
|
+
spec.email = "ara.t.howard@gmail.com"
|
25
|
+
spec.homepage = "https://github.com/steakknife/macaddr"
|
26
|
+
end
|
27
|
+
.tap {|gem| pk = File.expand_path(File.join('~/.keys', 'gem-private_key.pem')); gem.signing_key = pk if File.exist? pk; gem.cert_chain = ['gem-public_cert.pem']} # pressed firmly by waxseal
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: macaddr-steakknife
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.8.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ara T. Howard
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
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
|
42
|
+
8m+dgfPonsYSqnDDfLuAmtKhLAA=
|
43
|
+
-----END CERTIFICATE-----
|
44
|
+
date: 2016-02-11 00:00:00.000000000 Z
|
45
|
+
dependencies: []
|
46
|
+
description: Cross-platform mac address determination for ruby
|
47
|
+
email: ara.t.howard@gmail.com
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- Gemfile
|
53
|
+
- LICENSE
|
54
|
+
- README
|
55
|
+
- lib/macaddr.rb
|
56
|
+
- lib/macaddr/version.rb
|
57
|
+
- macaddr.gemspec
|
58
|
+
homepage: https://github.com/steakknife/macaddr
|
59
|
+
licenses:
|
60
|
+
- Ruby
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project: codeforpeople
|
78
|
+
rubygems_version: 2.5.1
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: macaddr
|
82
|
+
test_files: []
|
83
|
+
has_rdoc:
|
metadata.gz.sig
ADDED
Binary file
|