fofa 0.4.21 → 0.4.22

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ba6286e4654e1e55b8b07ba1996edfb64b61139eb9957f03a7e73a35ae93e4a
4
- data.tar.gz: 0b0c0daa6a59f9c602b5e72c19cf35f539cef73d0a0609d8090d73dd9ecc1676
3
+ metadata.gz: e19e36559d8749989cb0c93e56bbcd33ce8c28c5cf1da6923e48206c12b897c3
4
+ data.tar.gz: a94b322821b82a56ac996701aa199dfd3ebbeb90165fd57226244ac0148be626
5
5
  SHA512:
6
- metadata.gz: 137d9c7252fd91dff2f6ac7d61f01fa43bca086bb716912c8e694aebaca9817970051708e29726f8c0c16920b7bf11e9b4b66334758ee826b24f5d907b2008fa
7
- data.tar.gz: 0716e3e28ce190378a25aae007308d395ee651fa4ac02dd1ba29d36482f084f69b1a298d362dd4180bc7d6d34b7618db49efc2f598c683287977f45ccc9cad27
6
+ metadata.gz: 1de683c6f0e5a8c9752c4a14ad70dee53da5824ded7e36f32155f2b57e381789038f51a6d661225dfb230573413b03b815a7fc441acfb5d445a0f6489ddb18cc
7
+ data.tar.gz: 5e23cc12d117ea88456fe1ea15a1f6c177ef780370ffd8420c859af10007fa544c36b7fb07ef26b3fb914082f108e5795d4be00eef98f362982a29df6f2d1e60
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fofa (0.4.20)
4
+ fofa (0.4.21)
5
5
  colorize
6
6
  concurrent-ruby
7
7
 
data/bin/fofacli CHANGED
@@ -19,9 +19,6 @@ options = {
19
19
  post: false,
20
20
  query: nil,
21
21
  format: 'csv',
22
- check_app_category: nil,
23
- check_app_application: nil,
24
- check_app_all: false,
25
22
  task_id: nil
26
23
  }
27
24
 
@@ -43,11 +40,11 @@ ARGV.options do |opts|
43
40
  options[:page] = val.to_i
44
41
  end
45
42
 
46
- opts.on('-m', '--mode=MODE', String, 'Mode, default to [search], -m should be specified when [import_service, query_ip_list, check_app, ip_tags] ') do |val|
43
+ opts.on('-m', '--mode=MODE', String, 'Mode, default to [search], -m should be specified when [import_service, query_ip_list, stats, ip_tags] ') do |val|
47
44
  options[:mode] = val.to_sym
48
45
  end
49
46
 
50
- opts.on('-f', '--file=FILE', String, 'Used at [import_service, check_app, ip_tags] mode') do |val|
47
+ opts.on('-f', '--file=FILE', String, 'Used at [import_service, ip_tags] mode') do |val|
51
48
  options[:file] = val
52
49
  end
53
50
 
@@ -77,16 +74,6 @@ ARGV.options do |opts|
77
74
  options[:post] = true
78
75
  end
79
76
 
80
- opts.on('-l', "--application=APPLICATION", String, "Application to check, only used in check_app mode." ) do |val|
81
- options[:check_app_application] = val
82
- options[:mode] = :check_app
83
- end
84
-
85
- opts.on('-g', "--category=CATEGORY", String, "Category to check, only used in check_app mode." ) do |val|
86
- options[:check_app_category] = val
87
- options[:mode] = :check_app
88
- end
89
-
90
77
  opts.separator "Common Options:"
91
78
 
92
79
  opts.on( nil, "--post", "POST query mode." ) do
@@ -107,12 +94,6 @@ ARGV.options do |opts|
107
94
  exit(0)
108
95
  end
109
96
 
110
- opts.on( nil, "--check_app_all", "Check all applications, only used in check_app mode." ) do
111
- options[:check_app_all] = true
112
- end
113
-
114
-
115
-
116
97
  opts.separator ""
117
98
  opts.separator "For example:"
118
99
  opts.separator "\t fofacli -e aaa@bbb.com -a xxx domain=\"baidu.com\""
@@ -120,7 +101,7 @@ ARGV.options do |opts|
120
101
  opts.separator "\t fofacli -e aaa@bbb.com -a xxx --query_file /tmp/fofaquery"
121
102
  opts.separator "\t fofacli -e aaa@bbb.com -a xxx -d ip,domain,title,port,protocol -m query_ip_list -f ip.txt"
122
103
  opts.separator %Q@\t cat vapps.txt | xargs -I{} -n 1 sh -c 'fofacli "app=$1" -d host,ip,port,country,province,city -s 1000 -o json -v > "$1.txt"' -- {}@
