wol 0.1.1 → 0.2.0
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/VERSION +1 -1
- data/bin/wol +37 -27
- data/lib/parsefile.rb +11 -5
- data/lib/wol.rb +6 -6
- data/spec/wol_spec.rb +2 -2
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/wol
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
|
3
3
|
require 'optparse'
|
4
|
-
require 'wol'
|
5
|
-
require 'parsefile'
|
4
|
+
require 'lib/wol.rb'
|
5
|
+
require 'lib/parsefile.rb'
|
6
6
|
require 'pp'
|
7
7
|
|
8
8
|
class Runner
|
9
|
-
|
9
|
+
@sample_file = %{# File structure
|
10
10
|
# --------------
|
11
11
|
# - blank lines are ignored
|
12
12
|
# - comment lines are ignored (lines starting with a hash mark '#')
|
@@ -29,12 +29,12 @@ class Runner
|
|
29
29
|
args = ["-h"] if args.empty?
|
30
30
|
|
31
31
|
options = {}
|
32
|
-
options[:
|
32
|
+
options[:quiet] = false
|
33
33
|
options[:address] = "255.255.255.255"
|
34
34
|
options[:port] = 9
|
35
35
|
options[:interval] = 0.01
|
36
36
|
options[:count] = 3
|
37
|
-
options[:macs] =
|
37
|
+
options[:macs] = Array.new
|
38
38
|
options[:file] = nil
|
39
39
|
|
40
40
|
opts = OptionParser.new do |opts|
|
@@ -46,22 +46,22 @@ class Runner
|
|
46
46
|
opts.separator "Specific options:"
|
47
47
|
|
48
48
|
opts.on( '-q', '--quiet', 'No console output' ) do
|
49
|
-
options[:
|
49
|
+
options[:quiet] = true
|
50
50
|
end
|
51
51
|
|
52
52
|
opts.on( '-a', '--address 255.255.255.255', 'Set the destination address' ) do |address|
|
53
53
|
options[:address] = address
|
54
54
|
end
|
55
55
|
|
56
|
-
opts.on( '-p', '--port 9', 'Set the destination port' ) do |port|
|
56
|
+
opts.on( '-p', '--port 9', Integer, 'Set the destination port' ) do |port|
|
57
57
|
options[:port] = port
|
58
58
|
end
|
59
59
|
|
60
|
-
opts.on( '-i', '--interval 0.01', 'Interval between sending packets in seconds') do |interval|
|
60
|
+
opts.on( '-i', '--interval 0.01', Float, 'Interval between sending packets in seconds') do |interval|
|
61
61
|
options[:interval] = interval
|
62
62
|
end
|
63
63
|
|
64
|
-
opts.on( '-c', '--count 3', 'Number of packets to send. Default 3') do |count|
|
64
|
+
opts.on( '-c', '--count 3', Integer, 'Number of packets to send. Default 3') do |count|
|
65
65
|
options[:count] = count
|
66
66
|
end
|
67
67
|
|
@@ -78,7 +78,7 @@ class Runner
|
|
78
78
|
end
|
79
79
|
|
80
80
|
opts.on_tail( '-s', '--sample-file', 'Display a sample file') do
|
81
|
-
puts
|
81
|
+
puts @sample_file
|
82
82
|
exit
|
83
83
|
end
|
84
84
|
|
@@ -91,13 +91,15 @@ class Runner
|
|
91
91
|
begin
|
92
92
|
opts.parse!(args)
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
94
|
+
if options[:file].nil?
|
95
|
+
args.each do |arg|
|
96
|
+
options[:macs] << arg if /^(\S{1,2}:\S{1,2}:\S{1,2}:\S{1,2}:\S{1,2}:\S{1,2})?$/.match(arg)
|
97
|
+
end
|
97
98
|
|
98
|
-
|
99
|
+
options[:macs].uniq!
|
100
|
+
end
|
99
101
|
|
100
|
-
options
|
102
|
+
return options
|
101
103
|
rescue OptionParser::InvalidOption => e
|
102
104
|
STDERR.puts e.message, "\n", opts
|
103
105
|
exit(-1)
|
@@ -108,33 +110,41 @@ class Runner
|
|
108
110
|
"Ruby Wake-On-LAN version 0.1.0"
|
109
111
|
end
|
110
112
|
|
111
|
-
def self.wake(options)
|
113
|
+
def self.wake(options = {})
|
112
114
|
begin
|
113
|
-
if options[:file].
|
115
|
+
if options[:file].empty?
|
114
116
|
if !options[:macs].empty?
|
115
|
-
Wol.new(options).wake
|
117
|
+
puts Wol.new(options).wake unless options[:quiet]
|
116
118
|
else
|
117
|
-
"You have to specify a file or MAC address"
|
119
|
+
puts "You have to specify a file or MAC address"
|
118
120
|
end
|
119
121
|
else
|
120
|
-
wake_from_file(options)
|
122
|
+
puts wake_from_file(options) unless options[:quiet]
|
121
123
|
end
|
122
|
-
rescue
|
123
|
-
"An error occured. Please check your inputs
|
124
|
+
rescue Exception => e
|
125
|
+
puts "An error occured. Please check your inputs."
|
126
|
+
puts "If you used a file, please check that it is properly formatted."
|
127
|
+
STDERR.puts e.message
|
128
|
+
exit(-1)
|
124
129
|
end
|
125
130
|
end
|
126
131
|
|
127
|
-
def self.wake_from_file(options)
|
132
|
+
def self.wake_from_file(options = {})
|
128
133
|
message = ""
|
129
134
|
hosts = ParseFile.parse(options[:file])
|
130
135
|
|
131
136
|
for host in hosts
|
132
|
-
options[:
|
133
|
-
|
137
|
+
options[:address], options[:macs], options[:port] = host[:address], host[:mac], host[:port]
|
138
|
+
|
139
|
+
unless options[:quiet]
|
140
|
+
message << Wol.new(options).wake
|
141
|
+
end
|
134
142
|
end
|
135
143
|
|
136
|
-
return message
|
144
|
+
return options[:quiet] ? nil : message
|
137
145
|
end
|
138
146
|
end
|
139
147
|
|
140
|
-
|
148
|
+
options = Runner.parse(ARGV)
|
149
|
+
|
150
|
+
Runner.wake(options)
|
data/lib/parsefile.rb
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
class ParseFile
|
2
|
+
|
2
3
|
def self.parse(file)
|
3
4
|
hosts = []
|
4
5
|
if File.exist?(file) && File.readable?(file)
|
5
6
|
File.open(file) do |f|
|
6
7
|
while (line = f.gets)
|
7
8
|
unless line.match(/^#/) || line.strip.empty?
|
8
|
-
mac,
|
9
|
+
mac, address, port = line.strip.split
|
9
10
|
|
10
11
|
port ||= 9
|
11
12
|
host ||= "255.255.255.255"
|
12
13
|
|
13
|
-
if check_mac(mac) && check_host(
|
14
|
-
hosts << { :mac => mac, :
|
14
|
+
if check_mac(mac) && check_host(address)
|
15
|
+
hosts << { :mac => mac, :address => address, :port => sanitize_port(port)}
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
19
20
|
end
|
20
|
-
|
21
|
+
|
21
22
|
return hosts
|
22
23
|
end
|
23
24
|
|
@@ -26,6 +27,11 @@ class ParseFile
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def self.check_host(host)
|
29
|
-
|
30
|
+
/(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$)/.match(host)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.sanitize_port(port)
|
34
|
+
p = port.to_i
|
35
|
+
return (1..61000).include?(p) ? p : 9
|
30
36
|
end
|
31
37
|
end
|
data/lib/wol.rb
CHANGED
@@ -11,7 +11,7 @@ require "socket"
|
|
11
11
|
|
12
12
|
# Ruby version of the WakeOnLan command.
|
13
13
|
class Wol
|
14
|
-
attr_accessor :macs, :address, :port, :count, :interval, :
|
14
|
+
attr_accessor :macs, :address, :port, :count, :interval, :quiet
|
15
15
|
attr_reader :socket
|
16
16
|
|
17
17
|
# Create a new instance
|
@@ -21,14 +21,14 @@ class Wol
|
|
21
21
|
# * <tt>:port => 9</tt> - The destination port. Defaults to the discard port, 9
|
22
22
|
# * <tt>:count => 1</tt> - How many times to send the MagicPacket. Defaults to 1
|
23
23
|
# * <tt>:interval => 0.01</tt> - How many seconds to wait between sending packets. Defaults to 0.01
|
24
|
-
# * <tt>:
|
24
|
+
# * <tt>:quiet => false</tt> - What to return? Returns a string summary if false, else returns nil
|
25
25
|
def initialize(options = {})
|
26
26
|
@macs = options[:macs] ||= ["ff:ff:ff:ff:ff:ff"]
|
27
27
|
@address = options[:address] ||= "255.255.255.255"
|
28
28
|
@port = options[:port] ||= 9
|
29
29
|
@count = options[:count] ||= 1
|
30
30
|
@interval = options[:interval] ||= 0.01
|
31
|
-
@
|
31
|
+
@quiet = options[:quiet]
|
32
32
|
|
33
33
|
@socket=UDPSocket.open()
|
34
34
|
|
@@ -49,10 +49,10 @@ class Wol
|
|
49
49
|
messages << send_packet(mac) + "\n"
|
50
50
|
end
|
51
51
|
|
52
|
-
if @
|
53
|
-
return messages
|
54
|
-
else
|
52
|
+
if @quiet
|
55
53
|
return nil
|
54
|
+
else
|
55
|
+
return messages
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
data/spec/wol_spec.rb
CHANGED
@@ -21,7 +21,7 @@ describe "Wake-On-LAN" do
|
|
21
21
|
Wol.new(:macs => "00:08:a1:a9:58:f6", :address => "example.com", :port => 80).wake.should == "Sending magic packet to example.com:80 with 00:08:a1:a9:58:f6\n"
|
22
22
|
end
|
23
23
|
|
24
|
-
it "should return nil if
|
25
|
-
Wol.new(:
|
24
|
+
it "should return nil if quiet is set to true" do
|
25
|
+
Wol.new(:quiet => true).wake.should == nil
|
26
26
|
end
|
27
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matias Korhonen
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-08 00:00:00 +02:00
|
13
13
|
default_executable: wol
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|