hooray 0.0.7 → 0.0.9
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 +4 -4
- data/README.md +36 -7
- data/bin/hoo +1 -1
- data/lib/hooray/cli.rb +4 -2
- data/lib/hooray/node.rb +6 -6
- data/lib/hooray/seek.rb +22 -7
- data/lib/hooray/settings.rb +17 -5
- data/lib/hooray/version.rb +1 -1
- data/spec/hooray/node_spec.rb +9 -3
- data/spec/spec_helper.rb +3 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe7164b3a564dbaca837819687bd21014d190564
|
4
|
+
data.tar.gz: 61f8f487a6570d32013f26895f0015060147abd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63de61f3a84464c2b0c3370fc9de0398b09d8927a097ff090b6305ae74ffb46f87f83fc8fc776bff7debf5e0002e01d19143f939f7855a5eb40fcaef7b6bdff6
|
7
|
+
data.tar.gz: 9ac80ce35d020fe3cc43576738e43ae75e7a458311882fea80867273fb386af99a622215a678d61d5aa21430ad2278e2ad072421499073dff3faa5c93e56462f
|
data/README.md
CHANGED
@@ -24,10 +24,11 @@ LG Electronics | 192.168.1.79 | cc:fa:XX:XX:XX:XX
|
|
24
24
|
TP-Link | 192.168.1.253 | f8:d1:XX:XX:XX:XX
|
25
25
|
Siemens Subscriber Networks | 192.168.1.254 | 00:0b:XX:XX:XX:XX
|
26
26
|
---
|
27
|
-
8 devices @ 2014-12-11 13:32:04 -0200 2.
|
27
|
+
8 devices @ 2014-12-11 13:32:04 -0200 2.27s
|
28
28
|
```
|
29
29
|
|
30
|
-
|
30
|
+
|
31
|
+
## Find running services
|
31
32
|
|
32
33
|
```
|
33
34
|
hoo list web
|
@@ -35,7 +36,11 @@ hoo list web
|
|
35
36
|
```
|
36
37
|
NAME | IP | MAC
|
37
38
|
------------------|--------------|------------------
|
39
|
+
dsl modem | 192.168.1.1 | 64:a3:XX:XX:XX:XX
|
40
|
+
test server | 192.168.1.75 | 64:a3:XX:XX:XX:XX
|
38
41
|
nofxx desktop | 192.168.1.77 | 64:a3:XX:XX:XX:XX
|
42
|
+
---
|
43
|
+
3 devices @ 2014-12-11 19:23:11 -0200 1.10s
|
39
44
|
```
|
40
45
|
|
41
46
|
Or simply by ports:
|
@@ -46,25 +51,45 @@ hoo list 80
|
|
46
51
|
hoo list 6777 udp
|
47
52
|
```
|
48
53
|
|
49
|
-
Monitor
|
54
|
+
## Monitor
|
50
55
|
|
51
56
|
```
|
52
57
|
hoo watch
|
53
58
|
```
|
54
59
|
```
|
55
60
|
New nodes @ 2014-12-11 13:53:06 -0200
|
56
|
-
NAME
|
57
|
-
|
58
|
-
|
61
|
+
NAME | IP | MAC
|
62
|
+
-----------|--------------|------------------
|
63
|
+
myphone | 192.168.1.76 | 64:a3:XX:XX:XX:XX
|
64
|
+
```
|
65
|
+
|
66
|
+
|
67
|
+
## Use another program
|
68
|
+
|
59
69
|
```
|
70
|
+
hoo ssh myphone
|
71
|
+
```
|
72
|
+
|
73
|
+
Will execute: `ssh <ip of myphone>`
|
74
|
+
|
75
|
+
You can use any program, not just ssh.
|
76
|
+
|
77
|
+
|
78
|
+
## Use as a lib
|
60
79
|
|
61
|
-
Use as a lib:
|
62
80
|
```
|
63
81
|
require 'hooray'
|
64
82
|
Hooray::Seek.lan(port, protocol).devices
|
65
83
|
Hooray::Seek.new(network, port, protocol).devices
|
66
84
|
```
|
67
85
|
|
86
|
+
* Nil port means ICMP ping.
|
87
|
+
* Protocol always defaults to :tcp.
|
88
|
+
* Network defaults to LAN IP 24 bits masked.
|
89
|
+
|
90
|
+
Possible protocols: tcp, udp, http, wmi & icmp (requires root).
|
91
|
+
|
92
|
+
|
68
93
|
## Why?
|
69
94
|
|
70
95
|
Bind macs or fix IP's is also boring and a per device work.
|
@@ -89,3 +114,7 @@ services.yml regex list ports to names you recognize.
|
|
89
114
|
|
90
115
|
* Ruby net-ping gem.
|
91
116
|
* Nmap`s mac precompiled prefixes.
|
117
|
+
|
118
|
+
|
119
|
+
Hooray should work on UNIX based systems.
|
120
|
+
Tested in Linux and OS X.
|
data/bin/hoo
CHANGED
data/lib/hooray/cli.rb
CHANGED
@@ -105,8 +105,10 @@ module Hooray
|
|
105
105
|
puts "Do you want to `#{params.first}` to a device?"
|
106
106
|
puts "Use #{ARGV.first} #{params.first} <device name>"
|
107
107
|
when 2 then
|
108
|
-
command,
|
109
|
-
|
108
|
+
command, name = params
|
109
|
+
device = Hooray::Seek.new.devices.find { |d| d.name == name }
|
110
|
+
return puts("Could not find '#{name}'") unless device
|
111
|
+
system "#{command} #{device.ip}"
|
110
112
|
else super
|
111
113
|
end
|
112
114
|
end
|
data/lib/hooray/node.rb
CHANGED
@@ -7,20 +7,20 @@ module Hooray
|
|
7
7
|
@ip = params[:ip]
|
8
8
|
@mac = params[:mac]
|
9
9
|
@mac ||= Mac.addr if @ip == Seek.my_lan_ip
|
10
|
-
|
10
|
+
@name = params[:name] || find_name
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def find_name
|
14
14
|
return unless mac
|
15
|
-
if [Mac.addr].flatten.include?(mac)
|
16
|
-
|
15
|
+
if [Mac.addr].flatten.include?(mac) # Hack until macaddr get fix
|
16
|
+
Socket.gethostname
|
17
17
|
else
|
18
|
-
|
18
|
+
Settings.device(mac) || Settings.manufacturer(mac)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_ip
|
23
|
-
|
23
|
+
IPAddr.new(ip)
|
24
24
|
end
|
25
25
|
|
26
26
|
def <=>(other)
|
data/lib/hooray/seek.rb
CHANGED
@@ -10,17 +10,32 @@ module Hooray
|
|
10
10
|
|
11
11
|
def initialize(network = nil, *params)
|
12
12
|
@network = network || Seek.local_mask
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
13
|
+
set_query(params)
|
14
|
+
set_nodes
|
15
|
+
end
|
16
|
+
alias_method :devices, :nodes
|
18
17
|
|
18
|
+
#
|
19
|
+
# Form need params based on user input
|
20
|
+
#
|
21
|
+
def set_query(params)
|
22
|
+
return if params.empty?
|
23
|
+
ports, words = params.flatten.partition { |s| s =~ /\d+/ }
|
24
|
+
@ports = ports.map(&:to_i).first # TODO
|
25
|
+
@protocol = words.select { |w| w =~ /udp|tcp/ }.join
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# Map results to @nodes << Node.new()
|
30
|
+
#
|
31
|
+
# BUG: sometimes ping returns true
|
32
|
+
# When you run list consecutively. Pretty weird!
|
33
|
+
# So we need to remove those without mac
|
34
|
+
def set_nodes
|
19
35
|
@nodes = ping.sort.map do |n|
|
20
36
|
Node.new(ip: n, mac: arp_table[n.to_s]) # , name: find_name(n))
|
21
|
-
end
|
37
|
+
end.reject { |n| n.mac.nil? } # remove those without mac
|
22
38
|
end
|
23
|
-
alias_method :devices, :nodes
|
24
39
|
|
25
40
|
def ping_class
|
26
41
|
return Net::Ping::External unless @protocol
|
data/lib/hooray/settings.rb
CHANGED
@@ -4,10 +4,10 @@ module Hooray
|
|
4
4
|
CONFIG_DIR = ENV['HOME'] + '/.hooray/'
|
5
5
|
|
6
6
|
class << self
|
7
|
-
attr_accessor :all
|
7
|
+
attr_accessor :all
|
8
8
|
|
9
9
|
def no_config_folder
|
10
|
-
|
10
|
+
pa "No config folder, run `#{$PROGRAM_NAME} init`", :red
|
11
11
|
puts
|
12
12
|
exit 1
|
13
13
|
end
|
@@ -37,15 +37,27 @@ module Hooray
|
|
37
37
|
out
|
38
38
|
end
|
39
39
|
|
40
|
+
def devices
|
41
|
+
@devices ||= {}
|
42
|
+
end
|
43
|
+
|
40
44
|
def device(mac)
|
41
|
-
devices ||= {}
|
42
45
|
devices[mac.to_sym] || devices[mac.to_s]
|
43
46
|
end
|
44
47
|
|
45
|
-
def
|
48
|
+
def services
|
49
|
+
@services ||= {}
|
50
|
+
end
|
51
|
+
|
52
|
+
def manufacturers
|
53
|
+
@macs || {}
|
54
|
+
end
|
55
|
+
|
56
|
+
def manufacturer(mac)
|
46
57
|
prefix = mac.to_s.gsub(':', '')[0, 6].upcase
|
47
|
-
|
58
|
+
manufacturers[prefix]
|
48
59
|
end
|
60
|
+
alias_method :family, :manufacturer
|
49
61
|
|
50
62
|
def all
|
51
63
|
@all ||= {}
|
data/lib/hooray/version.rb
CHANGED
data/spec/hooray/node_spec.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe '
|
3
|
+
describe 'Node' do
|
4
4
|
|
5
5
|
it 'should have ip' do
|
6
|
+
expect(Node.new(ip: '10.1.1.1').ip).to eq('10.1.1.1')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should have a #to_ip' do
|
10
|
+
expect(Node.new(ip: '10.1.1.1').to_ip).to be_a(IPAddr)
|
6
11
|
end
|
7
12
|
|
8
|
-
it 'should have mac address' do
|
9
13
|
|
14
|
+
it 'should have mac address' do
|
15
|
+
expect(Node.new(mac: 'aa:cc:dd:ee:ff:gg').mac).to eq('aa:cc:dd:ee:ff:gg')
|
10
16
|
end
|
11
17
|
|
12
18
|
it 'should have name' do
|
13
|
-
|
19
|
+
expect(Node.new(name: 'my iphone').name).to eq('my iphone')
|
14
20
|
end
|
15
21
|
|
16
22
|
it 'should have ports' do
|
data/spec/spec_helper.rb
CHANGED