onlinestatus 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/onlinestatus +16 -0
  2. data/lib/onlinestatus.rb +71 -0
  3. metadata +64 -0
data/bin/onlinestatus ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'onlinestatus'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'onlinestatus'
8
+ end
9
+
10
+ if OnlineStatus.online?
11
+ puts "Online."
12
+ exit 0
13
+ else
14
+ puts "Offline."
15
+ exit 1
16
+ end
@@ -0,0 +1,71 @@
1
+ require 'net/ping/tcp'
2
+ require 'net/ping/udp'
3
+
4
+ module OnlineStatus
5
+ KNOWN_GOOD_HOSTS = {
6
+ # Some known good websites
7
+ "www.google.com" => { tcp: 80 },
8
+ "www.wikipedia.org" => { tcp: 80 },
9
+ "www.facebook.com" => { tcp: 80 },
10
+ "www.twitter.com" => { tcp: 80 },
11
+ "www.youtube.com" => { tcp: 80 },
12
+
13
+ # TODO: somehow ping DNS root servers?
14
+ # DNS root server IPs
15
+ #"198.41.0.4" => { udp: 53 }, # A
16
+ #"192.228.79.201" => { udp: 53 }, # B
17
+ #"192.33.4.12" => { udp: 53 }, # C
18
+ #"199.7.91.13" => { udp: 53 }, # D
19
+ #"192.203.230.10" => { udp: 53 }, # E
20
+ #"192.5.5.241" => { udp: 53 }, # F
21
+ #"192.112.36.4" => { udp: 53 }, # G
22
+ #"128.63.2.53" => { udp: 53 }, # H
23
+ #"192.36.148.17" => { udp: 53 }, # I
24
+ #"192.58.128.30" => { udp: 53 }, # J
25
+ #"193.0.14.129" => { udp: 53 }, # K
26
+ #"199.7.83.42" => { udp: 53 }, # L
27
+ #"202.12.27.33" => { udp: 53 }, # M
28
+ }
29
+
30
+ private
31
+ def self.host_pingable?(host, methods)
32
+ for protocol, port in methods
33
+ case protocol
34
+ when :tcp
35
+ ping = Net::Ping::TCP.new(host, port)
36
+ #when :udp
37
+ # ping = Net::Ping::UDP.new(host, port)
38
+ else
39
+ next
40
+ end
41
+
42
+ return true if ping.ping?
43
+ end
44
+ false
45
+ end
46
+
47
+ public
48
+ def self.online?
49
+ # Online = at least 3 known good servers are pingable
50
+ good_hosts = 0
51
+ for host, methods in KNOWN_GOOD_HOSTS
52
+ good_hosts += 1 if host_pingable?(host, methods)
53
+
54
+ return true if good_hosts >= 3
55
+ end
56
+
57
+ false
58
+ end
59
+
60
+ def self.online
61
+ online?
62
+ end
63
+
64
+ def self.offline?
65
+ !online?
66
+ end
67
+
68
+ def self.offline
69
+ offline?
70
+ end
71
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: onlinestatus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michal Pokorny
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: net-ping
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ! "\t\tThis simple gem tries to detect your online status\n\t\tby pinging
31
+ a few places.\n"
32
+ email: pok@rny.cz
33
+ executables:
34
+ - onlinestatus
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - lib/onlinestatus.rb
39
+ - bin/onlinestatus
40
+ homepage: http://github.com/MichalPokorny/onlinestatus
41
+ licenses: []
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 1.8.23
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Do you have an internet connection?
64
+ test_files: []