network_interface 0.0.1
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.
- data/.gitignore +11 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +30 -0
- data/LICENSE +45 -0
- data/README.md +29 -0
- data/Rakefile +11 -0
- data/ext/network_interface_ext/extconf.rb +95 -0
- data/ext/network_interface_ext/netifaces.c +1008 -0
- data/ext/network_interface_ext/netifaces.h +185 -0
- data/lib/network_interface.rb +6 -0
- data/lib/network_interface/version.rb +3 -0
- data/network_interface.gemspec +29 -0
- data/spec/netiface_spec.rb +48 -0
- data/spec/spec_helper.rb +107 -0
- metadata +138 -0
@@ -0,0 +1,185 @@
|
|
1
|
+
#ifndef WIN32
|
2
|
+
|
3
|
+
# include <sys/types.h>
|
4
|
+
# include <sys/socket.h>
|
5
|
+
# include <net/if.h>
|
6
|
+
# include <netdb.h>
|
7
|
+
|
8
|
+
# if HAVE_SOCKET_IOCTLS
|
9
|
+
# include <sys/ioctl.h>
|
10
|
+
# include <netinet/in.h>
|
11
|
+
# include <arpa/inet.h>
|
12
|
+
#if defined(__sun)
|
13
|
+
#include <unistd.h>
|
14
|
+
#include <stropts.h>
|
15
|
+
#include <sys/sockio.h>
|
16
|
+
#endif
|
17
|
+
# endif /* HAVE_SOCKET_IOCTLS */
|
18
|
+
|
19
|
+
/* For logical interfaces support we convert all names to same name prefixed with l */
|
20
|
+
#if HAVE_SIOCGLIFNUM
|
21
|
+
#define CNAME(x) l##x
|
22
|
+
#else
|
23
|
+
#define CNAME(x) x
|
24
|
+
#endif
|
25
|
+
|
26
|
+
#if HAVE_NET_IF_DL_H
|
27
|
+
# include <net/if_dl.h>
|
28
|
+
#endif
|
29
|
+
|
30
|
+
/* For Linux, include all the sockaddr
|
31
|
+
definitions we can lay our hands on. */
|
32
|
+
#if !HAVE_SOCKADDR_SA_LEN
|
33
|
+
# if HAVE_NETASH_ASH_H
|
34
|
+
# include <netash/ash.h>
|
35
|
+
# endif
|
36
|
+
# if HAVE_NETATALK_AT_H
|
37
|
+
# include <netatalk/at.h>
|
38
|
+
# endif
|
39
|
+
# if HAVE_NETAX25_AX25_H
|
40
|
+
# include <netax25/ax25.h>
|
41
|
+
# endif
|
42
|
+
# if HAVE_NETECONET_EC_H
|
43
|
+
# include <neteconet/ec.h>
|
44
|
+
# endif
|
45
|
+
# if HAVE_NETIPX_IPX_H
|
46
|
+
# include <netipx/ipx.h>
|
47
|
+
# endif
|
48
|
+
# if HAVE_NETPACKET_PACKET_H
|
49
|
+
# include <netpacket/packet.h>
|
50
|
+
# endif
|
51
|
+
# if HAVE_NETROSE_ROSE_H
|
52
|
+
# include <netrose/rose.h>
|
53
|
+
# endif
|
54
|
+
# if HAVE_LINUX_IRDA_H
|
55
|
+
# include <linux/irda.h>
|
56
|
+
# endif
|
57
|
+
# if HAVE_LINUX_ATM_H
|
58
|
+
# include <linux/atm.h>
|
59
|
+
# endif
|
60
|
+
# if HAVE_LINUX_LLC_H
|
61
|
+
# include <linux/llc.h>
|
62
|
+
# endif
|
63
|
+
# if HAVE_LINUX_TIPC_H
|
64
|
+
# include <linux/tipc.h>
|
65
|
+
# endif
|
66
|
+
# if HAVE_LINUX_DN_H
|
67
|
+
# include <linux/dn.h>
|
68
|
+
# endif
|
69
|
+
|
70
|
+
/* Map address families to sizes of sockaddr structs */
|
71
|
+
static int af_to_len(int af)
|
72
|
+
{
|
73
|
+
switch (af)
|
74
|
+
{
|
75
|
+
case AF_INET: return sizeof (struct sockaddr_in);
|
76
|
+
#if defined(AF_INET6) && HAVE_SOCKADDR_IN6
|
77
|
+
case AF_INET6: return sizeof (struct sockaddr_in6);
|
78
|
+
#endif
|
79
|
+
#if defined(AF_AX25) && HAVE_SOCKADDR_AX25
|
80
|
+
# if defined(AF_NETROM)
|
81
|
+
case AF_NETROM: /* I'm assuming this is carried over x25 */
|
82
|
+
# endif
|
83
|
+
case AF_AX25: return sizeof (struct sockaddr_ax25);
|
84
|
+
#endif
|
85
|
+
#if defined(AF_IPX) && HAVE_SOCKADDR_IPX
|
86
|
+
case AF_IPX: return sizeof (struct sockaddr_ipx);
|
87
|
+
#endif
|
88
|
+
#if defined(AF_APPLETALK) && HAVE_SOCKADDR_AT
|
89
|
+
case AF_APPLETALK: return sizeof (struct sockaddr_at);
|
90
|
+
#endif
|
91
|
+
#if defined(AF_ATMPVC) && HAVE_SOCKADDR_ATMPVC
|
92
|
+
case AF_ATMPVC: return sizeof (struct sockaddr_atmpvc);
|
93
|
+
#endif
|
94
|
+
#if defined(AF_ATMSVC) && HAVE_SOCKADDR_ATMSVC
|
95
|
+
case AF_ATMSVC: return sizeof (struct sockaddr_atmsvc);
|
96
|
+
#endif
|
97
|
+
#if defined(AF_X25) && HAVE_SOCKADDR_X25
|
98
|
+
case AF_X25: return sizeof (struct sockaddr_x25);
|
99
|
+
#endif
|
100
|
+
#if defined(AF_ROSE) && HAVE_SOCKADDR_ROSE
|
101
|
+
case AF_ROSE: return sizeof (struct sockaddr_rose);
|
102
|
+
#endif
|
103
|
+
#if defined(AF_DECnet) && HAVE_SOCKADDR_DN
|
104
|
+
case AF_DECnet: return sizeof (struct sockaddr_dn);
|
105
|
+
#endif
|
106
|
+
#if defined(AF_PACKET) && HAVE_SOCKADDR_LL
|
107
|
+
case AF_PACKET: return sizeof (struct sockaddr_ll);
|
108
|
+
#endif
|
109
|
+
#if defined(AF_ASH) && HAVE_SOCKADDR_ASH
|
110
|
+
case AF_ASH: return sizeof (struct sockaddr_ash);
|
111
|
+
#endif
|
112
|
+
#if defined(AF_ECONET) && HAVE_SOCKADDR_EC
|
113
|
+
case AF_ECONET: return sizeof (struct sockaddr_ec);
|
114
|
+
#endif
|
115
|
+
#if defined(AF_IRDA) && HAVE_SOCKADDR_IRDA
|
116
|
+
case AF_IRDA: return sizeof (struct sockaddr_irda);
|
117
|
+
#endif
|
118
|
+
}
|
119
|
+
return sizeof (struct sockaddr);
|
120
|
+
}
|
121
|
+
|
122
|
+
#define SA_LEN(sa) af_to_len(sa->sa_family)
|
123
|
+
#if HAVE_SIOCGLIFNUM
|
124
|
+
#define SS_LEN(sa) af_to_len(sa->ss_family)
|
125
|
+
#else
|
126
|
+
#define SS_LEN(sa) SA_LEN(sa)
|
127
|
+
#endif
|
128
|
+
#else
|
129
|
+
//remove a warning on openbsd
|
130
|
+
#ifndef SA_LEN
|
131
|
+
#define SA_LEN(sa) sa->sa_len
|
132
|
+
#endif
|
133
|
+
#endif /* !HAVE_SOCKADDR_SA_LEN */
|
134
|
+
|
135
|
+
# if HAVE_GETIFADDRS
|
136
|
+
# include <ifaddrs.h>
|
137
|
+
# endif /* HAVE_GETIFADDRS */
|
138
|
+
|
139
|
+
# if !HAVE_GETIFADDRS && (!HAVE_SOCKET_IOCTLS || !HAVE_SIOCGIFCONF)
|
140
|
+
/* If the platform doesn't define, what we need, barf. If you're seeing this,
|
141
|
+
it means you need to write suitable code to retrieve interface information
|
142
|
+
on your system. */
|
143
|
+
# error You need to add code for your platform.
|
144
|
+
# endif
|
145
|
+
|
146
|
+
#else /* defined(WIN32) */
|
147
|
+
|
148
|
+
#include <windows.h>
|
149
|
+
#include <winsock2.h>
|
150
|
+
#include <iphlpapi.h>
|
151
|
+
|
152
|
+
#endif /* defined(WIN32) */
|
153
|
+
|
154
|
+
#ifndef TRUE
|
155
|
+
#define TRUE 1
|
156
|
+
#endif
|
157
|
+
|
158
|
+
#ifndef FALSE
|
159
|
+
#define FALSE 0
|
160
|
+
#endif
|
161
|
+
|
162
|
+
/* On systems without AF_LINK (Windows, for instance), define it anyway, but
|
163
|
+
give it a crazy value. On Linux, which has AF_PACKET but not AF_LINK,
|
164
|
+
define AF_LINK as the latter instead. */
|
165
|
+
#ifndef AF_LINK
|
166
|
+
# ifdef AF_PACKET
|
167
|
+
# define AF_LINK AF_PACKET
|
168
|
+
# else
|
169
|
+
# define AF_LINK -1000
|
170
|
+
# endif
|
171
|
+
# define HAVE_AF_LINK 0
|
172
|
+
#else
|
173
|
+
# define HAVE_AF_LINK 1
|
174
|
+
#endif
|
175
|
+
|
176
|
+
|
177
|
+
//Prototypes
|
178
|
+
//Get a list of the adresses for a network interface
|
179
|
+
VALUE rbnetifaces_s_addresses (VALUE class, VALUE dev);
|
180
|
+
//Get a list of the network interfaces
|
181
|
+
VALUE rbnetifaces_s_interfaces (VALUE self);
|
182
|
+
//This function is usefull only under windows to retrieve some additionnal interfaces informations
|
183
|
+
VALUE rbnetifaces_s_interface_info (VALUE self, VALUE dev);
|
184
|
+
|
185
|
+
void Init_network_interface_ext();
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'network_interface/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "network_interface"
|
8
|
+
spec.version = NetworkInterface::VERSION
|
9
|
+
spec.authors = ["Brandon Turner", "Lance Sanchez"]
|
10
|
+
spec.email = ["lance.sanchez@rapid7.com", "brandon_turner@rapid7.com"]
|
11
|
+
spec.summary = "A cross platform gem to help get network interface information"
|
12
|
+
spec.description = %q{
|
13
|
+
This gem was originally added to the Metasploit Pcaprub gem. It's been spun
|
14
|
+
out into its own gem for anyone who might want to programmatically get
|
15
|
+
information on their network interfaces. }
|
16
|
+
spec.homepage = "https://github.com/rapid7/network_interface"
|
17
|
+
spec.license = "MIT"
|
18
|
+
|
19
|
+
spec.files = `git ls-files`.split($/)
|
20
|
+
spec.extensions = ['ext/network_interface_ext/extconf.rb']
|
21
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
22
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
23
|
+
spec.require_paths = ["lib"]
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
26
|
+
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency "rake-compiler", ">= 0"
|
28
|
+
spec.add_development_dependency "rspec"
|
29
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe NetworkInterface do
|
4
|
+
|
5
|
+
describe "#interfaces" do
|
6
|
+
it "should have the same interfaces as the system_interfaces" do
|
7
|
+
NetworkInterface.interfaces.should include(*system_interfaces_with_addresses.keys)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#addresses" do
|
12
|
+
system_interfaces_with_addresses.each do |interface, hash|
|
13
|
+
describe "#{friendly_interface_names.key(interface)}" do
|
14
|
+
if hash.has_key?(:ipv4)
|
15
|
+
describe "ipv4" do
|
16
|
+
it "should have an ipv4 address" do
|
17
|
+
NetworkInterface.addresses(interface).should have_key NetworkInterface::AF_INET
|
18
|
+
end
|
19
|
+
it "should match the system interface of #{hash[:ipv4]}" do
|
20
|
+
NetworkInterface.addresses(interface)[NetworkInterface::AF_INET][0]["addr"].should == hash[:ipv4]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
if hash.has_key?(:ipv6)
|
25
|
+
describe "ipv6" do
|
26
|
+
it "should have an ipv6 address" do
|
27
|
+
NetworkInterface.addresses(interface).should have_key NetworkInterface::AF_INET6
|
28
|
+
end
|
29
|
+
it "should match the system interface of #{hash[:ipv6]}" do
|
30
|
+
NetworkInterface.addresses(interface)[NetworkInterface::AF_INET6][0]["addr"].should == hash[:ipv6]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
if hash.has_key?(:mac)
|
35
|
+
describe "MAC address" do
|
36
|
+
it "should have a MAC address" do
|
37
|
+
NetworkInterface.addresses(interface).should have_key NetworkInterface::AF_LINK
|
38
|
+
end
|
39
|
+
it "should match the system interface of #{hash[:mac]}" do
|
40
|
+
NetworkInterface.addresses(interface)[NetworkInterface::AF_LINK][0]["addr"].should == hash[:mac]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
3
|
+
require 'network_interface'
|
4
|
+
require 'rspec'
|
5
|
+
require 'rspec/autorun'
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
end
|
9
|
+
|
10
|
+
def friendly_interface_names
|
11
|
+
interfaces = NetworkInterface.interfaces
|
12
|
+
interface_names ||= begin
|
13
|
+
h = {}
|
14
|
+
interfaces.each do |interface|
|
15
|
+
info = NetworkInterface.interface_info(interface)
|
16
|
+
name = if info && info.has_key?('name')
|
17
|
+
info['name']
|
18
|
+
else
|
19
|
+
interface
|
20
|
+
end
|
21
|
+
h[name] = interface
|
22
|
+
end
|
23
|
+
h
|
24
|
+
end
|
25
|
+
interface_names
|
26
|
+
end
|
27
|
+
|
28
|
+
if RUBY_PLATFORM =~ /i386-mingw32/
|
29
|
+
def system_interfaces
|
30
|
+
ipconfig = `ipconfig`
|
31
|
+
ipconfig_array = ipconfig.split("\n").reject {|s| s.empty?}
|
32
|
+
|
33
|
+
getmac = `getmac -nh`
|
34
|
+
getmac_array = getmac.split("\n").reject {|s| s.empty?}
|
35
|
+
getmac_array.map!{|element| element.split(" ")}
|
36
|
+
getmac_hash = getmac_array.inject({}) do |hash, array|
|
37
|
+
hash.merge!({array[1][/\{(.*)\}/,1] => array[0].gsub("-",":").downcase})
|
38
|
+
end
|
39
|
+
|
40
|
+
interfaces = {}
|
41
|
+
@key = nil
|
42
|
+
ipconfig_array.each do |element|
|
43
|
+
if element.start_with? " "
|
44
|
+
case element
|
45
|
+
when /IPv6 Address.*: (.*)/
|
46
|
+
# interfaces[@key][:ipv6] = $1
|
47
|
+
when /IPv4 Address.*: (.*)/
|
48
|
+
interfaces[@key][:ipv4] = $1
|
49
|
+
interfaces[@key][:mac] = getmac_hash[@key[/\{(.*)\}/,1]]
|
50
|
+
end
|
51
|
+
elsif element[/Windows IP Configuration/]
|
52
|
+
elsif element[/Ethernet adapter (.*):/]
|
53
|
+
@key = friendly_interface_names[$1]
|
54
|
+
interfaces[@key] = {}
|
55
|
+
else
|
56
|
+
@key = element[/(.*):/,1]
|
57
|
+
interfaces[@key] = {}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
interfaces
|
62
|
+
end
|
63
|
+
|
64
|
+
else
|
65
|
+
def system_interfaces
|
66
|
+
ifconfig = `/sbin/ifconfig`
|
67
|
+
ifconfig_array = ifconfig.split("\n")
|
68
|
+
ifconfig_array.map!{|element| element.split("\n")}
|
69
|
+
ifconfig_array.flatten!
|
70
|
+
interfaces = {}
|
71
|
+
@key = nil
|
72
|
+
ifconfig_array.each do |element|
|
73
|
+
if element.start_with?("\t") || element.start_with?(" ")
|
74
|
+
case element
|
75
|
+
when /ether ((\w{2}\:){5}(\w{2}))/
|
76
|
+
interfaces[@key][:mac] = $1
|
77
|
+
when /inet6 (.*) prefixlen/
|
78
|
+
interfaces[@key][:ipv6] = $1
|
79
|
+
when /inet ((\d{1,3}\.){3}\d{1,3}).*broadcast ((\d{1,3}\.){3}\d{1,3})/
|
80
|
+
interfaces[@key][:ipv4] = $1
|
81
|
+
interfaces[@key][:broadcast] = $3
|
82
|
+
when /addr:((\d{1,3}\.){3}\d{1,3})\s+Bcast:((\d{1,3}\.){3}\d{1,3})/i
|
83
|
+
interfaces[@key][:ipv4] = $1
|
84
|
+
interfaces[@key][:broadcast] = $3
|
85
|
+
end
|
86
|
+
else
|
87
|
+
@key = element.split(' ').first[/(\w*)/,1]
|
88
|
+
interfaces[@key] = {}
|
89
|
+
if element[/HWaddr ((\w{2}\:){5}(\w{2}))/]
|
90
|
+
interfaces[@key][:mac] = $1
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
interfaces
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
def system_interfaces_with_addresses
|
100
|
+
interfaces = {}
|
101
|
+
system_interfaces.each do |key, value|
|
102
|
+
if value.has_key? :ipv4
|
103
|
+
interfaces[key] = value
|
104
|
+
end
|
105
|
+
end
|
106
|
+
interfaces
|
107
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: network_interface
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Brandon Turner
|
9
|
+
- Lance Sanchez
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-07-08 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: bundler
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.3'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.3'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rake
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :development
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake-compiler
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rspec
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
description: ! "\n This gem was originally added to the Metasploit Pcaprub gem.
|
80
|
+
It's been spun\n out into its own gem for anyone who might want to programmatically
|
81
|
+
get\n information on their network interfaces. "
|
82
|
+
email:
|
83
|
+
- lance.sanchez@rapid7.com
|
84
|
+
- brandon_turner@rapid7.com
|
85
|
+
executables: []
|
86
|
+
extensions:
|
87
|
+
- ext/network_interface_ext/extconf.rb
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- .gitignore
|
91
|
+
- .rspec
|
92
|
+
- Gemfile
|
93
|
+
- Gemfile.lock
|
94
|
+
- LICENSE
|
95
|
+
- README.md
|
96
|
+
- Rakefile
|
97
|
+
- ext/network_interface_ext/extconf.rb
|
98
|
+
- ext/network_interface_ext/netifaces.c
|
99
|
+
- ext/network_interface_ext/netifaces.h
|
100
|
+
- lib/network_interface.rb
|
101
|
+
- lib/network_interface/version.rb
|
102
|
+
- network_interface.gemspec
|
103
|
+
- spec/netiface_spec.rb
|
104
|
+
- spec/spec_helper.rb
|
105
|
+
homepage: https://github.com/rapid7/network_interface
|
106
|
+
licenses:
|
107
|
+
- MIT
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
segments:
|
119
|
+
- 0
|
120
|
+
hash: -3620416272362916495
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
hash: -3620416272362916495
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 1.8.25
|
133
|
+
signing_key:
|
134
|
+
specification_version: 3
|
135
|
+
summary: A cross platform gem to help get network interface information
|
136
|
+
test_files:
|
137
|
+
- spec/netiface_spec.rb
|
138
|
+
- spec/spec_helper.rb
|