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 +4 -4
- data/Gemfile.lock +1 -1
- data/bin/fofacli +12 -57
- data/lib/fofa/version.rb +4 -1
- data/lib/fofa.rb +8 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e19e36559d8749989cb0c93e56bbcd33ce8c28c5cf1da6923e48206c12b897c3
|
4
|
+
data.tar.gz: a94b322821b82a56ac996701aa199dfd3ebbeb90165fd57226244ac0148be626
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1de683c6f0e5a8c9752c4a14ad70dee53da5824ded7e36f32155f2b57e381789038f51a6d661225dfb230573413b03b815a7fc441acfb5d445a0f6489ddb18cc
|
7
|
+
data.tar.gz: 5e23cc12d117ea88456fe1ea15a1f6c177ef780370ffd8420c859af10007fa544c36b7fb07ef26b3fb914082f108e5795d4be00eef98f362982a29df6f2d1e60
|
data/Gemfile.lock
CHANGED
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,
|
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,
|
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
|
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 :
|
243
|
+
when :stats
|
263
244
|
query = options[:query] || ARGV.join(' ')
|
264
245
|
fofa = Fofa::API.new(options[:email], options[:apikey], {debug:options[:verbose]})
|
265
|
-
|
266
|
-
|
267
|
-
|
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
|
-
|
286
|
-
|
287
|
-
|
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
data/lib/fofa.rb
CHANGED
@@ -132,21 +132,19 @@ module Fofa
|
|
132
132
|
{"error"=>"Error: #{e.to_s}"}
|
133
133
|
end
|
134
134
|
|
135
|
-
#
|
135
|
+
# Fetch fids from query
|
136
136
|
#
|
137
137
|
# Example:
|
138
|
-
# >> Fofa::API.new(email,apikey).
|
138
|
+
# >> Fofa::API.new(email,apikey).stats("domain=baidu.com", fields:"fid")
|
139
139
|
# => ["Coremail"]
|
140
140
|
#
|
141
141
|
# Arguments:
|
142
|
-
#
|
143
|
-
# options: (Hash)
|
144
|
-
def
|
145
|
-
options = {
|
146
|
-
url = "#{@api_server}/api/v1/search/
|
147
|
-
url += "&
|
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.
|
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:
|
11
|
+
date: 2022-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|