linux-ip-addr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: