shodan-ruby 0.1.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/COPYING.txt +339 -0
- data/History.txt +9 -0
- data/Manifest.txt +25 -0
- data/README.txt +129 -0
- data/Rakefile +26 -0
- data/lib/shodan/extensions/uri/http.rb +31 -0
- data/lib/shodan/extensions/uri/query_params.rb +105 -0
- data/lib/shodan/extensions/uri.rb +22 -0
- data/lib/shodan/extensions.rb +21 -0
- data/lib/shodan/has_pages.rb +231 -0
- data/lib/shodan/host.rb +146 -0
- data/lib/shodan/page.rb +308 -0
- data/lib/shodan/query.rb +250 -0
- data/lib/shodan/shodan.rb +216 -0
- data/lib/shodan/version.rb +24 -0
- data/lib/shodan.rb +23 -0
- data/spec/has_pages_examples.rb +17 -0
- data/spec/host_spec.rb +115 -0
- data/spec/page_has_hosts_examples.rb +31 -0
- data/spec/page_spec.rb +91 -0
- data/spec/query_spec.rb +95 -0
- data/spec/shodan_spec.rb +34 -0
- data/spec/spec_helper.rb +7 -0
- data/tasks/spec.rb +10 -0
- data/tasks/yard.rb +13 -0
- data.tar.gz.sig +0 -0
- metadata +144 -0
- metadata.gz.sig +1 -0
data/spec/page_spec.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'shodan/page'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Page do
|
6
|
+
before(:all) do
|
7
|
+
@host_one = Host.new('127.0.0.1','16.11.2009','SSH-2.0-OpenSSH_4.2')
|
8
|
+
@host_two = Host.new('192.168.1.1','06.11.2009','SSH-2.0-Sun_SSH_1.1','lol.cats.net')
|
9
|
+
|
10
|
+
@page = Page.new([@host_one, @host_two])
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should map the Page to an Array" do
|
14
|
+
@page.map { |host| host.ip }.should == [
|
15
|
+
'127.0.0.1',
|
16
|
+
'192.168.1.1'
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should select hosts from the Page into another Page" do
|
21
|
+
@page.select { |host| true }.class.should == Page
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should allow the enumeration of the IP addresses of hosts" do
|
25
|
+
ips = []
|
26
|
+
|
27
|
+
@page.each_ip do |ip|
|
28
|
+
ips << ip
|
29
|
+
end
|
30
|
+
|
31
|
+
ips.should == ['127.0.0.1', '192.168.1.1']
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should select hosts based on their IP address" do
|
35
|
+
@page.hosts_with_ip('127.0.0.1').should == [@host_one]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should provide the IP addresses of hosts" do
|
39
|
+
@page.ips.should == ['127.0.0.1', '192.168.1.1']
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should allow the enumerations of hostnames" do
|
43
|
+
names = []
|
44
|
+
|
45
|
+
@page.each_hostname { |name| names << name }
|
46
|
+
|
47
|
+
names.should == ['lol.cats.net']
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should select hosts based on their hostname" do
|
51
|
+
@page.hosts_with_name('lol.cats.net').should == [@host_two]
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should provide the hostnames" do
|
55
|
+
@page.hostnames.should == ['lol.cats.net']
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should allow the enumeration of the dates of added hosts" do
|
59
|
+
dates = []
|
60
|
+
|
61
|
+
@page.each_date { |date| dates << date }
|
62
|
+
|
63
|
+
dates.should == [@host_one.date, @host_two.date]
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should provide the dates hosts were added on" do
|
67
|
+
@page.dates.should == [@host_one.date, @host_two.date]
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should allow the enumeration of responses" do
|
71
|
+
responses = []
|
72
|
+
|
73
|
+
@page.each_response { |resp| responses << resp }
|
74
|
+
|
75
|
+
responses.should == [
|
76
|
+
'SSH-2.0-OpenSSH_4.2',
|
77
|
+
'SSH-2.0-Sun_SSH_1.1'
|
78
|
+
]
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should select the hosts with certain responses" do
|
82
|
+
@page.responses_with('Sun').should == [@host_two]
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should provide the responses of hosts" do
|
86
|
+
@page.responses.should == [
|
87
|
+
'SSH-2.0-OpenSSH_4.2',
|
88
|
+
'SSH-2.0-Sun_SSH_1.1'
|
89
|
+
]
|
90
|
+
end
|
91
|
+
end
|
data/spec/query_spec.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'shodan/query'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'has_pages_examples'
|
5
|
+
require 'page_has_hosts_examples'
|
6
|
+
|
7
|
+
describe Query do
|
8
|
+
before(:all) do
|
9
|
+
@query = Query.new(:query => 'ssh')
|
10
|
+
@page = @query.first_page
|
11
|
+
end
|
12
|
+
|
13
|
+
it_should_behave_like "has Pages"
|
14
|
+
it_should_behave_like "Page has Hosts"
|
15
|
+
|
16
|
+
describe "query expression" do
|
17
|
+
it "should support basic queries" do
|
18
|
+
q = Query.new(:query => 'ssh')
|
19
|
+
|
20
|
+
q.expression.should == 'ssh'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should support the country search operator" do
|
24
|
+
q = Query.new(
|
25
|
+
:query => 'ssh', :countries => [
|
26
|
+
Countries::Mexico,
|
27
|
+
Countries::Nicaragua
|
28
|
+
]
|
29
|
+
)
|
30
|
+
|
31
|
+
q.expression.should == 'ssh country:MX country:NI'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should support host search operator" do
|
35
|
+
q = Query.new(
|
36
|
+
:query => 'http',
|
37
|
+
:hostnames => ['www.wired.com']
|
38
|
+
)
|
39
|
+
|
40
|
+
q.expression.should == 'http hostname:www.wired.com'
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should support the net search operator" do
|
44
|
+
q = Query.new(
|
45
|
+
:query => 'ssh',
|
46
|
+
:networks => ['112.0.0.0/8']
|
47
|
+
)
|
48
|
+
|
49
|
+
q.expression.should == 'ssh net:112.0.0.0/8'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should support the port search operator" do
|
53
|
+
q = Query.new(
|
54
|
+
:query => 'login',
|
55
|
+
:ports => [21, 23]
|
56
|
+
)
|
57
|
+
|
58
|
+
q.expression.should == 'login port:21 port:23'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "search URL" do
|
63
|
+
before(:all) do
|
64
|
+
@uri = @query.search_url
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should be a valid HTTP URI" do
|
68
|
+
@uri.class.should == URI::HTTP
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should have a 'q' query-param" do
|
72
|
+
@uri.query_params['q'].should == @query.query
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "page specific URLs" do
|
77
|
+
before(:all) do
|
78
|
+
@uri = @query.page_url(2)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should have a 'page' query-param" do
|
82
|
+
@uri.query_params['page'].should == 2
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "queries from search URLs" do
|
87
|
+
before(:all) do
|
88
|
+
@query = Query.from_url("http://shodan.surtri.com/?q=login+port%3A21+port%3A23")
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should have a query" do
|
92
|
+
@query.query.should == 'login port:21 port:23'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/spec/shodan_spec.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'shodan/shodan'
|
2
|
+
require 'shodan/version'
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
describe "Shodan" do
|
7
|
+
it "should have a VERSION constant" do
|
8
|
+
Shodan.const_defined?('VERSION').should == true
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "User-Agent support" do
|
12
|
+
it "should have a default User-Agent string" do
|
13
|
+
Shodan.user_agent.should_not be_nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "Proxy support" do
|
18
|
+
it "should provide a :host key" do
|
19
|
+
Shodan.proxy.has_key?(:host).should == true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should provide a :port key" do
|
23
|
+
Shodan.proxy.has_key?(:port).should == true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should provide a :user key" do
|
27
|
+
Shodan.proxy.has_key?(:user).should == true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should provide a :password key" do
|
31
|
+
Shodan.proxy.has_key?(:password).should == true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/tasks/spec.rb
ADDED
data/tasks/yard.rb
ADDED
data.tar.gz.sig
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shodan-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Postmodern
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDQDCCAiigAwIBAgIBADANBgkqhkiG9w0BAQUFADBGMRgwFgYDVQQDDA9wb3N0
|
14
|
+
bW9kZXJuLm1vZDMxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixk
|
15
|
+
ARkWA2NvbTAeFw0wOTA2MDMwNDU5MDNaFw0xMDA2MDMwNDU5MDNaMEYxGDAWBgNV
|
16
|
+
BAMMD3Bvc3Rtb2Rlcm4ubW9kMzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYK
|
17
|
+
CZImiZPyLGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
18
|
+
1wvANkTDHFgVih5XLjuTwTZjgBq1lBGybXJiH6Id1lY2JOMqM5FB1DDHVvvij94i
|
19
|
+
mJabN0zkzu6VKWC70y0IwOxY7CPokr0eFdK/D0y7mCq1P8QITv76i2YqAl0eYqIt
|
20
|
+
W+IhIkANQ7E6uMZIZcdnfadC6lPAtlKkqtd9crvRbFgr6e3kyflmohbRnTEJHoRd
|
21
|
+
7SHHsybE6DSn7oTDs6XBTNrNIn5VfZA0z01eeos/+zBm1zKJOK2+/7xtLLDuDU9G
|
22
|
+
+Rd+ltUBbvxUrMNZmDG29pnmN2xTRH+Q8HxD2AxlvM5SRpK6OeZaHV7PaCCAVZ4L
|
23
|
+
T9BFl1sfMvRlABeGEkSyuQIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
|
24
|
+
sDAdBgNVHQ4EFgQUKwsd+PqEYmBvyaTyoL+uRuk+PhEwDQYJKoZIhvcNAQEFBQAD
|
25
|
+
ggEBAB4TvHsrlbcXcKg6gX5BIb9tI+zGkpzo0Z7jnxMEcNO7NGGwmzafDBI/xZYv
|
26
|
+
xkRH3/HXbGGYDOi6Q6gWt5GujSx0bOImDtYTJTH8jnzN92HzEK5WdScm1QpZKF1e
|
27
|
+
cezArMbxbSPaosxTCtG6LQTkE28lFQsmFZ5xzouugS4h5+LVJiVMmiP+l3EfkjFa
|
28
|
+
GOURU+rNEMPWo8MCWivGW7jes6BMzWHcW7DQ0scNVmIcCIgdyMmpscuAEOSeghy9
|
29
|
+
/fFs57Ey2OXBL55nDOyvN/ZQ2Vab05UH4t+GCxjAPeirzL/29FBtePT6VD44c38j
|
30
|
+
pDj+ws7QjtH/Qcrr1l9jfN0ehDs=
|
31
|
+
-----END CERTIFICATE-----
|
32
|
+
|
33
|
+
date: 2009-12-03 00:00:00 -08:00
|
34
|
+
default_executable:
|
35
|
+
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: mechanize
|
38
|
+
type: :runtime
|
39
|
+
version_requirement:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.9.3
|
45
|
+
version:
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
type: :development
|
49
|
+
version_requirement:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.2.8
|
55
|
+
version:
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: yard
|
58
|
+
type: :development
|
59
|
+
version_requirement:
|
60
|
+
version_requirements: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 0.4.0
|
65
|
+
version:
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: hoe
|
68
|
+
type: :development
|
69
|
+
version_requirement:
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 2.3.3
|
75
|
+
version:
|
76
|
+
description: A Ruby interface to SHODAN, a computer search engine.
|
77
|
+
email:
|
78
|
+
- postmodern.mod3@gmail.com
|
79
|
+
executables: []
|
80
|
+
|
81
|
+
extensions: []
|
82
|
+
|
83
|
+
extra_rdoc_files:
|
84
|
+
- COPYING.txt
|
85
|
+
- History.txt
|
86
|
+
- Manifest.txt
|
87
|
+
- README.txt
|
88
|
+
files:
|
89
|
+
- COPYING.txt
|
90
|
+
- History.txt
|
91
|
+
- Manifest.txt
|
92
|
+
- README.txt
|
93
|
+
- Rakefile
|
94
|
+
- lib/shodan.rb
|
95
|
+
- lib/shodan/extensions.rb
|
96
|
+
- lib/shodan/extensions/uri.rb
|
97
|
+
- lib/shodan/extensions/uri/query_params.rb
|
98
|
+
- lib/shodan/extensions/uri/http.rb
|
99
|
+
- lib/shodan/host.rb
|
100
|
+
- lib/shodan/page.rb
|
101
|
+
- lib/shodan/has_pages.rb
|
102
|
+
- lib/shodan/query.rb
|
103
|
+
- lib/shodan/shodan.rb
|
104
|
+
- lib/shodan/version.rb
|
105
|
+
- tasks/spec.rb
|
106
|
+
- tasks/yard.rb
|
107
|
+
- spec/spec_helper.rb
|
108
|
+
- spec/host_spec.rb
|
109
|
+
- spec/page_spec.rb
|
110
|
+
- spec/page_has_hosts_examples.rb
|
111
|
+
- spec/has_pages_examples.rb
|
112
|
+
- spec/query_spec.rb
|
113
|
+
- spec/shodan_spec.rb
|
114
|
+
has_rdoc: yard
|
115
|
+
homepage: http://github.com/postmodern/shodan-ruby
|
116
|
+
licenses: []
|
117
|
+
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options:
|
120
|
+
- --main
|
121
|
+
- README.txt
|
122
|
+
require_paths:
|
123
|
+
- lib
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: "0"
|
129
|
+
version:
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: "0"
|
135
|
+
version:
|
136
|
+
requirements: []
|
137
|
+
|
138
|
+
rubyforge_project: shodan-ruby
|
139
|
+
rubygems_version: 1.3.5
|
140
|
+
signing_key:
|
141
|
+
specification_version: 3
|
142
|
+
summary: A Ruby interface to SHODAN, a computer search engine.
|
143
|
+
test_files: []
|
144
|
+
|
metadata.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
U�p^qp�:/+���!�e�&�Ee����YԧH�XI�^�|��lJa+J���?�����L�SA#7h/�ஜÛ}����$;Ls�xN���"�/��-Lv�Ni���ͨ��l,��R�06�����?�:n�Ř�/��%�M�nʃ�^?���fF.)8Gy�`
|