interfacez 1.0.0 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cd4cdba45bdc3c9ee5f65a733afdab9736e0a99b9f5f6cc56e2bff6e3f22392
4
- data.tar.gz: ab510eaabb3e5cada57f4f10a827eb131386acd1335dafff22024bf575a565f9
3
+ metadata.gz: e3933043ffa46a19f9a456fe1c499a6d484a7a25ff5d08f31831f9badb10668a
4
+ data.tar.gz: f955df2c381771688e12a2cb013fc8c1af7cf1a0c598167b7e5cfe707b48edaf
5
5
  SHA512:
6
- metadata.gz: dfb4a1c0c8ead706d0ada9427d695fd18c647a0b181699de62b3964a15a0407dfe1b41cddd7d96147e9986bf6e86a63ed7295c13ccccbb405057dc2983f8e0d9
7
- data.tar.gz: 321405b666b65a6c4b377fb8783b73be700ab260307dd9ff217871e1beab4cf029216472b2d46c44ea1944a0e061241bd735787072b181894ee27eafd22692b7
6
+ metadata.gz: c18edcdf348bc9c38977cf7fbcaa001278094cbbe2e77bf4b7c610299f9343cee41dde69c54dc753c555d72b25b0317b392f4b90b0eb75d97e60e4e6f02626a2
7
+ data.tar.gz: 74eb55b9b86dad34452a5912179a3cc63bc7d8a4714605f3bda1cb42ce8d1e75b2764a93383f7653643bca70b21be885220b36165fc7389f56d2762ccc18af3b
@@ -0,0 +1,26 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+ schedule:
9
+ - cron: "0 9 * * *"
10
+
11
+ jobs:
12
+ build:
13
+
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - name: Set up Ruby 2.6
19
+ uses: actions/setup-ruby@v1
20
+ with:
21
+ ruby-version: 2.6.x
22
+ - name: Build and test with Rake
23
+ run: |
24
+ gem install bundler
25
+ bundle install --jobs 4 --retry 3
26
+ bundle exec rake
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- interfacez (1.0.0)
4
+ interfacez (1.0.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.3)
10
- rake (10.5.0)
10
+ rake (13.0.1)
11
11
  rspec (3.7.0)
12
12
  rspec-core (~> 3.7.0)
13
13
  rspec-expectations (~> 3.7.0)
@@ -28,8 +28,8 @@ PLATFORMS
28
28
  DEPENDENCIES
29
29
  bundler (~> 1.16)
30
30
  interfacez!
31
- rake (~> 10.0)
31
+ rake (~> 13.0)
32
32
  rspec (~> 3.0)
33
33
 
34
34
  BUNDLED WITH
35
- 1.16.1
35
+ 1.17.3
data/README.md CHANGED
@@ -11,15 +11,18 @@
11
11
  require 'interfacez'
12
12
 
13
13
  Interfacez.default
14
- # => en0
14
+ # => "en0"
15
15
 
16
16
  Interfacez.loopback
17
- # => lo0
17
+ # => "lo0"
18
18
 
19
19
  Interfacez.all do |interface|
20
20
  # do something with interface name
21
21
  puts interface
22
22
  end