123
- opts.separator "\t fofacli -m check_app --app \"Coremail\" mail.tsinghua.edu.cn"
104
+ opts.separator "\t fofacli -m stats --fields domain app=\"drupal\" | jq"
124
105
  opts.separator "\t fofacli -e aaa@bbb.com -a xxx -m ip_tags -f ./ip.txt"
125
106
  opts.separator "\t fofacli -e aaa@bbb.com -a xxx -m ip_tags -t 1"
126
107
 
@@ -259,45 +240,19 @@ case options[:mode]
259
240
  } #File
260
241
  pool.shutdown
261
242
  pool.wait_for_termination
262
- when :check_app
243
+ when :stats
263
244
  query = options[:query] || ARGV.join(' ')
264
245
  fofa = Fofa::API.new(options[:email], options[:apikey], {debug:options[:verbose]})
265
- if options[:file]
266
- File.open(options[:file]){|f|
267
- f.each_line{|line|
268
- query = line.strip
269
- res = fofa.check_app(query, {
270
- category:options[:check_app_category],
271
- application:options[:check_app_application],
272
- all:options[:all],
273
- })
274
-
275
- if res && res.size>0
276
- res.each{|r|
277
- log_record(options, [query, r])
278
- }
279
- else
280
- log_record(options, [query, nil])
281
- end
246
+ res = fofa.stats(query, {
247
+ fields: options[:fields],
248
+ })
282
249
 
283
- }
284
- }
285
- else
286
- res = fofa.check_app(query, {
287
- category:options[:check_app_category],
288
- application:options[:check_app_application],
289
- all:options[:all],
290
- })
291
-
292
- if res && res.size>0
293
- res.each{|r|
294
- log_record(options, r)
295
- }
296
- else
297
- $stderr.puts "[WARNING] No result!"
298
- end
250
+ if res && res.size>0
251
+ $stdout.puts Hash[res].to_json
252
+ else
253
+ $stderr.puts "[WARNING] No result!"
254
+ end
299
255
 
300
- end
301
256
  when :ip_tags
302
257
  fofa = Fofa::API.new(options[:email], options[:apikey], {debug:options[:verbose]})
303
258
  if options[:task_id]
data/lib/fofa/version.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # 0.4.22
2
+ # add state api, remove chech_app api
3
+ #
1
4
  # 0.4.21
2
5
  # split result to stdout
3
6
  #
@@ -40,5 +43,5 @@
40
43
  # 0.3.6
41
44
  # add fields
42
45
  module Fofa
43
- VERSION = "0.4.21"
46
+ VERSION = "0.4.22"
44
47
  end
data/lib/fofa.rb CHANGED
@@ -132,21 +132,19 @@ module Fofa
132
132
  {"error"=>"Error: #{e.to_s}"}
133
133
  end
134
134
 
135
- # Check applications of asset
135
+ # Fetch fids from query
136
136
  #
137
137
  # Example:
138
- # >> Fofa::API.new(email,apikey).checkapp("mail.tsinghua.edu.cn", category:"邮件系统")
138
+ # >> Fofa::API.new(email,apikey).stats("domain=baidu.com", fields:"fid")
139
139
  # => ["Coremail"]
140
140
  #
141
141
  # Arguments:
142
- # host: (String) Category name
143
- # options: (Hash) category: Category name, application: Application name, all: return all applications or break when match first
144
- def check_app(host, options={})
145
- options = {all:false}.merge(options)
146
- url = "#{@api_server}/api/v1/search/checkapp?key=#{@apikey}&email=#{@email}&host=#{host}"
147
- url += "&all=#{options[:all]}" if options[:all]
148
- url += "&application=#{URI.escape(options[:application])}" if options[:application]
149
- url += "&category=#{URI.escape(options[:category])}" if options[:category]
142
+ # query: (String) fofa query string
143
+ # options: (Hash) fields: can be return multiple fields, like fid,host and so on
144
+ def stats(query, options={})
145
+ options = {fields:"fid"}.merge(options)
146
+ url = "#{@api_server}/api/v1/search/stats?key=#{@apikey}&email=#{@email}&qbase64=#{Base64.encode64(query)}"
147
+ url += "&fields=#{options[:fields]}" if options[:fields]
150
148
  puts url if @options[:debug]
151
149
  uri = URI.parse(url)
152
150
  http = http_new(uri)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fofa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.21
4
+ version: 0.4.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - fofa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-18 00:00:00.000000000 Z
11
+ date: 2022-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler