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