fofa 0.4.21 → 0.4.22

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
  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