23
+
24
+ Interfacez.ipv4_address_of("en0")
25
+ # => "192.168.1.2"
23
26
  ```
24
27
 
25
28
  ## License
data/interfacez.gemspec CHANGED
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.16"
25
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rake", "~> 13.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
  end
@@ -1,3 +1,3 @@
1
1
  module Interfacez
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.4"
3
3
  end
data/lib/interfacez.rb CHANGED
@@ -19,6 +19,25 @@ module Interfacez
19
19
  Interfacez.ipv6_loopbacks { |iface| return iface }
20
20
  end
21
21
 
22
+ # Check for any (ipv4 or ipv6) loopback interface.
23
+ def self.loopback?
24
+ Interfacez.ipv4_loopbacks { |iface| return true }
25
+ Interfacez.ipv6_loopbacks { |iface| return true }
26
+ return false
27
+ end
28
+
29
+ # Get all (ipv4 or ipv6) loopback interfaces.
30
+ def self.loopbacks
31
+ if block_given?
32
+ Interfacez.ipv4_loopbacks { |iface| yield iface }
33
+ Interfacez.ipv6_loopbacks { |iface| yield iface }
34
+ else
35
+ loopbacks = []
36
+ Interfacez.loopbacks { |l| loopbacks << l unless loopbacks.any?(l) }
37
+ return loopbacks
38
+ end
39
+ end
40
+
22
41
  # First available ipv4 loopback interface.
23
42
  def self.ipv4_loopback
24
43
  Interfacez.ipv4_loopbacks { |iface| return iface }
@@ -26,13 +45,17 @@ module Interfacez
26
45
 
27
46
  # All ipv4 loopback interfaces.
28
47
  def self.ipv4_loopbacks
29
- results = []
30
- raw_interface_addresses.each do |iface|
31
- next unless iface.addr.ipv4_loopback?
32
- yield iface.name if block_given?
33
- results << iface.name
48
+ if block_given?
49
+ raw_interface_addresses.each do |iface|
50
+ next unless iface.addr
51
+ next unless iface.addr.ipv4_loopback?
52
+ yield iface.name if block_given?
53
+ end
54
+ else
55
+ results = []
56
+ Interfacez.ipv4_loopbacks { |l| results << l }
57
+ return results
34
58
  end
35
- return results
36
59
  end
37
60
 
38
61
  # First available ipv6 loopback interface.
@@ -42,13 +65,17 @@ module Interfacez
42
65
 
43
66
  # All ipv6 loopback interfaces.
44
67
  def self.ipv6_loopbacks
45
- results = []
46
- raw_interface_addresses.each do |iface|
47
- next unless iface.addr.ipv6_loopback?
48
- yield iface.name if block_given?
49
- results << iface.name
68
+ if block_given?
69
+ raw_interface_addresses.each do |iface|
70
+ next unless iface.addr
71
+ next unless iface.addr.ipv6_loopback?
72
+ yield iface.name if block_given?
73
+ end
74
+ else
75
+ results = []
76
+ Interfacez.ipv4_loopbacks { |l| results << l }
77
+ return results
50
78
  end
51
- return results
52
79
  end
53
80
 
54
81
  # All network interface names available on system.
@@ -64,9 +91,11 @@ module Interfacez
64
91
 
65
92
  # Network interfaces with their ipv4 addresses, if they have
66
93
  # any asscoited with it.
67
- def self.ipv4_addresses
94
+ def self.ipv4_addresses(interface = nil)
95
+ return ipv4_addresses_of(interface) unless interface.nil?
68
96
  results = Hash.new()
69
97
  raw_interface_addresses.each do |iface|
98
+ next unless iface.addr
70
99
  if iface.addr.ipv4?
71
100
  results[iface.name] = [] unless results[iface.name]
72
101
  results[iface.name] << iface.addr.ip_address
@@ -80,11 +109,25 @@ module Interfacez
80
109
  return results
81
110
  end
82
111
 
112
+ # Return all ipv4 addresses of a given interface.
113
+ def self.ipv4_address_of(interface)
114
+ addresses = Interfacez.ipv4_addresses[interface]
115
+ return nil if addresses.nil?
116
+ return addresses[0]
117
+ end
118
+
119
+ # Return the first ipv4 address of a given interface.
120
+ def self.ipv4_addresses_of(interface)
121
+ return Interfacez.ipv4_addresses[interface] || []
122
+ end
123
+
83
124
  # Network interfaces with their ipv6 addresses, if they have
84
125
  # any asscoited with it.
85
- def self.ipv6_addresses
126
+ def self.ipv6_addresses(interface = nil)
127
+ return ipv6_addresses_of(interface) unless interface.nil?
86
128
  results = Hash.new()
87
129
  raw_interface_addresses.each do |iface|
130
+ next unless iface.addr
88
131
  if iface.addr.ipv6?
89
132
  results[iface.name] = [] unless results[iface.name]
90
133
  results[iface.name] << iface.addr.ip_address
@@ -98,6 +141,58 @@ module Interfacez
98
141
  return results
99
142
  end
100
143
 
144
+ # Return all available ipv6 addreses of a given interface.
145
+ def self.ipv6_addresses_of(interface)
146
+ return Interfacez.ipv6_addresses[interface] || []
147
+ end
148
+
149
+ # Return the first ipv6 address of a given interface.
150
+ def self.ipv6_address_of(interface)
151
+ addresses = Interfacez.ipv6_addresses_of(interface)
152
+ return nil if addresses.nil?
153
+ return addresses[0]
154
+ end
155
+
156
+ # Return first available mac addresses of a given interface.
157
+ def self.mac_address_of(interface)
158
+ list = Interfacez.mac_addresses_of(interface)
159
+ return nil if list.size.zero?
160
+ return list[0]
161
+ end
162
+
163
+ # Return all available mac addresses of a given interface.
164
+ def self.mac_addresses_of(interface)
165
+ # BSD support
166
+ if Socket.const_defined? :PF_LINK
167
+ list = raw_interface_addresses.map! do |iface|
168
+ next unless iface.name == interface
169
+ next unless iface.addr
170
+ nameinfo = iface.addr.getnameinfo
171
+ if nameinfo.first != "" && nameinfo.last == ""
172
+ nameinfo[0]
173
+ end
174
+ end.compact
175
+ # Linux support
176
+ elsif Socket.const_defined? :PF_PACKET
177
+ list = raw_interface_addresses.map! do |iface|
178
+ next unless iface.name == interface
179
+ next unless iface.addr
180
+ iface.addr.inspect_sockaddr[/hwaddr=([\h:]+)/, 1]
181
+ end.compact
182
+ else
183
+ warn "This platform may not be fully supported!"
184
+ return []
185
+ end
186
+ end
187
+
188
+ # Get index of network interface.
189
+ def self.index_of(interface)
190
+ raw_interface_addresses.each do |iface|
191
+ return iface.ifindex if iface.name == interface
192
+ end
193
+ return nil
194
+ end
195
+
101
196
  # :nodoc:
102
197
  def self.raw_interface_addresses
103
198
  Socket.getifaddrs
@@ -105,4 +200,5 @@ module Interfacez
105
200
  warn "Unable to get raw interface address list from Socket class"
106
201
  return []
107
202
  end
203
+
108
204
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interfacez
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kent 'picat' Gruber
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-03 00:00:00.000000000 Z
11
+ date: 2021-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,13 +52,14 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
- description:
55
+ description:
56
56
  email:
57
57
  - kgruber1@emich.edu
58
58
  executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".github/workflows/CI.yml"
62
63
  - ".gitignore"
63
64
  - ".rspec"
64
65
  - ".travis.yml"
@@ -78,7 +79,7 @@ homepage: https://github.com/picatz/interfacez
78
79
  licenses:
79
80
  - MIT
80
81
  metadata: {}
81
- post_install_message:
82
+ post_install_message:
82
83
  rdoc_options: []
83
84
  require_paths:
84
85
  - lib
@@ -93,9 +94,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
94
  - !ruby/object:Gem::Version
94
95
  version: '0'
95
96
  requirements: []
96
- rubyforge_project:
97
- rubygems_version: 2.7.3
98
- signing_key:
97
+ rubygems_version: 3.0.6
98
+ signing_key:
99
99
  specification_version: 4
100
100
  summary: Simplified network interface API
101
101
  test_files: []