linux-ip-addr 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d81d96b09dc43d3c8bad671207fac42074618241
4
+ data.tar.gz: 57adf5ffdee3436161df76f0781c34f70e900895
5
+ SHA512:
6
+ metadata.gz: eb34e19e0610e70b3179420948f1b7ae3aa0c23c9ec6875b2c7910115e0dbb24f9b4908a46289fe078bffbe3b58033f4272a112c494f10e421faae3921fe9897
7
+ data.tar.gz: 351a37c90d6ae9626fd6681c31ce090c2110dbc319f799d74d941c77e7689881dd22fd4d3b5aa99def14bb26561a152ca2727e633f53e140910336c7d51917a6
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in linux-ip-addr.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Meno Abels
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Linux::Ip::Addr
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'linux-ip-addr'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install linux-ip-addr
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/linux-ip-addr/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,64 @@
1
+ require "linux/ip/addr/version"
2
+
3
+ module Linux
4
+ module Ip
5
+ module Addr
6
+
7
+ class Interface
8
+ attr_accessor :mac_address
9
+ attr_reader :ips, :name
10
+ def initialize(name)
11
+ @name = name
12
+ @ips = []
13
+ end
14
+ def add_ip(ip)
15
+ @ips << ip
16
+ end
17
+ end
18
+
19
+
20
+ class IpAddr
21
+ attr_reader :interfaces
22
+ def initialize
23
+ @interfaces = []
24
+ end
25
+ def length
26
+ interfaces.length
27
+ end
28
+ def find(name)
29
+ interfaces.find { |i| i.name == name }
30
+ end
31
+ end
32
+
33
+ #23: br202: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
34
+ # link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
35
+ # inet 10.10.103.11/22 brd 10.10.103.255 scope global br202
36
+ # valid_lft forever preferred_lft forever
37
+ # inet6 fe80::84c6:95ff:feb7:d76d/64 scope link
38
+ # valid_lft forever preferred_lft forever
39
+ def self.parse_from_lines(lines)
40
+ ip_addr = IpAddr.new
41
+ iface = nil
42
+ lines.each do |line|
43
+ line = line.strip.chomp
44
+ if line =~ /^\d+:\s+(\S+):\s+(.*)$/
45
+ iface = Interface.new($1)
46
+ ip_addr.interfaces << iface
47
+ elsif iface
48
+ if line =~ /^\s*line\/ether\s+([a-f0-9:]+)\s+.*$/
49
+ iface.mac_address($1)
50
+ elsif line =~ /^\s*inet[6]*\s+([0-9a-f\:\.\/]+)\s+.*$/
51
+ iface.add_ip($1)
52
+ end
53
+ end
54
+ end
55
+ ip_addr
56
+ end
57
+
58
+ def self.parse
59
+ parse_from_lines(IO.popen("ip addr show").read.lines)
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,7 @@
1
+ module Linux
2
+ module Ip
3
+ module Addr
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'linux/ip/addr/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "linux-ip-addr"
8
+ spec.version = Linux::Ip::Addr::VERSION
9
+ spec.authors = ["Meno Abels"]
10
+ spec.email = ["meno.abels@adviser.com"]
11
+ spec.summary = %q{Parse the output of ip addr on a linux system}
12
+ spec.description = %q{Parse the output of ip addr on a linux system}
13
+ spec.homepage = "https://github.com/mabels/gem-linux-ip-addr"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ # spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_development_dependency "ipaddress", "~> 0.8"
23
+ end
@@ -0,0 +1,155 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ require 'linux/ip/addr'
7
+
8
+ class LinuxIpAddrTest < Test::Unit::TestCase
9
+ def setup
10
+ @ip_addr_show = <<SAMPLE
11
+ 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
12
+ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
13
+ inet 127.0.0.1/8 scope host lo
14
+ valid_lft forever preferred_lft forever
15
+ inet6 ::1/128 scope host
16
+ valid_lft forever preferred_lft forever
17
+ 2: p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
18
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
19
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
20
+ valid_lft forever preferred_lft forever
21
+ 3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
22
+ link/ether 36:1b:a1:ba:73:54 brd ff:ff:ff:ff:ff:ff
23
+ 4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
24
+ link/ether 74:e5:0b:d7:9d:44 brd ff:ff:ff:ff:ff:ff
25
+ 5: p1p1.1507@p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br1507 state UP group default
26
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
27
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
28
+ valid_lft forever preferred_lft forever
29
+ 6: p1p1.995@p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br995 state UP group default
30
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
31
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
32
+ valid_lft forever preferred_lft forever
33
+ 7: br1507: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
34
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
35
+ inet 126.69.140.182/26 brd 126.96.140.191 scope global br1507
36
+ valid_lft forever preferred_lft forever
37
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
38
+ valid_lft forever preferred_lft forever
39
+ 8: br995: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
40
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
41
+ inet 10.10.95.11/22 brd 10.10.95.255 scope global br995
42
+ valid_lft forever preferred_lft forever
43
+ inet 10.10.95.12/22 scope global secondary br995
44
+ valid_lft forever preferred_lft forever
45
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
46
+ valid_lft forever preferred_lft forever
47
+ 9: gre0: <NOARP> mtu 1476 qdisc noop state DOWN group default
48
+ link/gre 169.254.10.9 brd 169.254.10.10
49
+ 10: gretap0: <BROADCAST,MULTICAST> mtu 1476 qdisc noop state DOWN group default qlen 1000
50
+ link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
51
+ 11: gt0@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default
52
+ link/gre 169.254.10.1 peer 169.254.10.2
53
+ inet 169.254.10.1/30 brd 169.254.10.3 scope global gt0
54
+ valid_lft forever preferred_lft forever
55
+ inet6 fe80::5efe:a9fe:a01/64 scope link
56
+ valid_lft forever preferred_lft forever
57
+ 12: gt1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default
58
+ link/gre 169.254.10.5 peer 169.254.10.6
59
+ inet 169.254.10.5/30 brd 169.254.10.7 scope global gt1
60
+ valid_lft forever preferred_lft forever
61
+ inet6 fe80::5efe:a9fe:a05/64 scope link
62
+ valid_lft forever preferred_lft forever
63
+ 13: gtmia@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default
64
+ link/gre 169.254.10.9 peer 169.254.10.10
65
+ inet 169.254.10.9/30 brd 169.254.10.11 scope global gtmia
66
+ valid_lft forever preferred_lft forever
67
+ inet6 fe80::5efe:a9fe:a09/64 scope link
68
+ valid_lft forever preferred_lft forever
69
+ 14: p1p1.110@p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br110 state UP group default
70
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
71
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
72
+ valid_lft forever preferred_lft forever
73
+ 15: p1p1.201@p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br201 state UP group default
74
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
75
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
76
+ valid_lft forever preferred_lft forever
77
+ 16: p1p1.202@p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br202 state UP group default
78
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
79
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
80
+ valid_lft forever preferred_lft forever
81
+ 17: p1p1.402@p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br402 state UP group default
82
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
83
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
84
+ valid_lft forever preferred_lft forever
85
+ 18: p1p1.997@p1p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br997 state UP group default
86
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
87
+ inet6 fe80::d227:88ff:fed1:16d/64 scope link
88
+ valid_lft forever preferred_lft forever
89
+ 19: br110: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
90
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
91
+ inet 10.1.0.11/16 brd 10.1.255.255 scope global br110
92
+ valid_lft forever preferred_lft forever
93
+ inet6 fe80::1046:faff:feed:ca96/64 scope link
94
+ valid_lft forever preferred_lft forever
95
+ 20: br201: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
96
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
97
+ inet 10.10.16.11/22 brd 10.10.19.255 scope global br201
98
+ valid_lft forever preferred_lft forever
99
+ inet6 fe80::50ac:36ff:fe1b:24e8/64 scope link
100
+ valid_lft forever preferred_lft forever
101
+ 21: br402: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
102
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
103
+ inet 10.10.99.11/22 brd 10.10.99.255 scope global br402
104
+ valid_lft forever preferred_lft forever
105
+ inet6 fe80::f41f:71ff:fe45:2e3b/64 scope link
106
+ valid_lft forever preferred_lft forever
107
+ 22: br997: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
108
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
109
+ inet 17.110.59.53/26 brd 17.110.59.63 scope global br997
110
+ valid_lft forever preferred_lft forever
111
+ inet6 fe80::408e:b9ff:fe81:d1f2/64 scope link
112
+ valid_lft forever preferred_lft forever
113
+ 23: br202: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
114
+ link/ether d0:27:88:d1:01:6d brd ff:ff:ff:ff:ff:ff
115
+ inet 10.10.103.11/22 brd 10.10.103.255 scope global br202
116
+ valid_lft forever preferred_lft forever
117
+ inet6 fe80::84c6:95ff:feb7:d76d/64 scope link
118
+ valid_lft forever preferred_lft forever
119
+ 30: tun2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
120
+ link/none
121
+ inet 10.153.66.129 peer 10.153.66.130/32 scope global tun2
122
+ valid_lft forever preferred_lft forever
123
+ 31: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
124
+ link/none
125
+ inet 10.153.65.1 peer 10.153.65.2/32 scope global tun1
126
+ valid_lft forever preferred_lft forever
127
+ 32: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
128
+ link/none
129
+ inet 10.153.65.129 peer 10.153.65.130/32 scope global tun0
130
+ valid_lft forever preferred_lft forever
131
+ SAMPLE
132
+ end
133
+
134
+ def test_me
135
+ ip_addr = Linux::Ip::Addr.parse_from_lines(@ip_addr_show.lines)
136
+ assert_equal 26, ip_addr.length
137
+ assert_equal "br995", ip_addr.find('br995').name
138
+ assert_equal ["10.10.95.11/22", "10.10.95.12/22", "fe80::d227:88ff:fed1:16d/64"], ip_addr.find('br995').ips
139
+ end
140
+
141
+ def test_find
142
+ require 'ipaddress'
143
+ map = ["10.10.95.0/22"].map{|i| IPAddress.parse(i)}
144
+ ip_addr = Linux::Ip::Addr.parse_from_lines(@ip_addr_show.lines)
145
+ ret = ip_addr.interfaces.find do |iface|
146
+ iface.ips.find do |ip|
147
+ ip = IPAddress.parse(ip)
148
+ ip.ipv4? && map.find {|net| net.include?(ip) }
149
+ end
150
+ end
151
+ assert_equal "br995", ret.name
152
+ end
153
+
154
+ end
155
+
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: linux-ip-addr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Meno Abels
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ipaddress
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.8'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.8'
27
+ description: Parse the output of ip addr on a linux system
28
+ email:
29
+ - meno.abels@adviser.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .gitignore
35
+ - Gemfile
36
+ - LICENSE.txt
37
+ - README.md
38
+ - Rakefile
39
+ - lib/linux/ip/addr.rb
40
+ - lib/linux/ip/addr/version.rb
41
+ - linux-ip-addr.gemspec
42
+ - test/linux_ip_addr_test.rb
43
+ homepage: https://github.com/mabels/gem-linux-ip-addr
44
+ licenses:
45
+ - MIT
46
+ metadata: {}
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project:
63
+ rubygems_version: 2.0.14
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: Parse the output of ip addr on a linux system
67
+ test_files:
68
+ - test/linux_ip_addr_test.rb
69
+ has_rdoc: