censu 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc032c148fcfd0d25166894346ef57abb771edba
4
- data.tar.gz: 7bc3d93c58883260e0eb274f9104b505ea99156a
3
+ metadata.gz: 1a65cae212177db3ce66c6b68aae16e212427e21
4
+ data.tar.gz: 967f33e9e61180fddb1b8b16b35d6454f29c17e6
5
5
  SHA512:
6
- metadata.gz: a7283ce3bb2407fd4e85874432139a2742d4d052b2d2db8674cbd23ad208cd43f67ff883d3c4339caccba23787aa721c59e2cb007622707db568916fc84879f7
7
- data.tar.gz: 5c8011da8618be9bd7cc7e5f7ababd13f811c00fe896de01b2ba34924431ea42e07a3f80c4827e3e8becb0a930b35a853ce931ac7f164f66b7250eab4b66f3f4
6
+ metadata.gz: 8b762c4f2e09e700e130515cbe32edbb7ace961de5031a291100f3d64977933977accd8507e8ca2f1958b7ad31c41c91df05dd103d8e7e1604e95d973c1344ae
7
+ data.tar.gz: 3b69de965819865490e59189792b74d1ef31480a9e8fba781112f3731bdec2629191cb99f84bb997d95c1ee24fdde13623767120481bd1b4e421d5aacfc71bb7
data/.codeclimate.yml CHANGED
@@ -9,5 +9,4 @@ plugins:
9
9
  config:
10
10
  file: "alternate-rubocop-path.yml"
11
11
  exclude_patterns:
12
- - "spec/"
13
- - "!spec/support/helpers"
12
+ - "spec/**/*"
data/README.md CHANGED
@@ -10,61 +10,109 @@
10
10
 
11
11
  Ruby API client to the [Censys] internet search engine.
12
12
 
13
- ## Features
14
13
 
15
14
  ## Examples
16
15
 
17
16
  Initialize the API:
18
17
 
19
- require 'censys'
20
- api = Censys::API.new(uid,secret)
18
+ ```ruby
19
+ require 'censys'
20
+ api = Censys::API.new(uid, secret)
21
+ ```
21
22
 
22
23
  Initialize the API using `$CENSYS_ID` and `$CENSYS_SECRET` environment
23
24
  variables:
24
25
 
25
- api = Censys::API.new
26
+ ```ruby
27
+ api = Censys::API.new
28
+ ```
26
29
 
27
30
  Search for IPv4 addresses:
28
31
 
29
- response = api.ipv4.search(query: 'dropbox.com')
32
+ ```ruby
33
+ response = api.ipv4.search(query: 'dropbox.com')
34
+ ```
30
35
 
31
36
  Search for Websites:
32
37
 
33
- response = api.websites.search(query: 'dropbox.com')
38
+ ```ruby
39
+ response = api.websites.search(query: 'dropbox.com')
40
+ ```
34
41
 
35
42
  Search for Certificates:
36
43
 
37
- response = api.certificates.search(query: 'dropbox.com')
44
+ ```ruby
45
+ response = api.certificates.search(query: 'dropbox.com')
46
+ ```
38
47
 
39
48
  Enumerate through search results:
40
49
 
41
- response.each_page do |page|
42
- puts ">>> Page ##{page.metadata.page} / #{page.metadata.pages} ..."
43
-
44
- page.each do |result|
50
+ ```ruby
51
+ response.each_page do |page|
52
+ puts ">>> Page ##{page.metadata.page} / #{page.metadata.pages} ..."
53
+ page.each do |result|
45
54
  puts result
46
- end
47
55
  end
56
+ end
57
+ ```
48
58
 
49
- Generate aggregate reports:
59
+ View for IPv4 addresses:
50
60
 
51
- response = api.websites.report(
52
- query: '80.http.get.headers.server: Apache',
53
- field: 'location.country_code',
54
- buckets: 100
55
- )
61
+ ```ruby
62
+ view = api.ipv4["8.8.8.8"]
63
+ ```
56
64
 
57
- response.each do |country,count|
58
- puts "#{country}: #{count}"
59
- end
65
+ View for Websites:
66
+
67
+ ```ruby
68
+ view = api.websites["google.com"]
69
+ ```
70
+
71
+ View for Certificates:
72
+
73
+ ```ruby
74
+ view = api.certificates["821a712a29d8e25915f66a9771519746c5aa73a45321fd4ca7ef644e1cadda59"]
75
+ ```
76
+
77
+ Generate aggregate reports:
78
+
79
+ ```ruby
80
+ response = api.websites.report(
81
+ query: '80.http.get.headers.server: Apache',
82
+ field: 'location.country_code',
83
+ buckets: 100
84
+ )
85
+
86
+ response.each do |country,count|
87
+ puts "#{country}: #{count}"
88
+ end
89
+ ```
90
+
91
+ Combine Search and View API.
92
+
93
+ ```ruby
94
+ api = Censys::API.new
95
+ response = api.websites.search(query: "hoge")
96
+ response.each_page do |page|
97
+ page.each do |result|
98
+ view = api.websites[result.domain]
99
+ p view.domain # => e.g. "nrc.nl"
100
+ p view.autonomous_system.name # => e.g. "NL-INTERMAX"
101
+ p view.location.country # => e.g. "Netherlands"
102
+ p view.protocols # => e.g. ["80/http", "0/lookup", "25/smtp", "443/https_www", "443/https", "80/http_www"]
103
+ end
104
+ end
105
+ ```
60
106
 
61
107
  ## Requirements
62
108
 
63
- * [ruby] >= 2.0
109
+ * [ruby] >= 2.4
64
110
 
65
111
  ## Install
66
112
 
67
- $ gem install censu
113
+ ```bash
114
+ % gem install censu
115
+ ```
68
116
 
69
117
  ## License
70
118
 
@@ -73,4 +121,4 @@ See {file:LICENSE.txt} for details.
73
121
  Note:: This gem is forked from [trailofbits/censys-ruby](https://github.com/trailofbits/censys-ruby).
74
122
 
75
123
  [ruby]: http://www.ruby-lang.org/
76
- [Cens:qys]: https://censys.io/
124
+ [Censys]: https://censys.io/
data/lib/censu.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'censys/api'
2
+ require 'censys/version'
@@ -0,0 +1,16 @@
1
+ require 'censys/http_response'
2
+
3
+ module Censys
4
+ class Document
5
+ module HasHTTPResponse
6
+ #
7
+ # HTTP reponse information.
8
+ #
9
+ # @return [HTTPResponse]
10
+ #
11
+ def http_response
12
+ @http_reponse ||= HTTPResponse.new(@attributes.dig("80", "http"))
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,48 @@
1
+ module Censys
2
+ class HTTPResponse
3
+ #
4
+ # Initializes the HTTP Response infromation
5
+ #
6
+ # @param [Hash{String => Object}] attributes
7
+ #
8
+ def initialize(attributes)
9
+ @attributes = attributes
10
+ end
11
+
12
+ #
13
+ # HTTP body
14
+ #
15
+ # @return [String] body
16
+ #
17
+ def body
18
+ @attributes.dig("get", "body")
19
+ end
20
+
21
+ #
22
+ # HTTP header
23
+ #
24
+ # @return [Hash] header
25
+ #
26
+ def header
27
+ @attributes.dig("get", "headers")
28
+ end
29
+
30
+ #
31
+ # HTTP status code
32
+ #
33
+ # @return [Integer] status code
34
+ #
35
+ def status_code
36
+ @attributes.dig("get", "status_code")
37
+ end
38
+
39
+ #
40
+ # HTTP title
41
+ #
42
+ # @return [String] title
43
+ #
44
+ def title
45
+ @attributes.dig("get", "title")
46
+ end
47
+ end
48
+ end
@@ -1,4 +1,4 @@
1
1
  module Censys
2
2
  # censys version
3
- VERSION = "0.1.1".freeze
3
+ VERSION = "0.1.2".freeze
4
4
  end
@@ -2,12 +2,14 @@ require 'censys/document'
2
2
  require 'censys/document/has_services'
3
3
  require 'censys/document/has_location'
4
4
  require 'censys/document/has_asn'
5
+ require 'censys/document/has_http_response'
5
6
 
6
7
  module Censys
7
8
  class Website < Document
8
9
  include HasServices
9
10
  include HasLocation
10
11
  include HasASN
12
+ include HasHTTPResponse
11
13
 
12
14
  #
13
15
  # @return [String]
data/spec/view_spec.rb CHANGED
@@ -31,6 +31,12 @@ describe Censys::API do
31
31
  expect(view.domain).to eq("google.com")
32
32
  expect(view.to_s).to eq("google.com")
33
33
  expect(view.alexa_rank).to be_a(Integer)
34
+
35
+ expect(view.http_response).to be_a(Censys::HTTPResponse)
36
+ expect(view.http_response.body).to be_a(String)
37
+ expect(view.http_response.header).to be_a(Hash)
38
+ expect(view.http_response.status_code).to eq(200)
39
+ expect(view.http_response.title).to eq("Google")
34
40
  end
35
41
  end
36
42
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: censu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manabu Niseki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-16 00:00:00.000000000 Z
11
+ date: 2017-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -141,15 +141,18 @@ files:
141
141
  - README.md
142
142
  - Rakefile
143
143
  - censys.gemspec
144
+ - lib/censu.rb
144
145
  - lib/censys.rb
145
146
  - lib/censys/api.rb
146
147
  - lib/censys/autonomous_system.rb
147
148
  - lib/censys/certificate.rb
148
149
  - lib/censys/document.rb
149
150
  - lib/censys/document/has_asn.rb
151
+ - lib/censys/document/has_http_response.rb
150
152
  - lib/censys/document/has_location.rb
151
153
  - lib/censys/document/has_services.rb
152
154
  - lib/censys/exceptions.rb
155
+ - lib/censys/http_response.rb
153
156
  - lib/censys/ipv4.rb
154
157
  - lib/censys/location.rb
155
158
  - lib/censys/report.rb