├── .github
└── workflows
│ └── go.yml
├── .gitignore
├── LICENSE
├── README.md
├── engine
├── chaos.go
├── fofa.go
├── hunter.go
├── quake.go
├── shodan.go
└── zoomeye.go
├── go.mod
├── go.sum
├── goreleaser.yaml
├── img
├── 10.png
├── 11.png
├── 12.png
├── 13.png
├── 14.png
├── 6.png
├── 7.png
├── 8.webp
├── 9.png
├── JetBrains.png
└── banner.png
├── main.go
├── mod
├── config.go
├── flag.go
└── structinfo.go
├── ones
└── utils
└── output.go
/.github/workflows/go.yml:
--------------------------------------------------------------------------------
1 | name: Release test
2 |
3 | on:
4 | push:
5 | tags:
6 | - "v*" # triggers only if push new tag version, like `0.8.4` or else
7 |
8 | jobs:
9 | build:
10 | runs-on: ubuntu-latest
11 | steps:
12 | -
13 | name: Checkout
14 | uses: actions/checkout@v2
15 | with:
16 | fetch-depth: 0
17 | -
18 | name: Set up Go
19 | uses: actions/setup-go@v2
20 | with:
21 | go-version: 1.18
22 | -
23 | name: Cache Go modules
24 | uses: actions/cache@v1
25 | with:
26 | path: ~/go/pkg/mod
27 | key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
28 | restore-keys: |
29 | ${{ runner.os }}-go-
30 | -
31 | name: Run GoReleaser
32 | uses: goreleaser/goreleaser-action@v2
33 | with:
34 | version: latest
35 | args: release --rm-dist
36 | env:
37 | GITHUB_TOKEN: ${{ secrets.GO_RELEASER_GITHUB_TOKEN }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | push.sh
2 | .idea
3 | ones.conf
4 | ones-config.json
5 | main
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 可用于多个网络资产测绘引擎 API 的命令行查询工具,写个2个版本,一个 go 版本,一个 bash shell 脚本的版本
7 |
8 | ---
9 |
10 | ## 开始
11 |
12 | ### go 版本使用
13 |
14 | **1. 下载**
15 | - 从 [releases](https://github.com/ffffffff0x/ones/releases) 进行下载
16 |
17 | **2. 创建配置文件**
18 |
19 | 将下方字段中的 key 改为你自己的,如果不填就保留默认的 xxxx
20 | ```bash
21 | tee ones-config.json <<-'EOF'
22 | {
23 | "fofa_key": [
24 | "changme@163.com:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
25 | ],
26 | "zoom_key": [
27 | "xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxx"
28 | ],
29 | "shodan_key": [
30 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
31 | ],
32 | "quake_key": [
33 | "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
34 | ],
35 | "hunter_key": [
36 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
37 | ],
38 | "chaos_key": [
39 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
40 | ]
41 | }
42 | EOF
43 | ```
44 |
45 | ones 支持加载多密钥配置,格式如下
46 | ```bash
47 | {
48 | "fofa_key": [
49 | "changme@163.com:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
50 | "changme2@163.com:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
51 | ],
52 | "zoom_key": [
53 | "xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxx",
54 | "xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxx"
55 | ],
56 | "shodan_key": [
57 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
58 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
59 | ],
60 | "quake_key": [
61 | "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
62 | "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
63 | ],
64 | "hunter_key": [
65 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
66 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
67 | ],
68 | "chaos_key": [
69 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
70 | "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
71 | ]
72 | }
73 | ```
74 |
75 | **3. 支持选项**
76 |
77 | ```bash
78 | ones -help
79 | ```
80 |
81 | ones 支持以下选项
82 | ```bash
83 | Usage:
84 | ones [flags]
85 |
86 | INPUT:
87 | -fofa string fofa 查询
88 | -quake string quake 查询
89 | -zoom string zoomeye 查询 (不支持json导出)
90 | -shodan string shodan 查询 (不支持json导出)
91 | -hunter string huneter 查询
92 | -chaos string chaos 查询
93 |
94 | OUTPUT:
95 | -json string 导出 json 格式 (源格式,无处理)
96 | -txt string 导出 txt 格式 (ip:port 格式,经过处理)
97 |
98 | CONFIGURATIONS:
99 | -num int 查询数量 (默认100)
100 | ```
101 |
102 | **4. 使用**
103 |
104 | 查询案例,fofa 查询 tomcat,只查询20个,默认输出
105 | ```bash
106 | ./ones -fofa 'app="APACHE-Tomcat"' -num 20
107 | ```
108 |
109 | 
110 |
111 | fofa 查询 tomcat,只查询15个,输出 json 格式的数据到 output123.json 中
112 | ```bash
113 | ./ones -fofa 'app="APACHE-Tomcat"' -num 15 -json output123.json
114 | ```
115 |
116 | 
117 |
118 | quake 查询 shiro ,查询10个,输出 txt 格式的数据到 output321.txt 中,输出 json 格式的数据到 output123.json 中
119 | ```bash
120 | ./ones -quake 'app:"Shiro权限管理系统"' -num 10 -txt output321.txt -json output123.json
121 | ```
122 |
123 | 
124 |
125 | 同时查询 fofa 和 quake 的 shiro ,输出 txt 到 all.txt 中 (注意: 查询多个引擎时,不可导出为 json)
126 | ```bash
127 | ./ones -fofa 'app="APACHE-Shiro"' -quake 'app:"Shiro权限管理系统"' -txt all.txt
128 | ```
129 |
130 | 
131 |
132 | ---
133 |
134 | ### bash shell 版本使用
135 |
136 | **1. 下载**
137 | ```bash
138 | wget -O ones https://f8x.io/ones && mv --force ones /usr/local/bin/ones && chmod +x /usr/local/bin/ones
139 | ```
140 |
141 | **2. 创建配置文件**
142 |
143 | 将下方字段中的 key 改为你自己的,如果不填就保留默认的 xxxx
144 | ```bash
145 | tee /root/ones.conf <<-'EOF'
146 | {
147 | "fofa_email": "changme@163.com",
148 | "fofa_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
149 | "zoom_key": "xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxx",
150 | "shodan_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
151 | "quake_key": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
152 | "hunter_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
153 | "chaos_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
154 | }
155 | EOF
156 | ```
157 |
158 | **3. 初始化环境**
159 | ```bash
160 | ones -init
161 | ```
162 |
163 | > 注意 : 初始化不会安装 [chaos](https://github.com/projectdiscovery/chaos-client) ,请自行安装
164 |
165 | **4. 使用**
166 |
167 | ```bash
168 | ones -help
169 |
170 | ones -fofa 'app="tomcat"' 100
171 | ones -quake 'tomcat' 100
172 | ones -zoom 'tomcat' 100
173 | ones -shodan 'tomcat' 100
174 | ones -hunter 'tomcat' 100
175 | ones -chaos 'ffffffff0x.com'
176 | ```
177 |
178 | ---
179 |
180 | ## API-KEY 的获取
181 |
182 | - fofa API-KEY
183 | - https://fofa.info/api
184 | - 
185 |
186 | - zoomeye API-KEY
187 | - https://www.zoomeye.org/profile
188 | - 
189 |
190 | - shodan API-KEY
191 | - https://account.shodan.io/
192 | - 
193 |
194 | - quake API-KEY
195 | - https://quake.360.cn/quake/#/personal
196 | - 
197 |
198 | - hunter API-KEY
199 | - https://hunter.qianxin.com/home/userInfo
200 | - 
201 |
202 | - chaos API-KEY
203 | - https://chaos.projectdiscovery.io/
204 |
205 | ---
206 |
207 | ## License
208 |
209 | [Apache License 2.0](https://github.com/ffffffff0x/name-fuzz/blob/main/LICENSE)
210 |
211 | ---
212 |
213 | ## Special Thanks
214 |
215 | Special thanks to [JetBrains](https://www.jetbrains.com) for their support to this project.
216 |
217 | [](https://www.jetbrains.com)
218 |
219 | ---
220 |
221 | > create by ffffffff0x
222 |
--------------------------------------------------------------------------------
/engine/chaos.go:
--------------------------------------------------------------------------------
1 | package engine
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "github.com/valyala/fasthttp"
7 | "log"
8 | ones "ones/mod"
9 | "os"
10 | "reflect"
11 | )
12 |
13 | var chaosRecursion = 0
14 | // https://github.com/projectdiscovery/chaos-client/blob/master/pkg/chaos/chaos.go
15 |
16 | func TodoChaos() (string, []string) {
17 | chaosRecursion += 1
18 | if chaosRecursion % ones.Recursion == 0 {
19 | return "", nil
20 | }
21 |
22 | ChaosKeyValue := ones.GetToken("chaos")
23 |
24 | url := fmt.Sprintf("https://dns.projectdiscovery.io/dns/%s/subdomains", ones.Chaos)
25 |
26 | req := &fasthttp.Request{}
27 | req.SetRequestURI(url)
28 | req.Header.SetMethod("GET")
29 | req.Header.Add("Authorization", ChaosKeyValue)
30 |
31 | resp := &fasthttp.Response{}
32 |
33 | client := &fasthttp.Client{}
34 | if err := client.Do(req, resp); err != nil {
35 | fmt.Println("请求失败:", err.Error())
36 | os.Exit(3)
37 | }
38 |
39 | var obj map[string]interface{}
40 | _ = json.Unmarshal(resp.Body(), &obj)
41 |
42 | if obj["error"].(string) == "invalid token" {
43 | log.Println("chaos token 疑似失效", ChaosKeyValue)
44 | return TodoChaos()
45 | }
46 |
47 | v := reflect.ValueOf(obj["subdomains"])
48 | count := v.Len()
49 | for i := 0; i < count; i++ {
50 | resp2 = append(resp2, fmt.Sprint(v.Index(i))+"."+ones.Chaos)
51 | }
52 |
53 | //fmt.Println(string(resp.Body()))
54 | return string(resp.Body()), resp2
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/engine/fofa.go:
--------------------------------------------------------------------------------
1 | package engine
2 |
3 | import (
4 | "encoding/base64"
5 | "encoding/json"
6 | "fmt"
7 | "github.com/valyala/fasthttp"
8 | "log"
9 | ones "ones/mod"
10 | "os"
11 | "reflect"
12 | "strconv"
13 | "strings"
14 | )
15 |
16 | // https://fofa.info/api
17 | var resp2 []string
18 | var fofaRecursion = 0
19 |
20 | func TodoFofa() (string, []string) {
21 | fofaRecursion += 1
22 | if fofaRecursion-ones.Recursion == 0 { // 到达最大递归层数,直接退出
23 | return "", nil
24 | }
25 |
26 | byte1 := []byte(ones.Fofa)
27 | base64str := base64.StdEncoding.EncodeToString(byte1)
28 | //fmt.Println(base64str)
29 |
30 | fofaValue := ones.GetToken("fofa")
31 | fofaEmailValue := strings.Split(fofaValue, ":")[0]
32 | fofaKeyValue := strings.Split(fofaValue, ":")[1]
33 |
34 | url := fmt.Sprintf("https://fofa.info/api/v1/search/all?email=%s&key=%s&qbase64=%s&size=%d&fields=host", fofaEmailValue, fofaKeyValue, base64str, ones.Num)
35 | //fmt.Println(url)
36 |
37 | status, resp, err := fasthttp.Get(nil, url)
38 | if err != nil {
39 | fmt.Println("请求失败:", err.Error())
40 | os.Exit(3)
41 | }
42 | if status != fasthttp.StatusOK {
43 | fmt.Println("请求没有成功:", status)
44 | os.Exit(3)
45 | }
46 |
47 | var obj map[string]interface{}
48 | err = json.Unmarshal(resp, &obj)
49 | hasError, _ := strconv.ParseBool(fmt.Sprint(obj["error"]))
50 | if hasError == false {
51 | v := reflect.ValueOf(obj["results"])
52 | count := v.Len()
53 | for i := 0; i < count; i++ {
54 | resp2 = append(resp2, fmt.Sprint(v.Index(i)))
55 | }
56 | return string(resp), resp2
57 | } else { // 有错误递归,但是要考虑到无限递归的情况
58 | log.Println("fofa token 疑似失效", fofaValue)
59 | return TodoFofa()
60 | }
61 | return "", nil
62 | }
63 |
--------------------------------------------------------------------------------
/engine/hunter.go:
--------------------------------------------------------------------------------
1 | package engine
2 |
3 | import (
4 | "encoding/base64"
5 | "encoding/json"
6 | "fmt"
7 | "github.com/valyala/fasthttp"
8 | "log"
9 | ones "ones/mod"
10 | "strconv"
11 | "sync"
12 | "time"
13 | )
14 |
15 | var TmpSlice2 []string
16 | var SumSlice2 []string
17 | var hunterRecursion = 0
18 |
19 | func TodoHunter() []string {
20 |
21 | HunterKeyValue := ones.GetToken("hunter")
22 | //fmt.Println(HunterKeyValue[1 : len(HunterKeyValue)-1])
23 |
24 | num := 0
25 | pagesize := 0
26 | if ones.Num <= 100 {
27 | num = 100
28 | pagesize = ones.Num
29 | } else {
30 | num = ones.Num
31 | pagesize = 100
32 | }
33 |
34 | maxPage := num / 100
35 |
36 | if num%100 > 0 {
37 | maxPage++
38 | }
39 |
40 | for keyword := 1; keyword <= maxPage; keyword++ {
41 | wg := &sync.WaitGroup{}
42 | wg.Add(1)
43 | // API 有速率限制
44 | time.Sleep(2 * time.Second)
45 | go func(keyword int, group *sync.WaitGroup) {
46 | TmpSlice2 := SendReq2(HunterKeyValue, keyword, pagesize)
47 | SumSlice2 = append(TmpSlice2)
48 | group.Done()
49 | }(keyword, wg)
50 | wg.Wait()
51 | }
52 |
53 | return SumSlice2
54 |
55 | }
56 |
57 | // # https://hunter.qianxin.com/home/helpCenter
58 | func SendReq2(key string, page int, pagesize int) []string {
59 |
60 | if hunterRecursion-ones.Recursion == 0 {
61 | return nil
62 | }
63 |
64 | byte1 := []byte(ones.Hunter)
65 | base64str := base64.StdEncoding.EncodeToString(byte1)
66 | //fmt.Println(base64str)
67 |
68 | url := fmt.Sprintf("https://hunter.qianxin.com/openApi/search?api-key=%s&search=%s&page=%d&page_size=%d", key, base64str, page, pagesize)
69 | //fmt.Println(url)
70 |
71 | status, resp, err := fasthttp.Get(nil, url)
72 | if err != nil {
73 | fmt.Println("请求失败:", err.Error())
74 | //os.Exit(3)
75 | }
76 | if status != fasthttp.StatusOK {
77 | fmt.Println("请求没有成功:", status)
78 | //os.Exit(3)
79 | }
80 |
81 | var hunter ones.HunterInfo
82 | err = json.Unmarshal(resp, &hunter)
83 | if err != nil {
84 | fmt.Println(err.Error())
85 | }
86 |
87 | if hunter.Code == 401 {
88 | log.Println("hunter token 疑似失效", key)
89 | hunterRecursion += 1
90 | return SendReq2(ones.GetToken("hunter"), page, pagesize)
91 | }
92 |
93 | for _, v := range hunter.Data.Arr {
94 | //fmt.Println(v.IP + ":" + strconv.Itoa(v.Port))
95 | resp2 = append(resp2, v.IP+":"+strconv.Itoa(v.Port))
96 | }
97 |
98 | //fmt.Println(hunter.Data.Arr)
99 | //fmt.Println(string(resp))
100 | return resp2
101 | }
102 |
--------------------------------------------------------------------------------
/engine/quake.go:
--------------------------------------------------------------------------------
1 | package engine
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "github.com/valyala/fasthttp"
7 | "log"
8 | ones "ones/mod"
9 | "os"
10 | "strconv"
11 | )
12 |
13 | var quakeRecursion = 0
14 |
15 | func TodoQuake() (string, []string) {
16 | quakeRecursion += 1
17 | if quakeRecursion%ones.Recursion == 0 {
18 | return "", nil
19 | }
20 |
21 | QuakeKeyValue := ones.GetToken("quake")
22 | //fmt.Println(QuakeKeyValue)
23 |
24 | url := `https://quake.360.cn/api/v3/search/quake_service`
25 |
26 | req := &fasthttp.Request{}
27 | req.SetRequestURI(url)
28 |
29 | requestBody := fmt.Sprintf(`{"query": %q,
30 | "start": 0,
31 | "size": %d,
32 | "include": ["ip","port"]}`, ones.Quake, ones.Num)
33 |
34 | //fmt.Println(requestBody)
35 | req.SetBody([]byte(requestBody))
36 |
37 | req.Header.SetContentType("application/json")
38 | req.Header.SetMethod("POST")
39 | req.Header.Add("X-QuakeToken", QuakeKeyValue)
40 |
41 | resp := &fasthttp.Response{}
42 |
43 | client := &fasthttp.Client{}
44 | if err := client.Do(req, resp); err != nil {
45 | fmt.Println("请求失败:", err.Error())
46 | os.Exit(3)
47 | }
48 | //fmt.Println(string(resp.Body()))
49 | var serviceInfo ones.ServiceInfo
50 | err := json.Unmarshal(resp.Body(), &serviceInfo)
51 | if err != nil {
52 | log.Println("quake token 疑似失效", QuakeKeyValue)
53 | return TodoQuake()
54 | }
55 | if serviceInfo.Code != 0 {
56 | os.Exit(3)
57 | }
58 |
59 | for _, value := range serviceInfo.Data {
60 | output := value.IP + ":" + strconv.Itoa(value.Port)
61 | resp2 = append(resp2, output)
62 | }
63 |
64 | //fmt.Println(string(resp.Body()))
65 | return string(resp.Body()), resp2
66 |
67 | }
68 |
--------------------------------------------------------------------------------
/engine/shodan.go:
--------------------------------------------------------------------------------
1 | package engine
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "github.com/valyala/fasthttp"
7 | "log"
8 | ones "ones/mod"
9 | "os"
10 | "strconv"
11 | "sync"
12 | )
13 |
14 | var TmpSlice1 []string
15 | var SumSlice1 []string
16 | var shodanRecursion = 0
17 |
18 | func TodoShodan() []string {
19 |
20 | ShodanKeyValue := ones.GetToken("shodan")
21 | //fmt.Println(ShodanKeyValue[1 : len(ShodanKeyValue)-1])
22 |
23 | num := 0
24 | if ones.Num <= 0 {
25 | num = 100
26 | } else {
27 | num = ones.Num
28 | }
29 |
30 | maxPage := num / 100
31 |
32 | if num%100 > 0 {
33 | maxPage++
34 | }
35 |
36 | for keyword := 1; keyword <= maxPage; keyword++ {
37 | wg := &sync.WaitGroup{}
38 | wg.Add(1)
39 | go func(keyword int, group *sync.WaitGroup) {
40 | TmpSlice1 := SendReq1(ShodanKeyValue, keyword)
41 | SumSlice1 = append(TmpSlice1)
42 | group.Done()
43 | }(keyword, wg)
44 | wg.Wait()
45 | }
46 |
47 | return SumSlice1
48 |
49 | }
50 |
51 | func SendReq1(key string, num int) []string {
52 |
53 | if shodanRecursion-ones.Recursion == 0 {
54 | return nil
55 | }
56 |
57 | url := fmt.Sprintf("https://api.shodan.io/shodan/host/search?key=%s&page=%d&query=%s", key, num, ones.Shodan)
58 | //fmt.Println(url)
59 |
60 | status, resp, err := fasthttp.Get(nil, url)
61 | if err != nil {
62 | fmt.Println("请求失败:", err.Error())
63 | os.Exit(3)
64 | }
65 | if status != fasthttp.StatusOK {
66 | fmt.Println("请求没有成功:", status)
67 | log.Println("shodan token 疑似失效", key)
68 | shodanRecursion += 1
69 | return SendReq1(ones.GetToken("shodan"), num)
70 | }
71 |
72 | //fmt.Println(string(resp))
73 |
74 | var shodan ones.ShodanInfo
75 | _ = json.Unmarshal(resp, &shodan)
76 |
77 | for _, v := range shodan.Matches {
78 | resp2 = append(resp2, v.IPStr+":"+strconv.Itoa(v.Port))
79 | }
80 | return resp2
81 | }
82 |
--------------------------------------------------------------------------------
/engine/zoomeye.go:
--------------------------------------------------------------------------------
1 | package engine
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "github.com/valyala/fasthttp"
7 | "log"
8 | ones "ones/mod"
9 | "os"
10 | "strconv"
11 | "sync"
12 | )
13 |
14 | var TmpSlice []string
15 | var SumSlice []string
16 | var zoomeyeRecursion = 0
17 |
18 | func TodoZoomeye() []string {
19 |
20 | ZoomKeyValue := ones.GetToken("zoom")
21 | //fmt.Println(ZoomKeyValue)
22 |
23 | num := 0
24 | if ones.Num <= 0 {
25 | num = 20
26 | } else {
27 | num = ones.Num
28 | }
29 |
30 | maxPage := num / 20
31 |
32 | if num%20 > 0 {
33 | maxPage++
34 | }
35 |
36 | for keyword := 1; keyword <= maxPage; keyword++ {
37 | wg := &sync.WaitGroup{}
38 | wg.Add(1)
39 | go func(keyword int, group *sync.WaitGroup) {
40 | TmpSlice := SendReq(ZoomKeyValue, keyword)
41 | SumSlice = append(TmpSlice)
42 | group.Done()
43 | }(keyword, wg)
44 | wg.Wait()
45 | }
46 |
47 | return SumSlice
48 |
49 | }
50 |
51 | // SendReq https://www.zoomeye.org/doc
52 | func SendReq(key string, num int) []string {
53 |
54 | if zoomeyeRecursion-ones.Recursion == 0 {
55 | return nil
56 | }
57 |
58 | url := fmt.Sprintf("https://api.zoomeye.org/host/search?query=%s&page=%d", ones.Zoomeye, num)
59 | //fmt.Println(url)
60 |
61 | req := &fasthttp.Request{}
62 | req.SetRequestURI(url)
63 | req.Header.SetMethod("GET")
64 | req.Header.Add("API-KEY", key)
65 |
66 | resp := &fasthttp.Response{}
67 |
68 | client := &fasthttp.Client{}
69 | if err := client.Do(req, resp); err != nil {
70 | fmt.Println("请求失败:", err.Error())
71 | os.Exit(3)
72 | }
73 |
74 | //fmt.Println(string(resp.Body()))
75 |
76 | var zoomeye ones.ZoomInfo
77 | _ = json.Unmarshal(resp.Body(), &zoomeye)
78 |
79 | for _, v := range zoomeye.Matches {
80 | resp2 = append(resp2, v.IP+":"+strconv.Itoa(v.Portinfo.Port))
81 | }
82 |
83 | if zoomeye.Matches == nil {
84 | log.Println("zoomeye token 疑似失效", key)
85 | zoomeyeRecursion += 1
86 | return SendReq(ones.GetToken("zoom"), num)
87 | } else {
88 | return resp2
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module ones
2 |
3 | go 1.18
4 |
5 | require (
6 | github.com/gyyyy/ZoomEye-go v0.0.0-20210331085125-df25215ea0eb
7 | github.com/valyala/fasthttp v1.37.0
8 | )
9 |
10 | require (
11 | github.com/andybalholm/brotli v1.0.4 // indirect
12 | github.com/klauspost/compress v1.15.0 // indirect
13 | github.com/valyala/bytebufferpool v1.0.0 // indirect
14 | )
15 |
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
2 | github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
3 | github.com/gyyyy/ZoomEye-go v0.0.0-20210331085125-df25215ea0eb h1:0WKNmBy5wfYl1drRcRXGR2eHhFN/n6nQuqNpBHKyuxM=
4 | github.com/gyyyy/ZoomEye-go v0.0.0-20210331085125-df25215ea0eb/go.mod h1:DQDHOEW5Cts4Rf6P01bG7YIeSR/8L1hR3K3DBeA+J+U=
5 | github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U=
6 | github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
7 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
8 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
9 | github.com/valyala/fasthttp v1.37.0 h1:7WHCyI7EAkQMVmrfBhWTCOaeROb1aCBiTopx63LkMbE=
10 | github.com/valyala/fasthttp v1.37.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I=
11 | github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
12 | golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
13 | golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
14 | golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
15 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
16 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
17 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
18 | golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
19 | golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
20 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
21 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
22 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
23 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
24 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
25 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
26 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
27 |
--------------------------------------------------------------------------------
/goreleaser.yaml:
--------------------------------------------------------------------------------
1 | project_name: ones
2 | builds:
3 | - binary: ones
4 | goos:
5 | - linux
6 | - windows
7 | - darwin
8 | goarch:
9 | - amd64
10 | - arm64
--------------------------------------------------------------------------------
/img/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/10.png
--------------------------------------------------------------------------------
/img/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/11.png
--------------------------------------------------------------------------------
/img/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/12.png
--------------------------------------------------------------------------------
/img/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/13.png
--------------------------------------------------------------------------------
/img/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/14.png
--------------------------------------------------------------------------------
/img/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/6.png
--------------------------------------------------------------------------------
/img/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/7.png
--------------------------------------------------------------------------------
/img/8.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/8.webp
--------------------------------------------------------------------------------
/img/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/9.png
--------------------------------------------------------------------------------
/img/JetBrains.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/JetBrains.png
--------------------------------------------------------------------------------
/img/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ffffffff0x/ones/4f2a6e8d9e7df57bc4a838c2d44b62a3346a5918/img/banner.png
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "flag"
5 | "fmt"
6 | ones "ones/mod"
7 | "ones/utils"
8 | "os"
9 | )
10 |
11 | var InNum = 0
12 |
13 | func main() {
14 |
15 | flag.Parse()
16 |
17 | if ones.V {
18 | fmt.Println(ones.Version)
19 | os.Exit(0) // 输出版本后停止
20 | }
21 |
22 | // 解析配置
23 | path := ones.ConfigPath()
24 | ones.Init(path)
25 |
26 | // 处理输入
27 | InputNum()
28 |
29 | }
30 |
31 | func InputNum() {
32 |
33 | if ones.Fofa != "" {
34 | InNum += 1
35 | }
36 | if ones.Quake != "" {
37 | InNum += 1
38 | }
39 | if ones.Hunter != "" {
40 | InNum += 1
41 | }
42 | if ones.Shodan != "" {
43 | InNum += 1
44 | }
45 | if ones.Zoomeye != "" {
46 | InNum += 1
47 | }
48 | if ones.Chaos != "" {
49 | InNum += 1
50 | }
51 |
52 | if InNum > 2 {
53 | if ones.Json != "" {
54 | fmt.Println("查询多个引擎时,不可导出为 json")
55 | os.Exit(3)
56 | } else {
57 | utils.OutputProcess()
58 | }
59 | } else if InNum == 0 { // 无参数输出Help
60 | flag.Usage()
61 | } else {
62 | utils.OutputProcess()
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/mod/config.go:
--------------------------------------------------------------------------------
1 | package mod
2 |
3 | import (
4 | "encoding/json"
5 | "io/ioutil"
6 | "log"
7 | "os"
8 | "sync"
9 | )
10 |
11 | var configPath string = "ones-config.json"
12 |
13 | type MainConfig struct {
14 | FofaKey []string `json:"fofa_key"` // fofa_email:fofa_key
15 | ZoomKey []string `json:"zoom_key"`
16 | ShodanKey []string `json:"shodan_key"`
17 | QuakeKey []string `json:"quake_key"`
18 | HunterKey []string `json:"hunter_key"`
19 | ChaosKey []string `json:"chaos_key"`
20 | }
21 |
22 | var Confs MainConfig
23 | // 统计当前使用的第x个api token
24 | var fofaNumber = 0
25 | var zoomNumber = 0
26 | var shodanNumber = 0
27 | var quakeNumber = 0
28 | var hunterNumber = 0
29 | var chaosNumber = 0
30 |
31 | var instanceOnce sync.Once
32 |
33 | // LoadConfig 从配置文件中载入json字符串
34 | func LoadConfig(path string) MainConfig {
35 | buf, err := ioutil.ReadFile(path)
36 | if err != nil {
37 | log.Panicln("load config conf failed: ", err)
38 | }
39 | mainConfig := &MainConfig{}
40 | err = json.Unmarshal(buf, mainConfig)
41 | if err != nil {
42 | log.Panicln("decode config file failed:", string(buf), err)
43 | }
44 |
45 | return *mainConfig
46 | }
47 |
48 | // Init 初始化
49 | func Init(path string) {
50 | _, err := os.Stat(path)
51 | if err != nil {
52 | // 没有配置文件,生成配置文件
53 | configBytes, _ := json.MarshalIndent(&Confs, "", " ")
54 | ioutil.WriteFile(path, configBytes, 0666)
55 | log.Printf("generate config file at %s", path)
56 | } else {
57 | instanceOnce.Do(func() {
58 | Confs = LoadConfig(path)
59 | configPath = path
60 | })
61 | }
62 | }
63 |
64 | // ConfigPath 获取配置文件路径
65 | func ConfigPath() string {
66 | return configPath
67 | }
68 |
69 | // GetToken 获取当前应该使用的token,循环遍历 fofa zoom shodan quake hunter chaos
70 | func GetToken(types string) string {
71 | var token string
72 | switch types {
73 | case "fofa":
74 | {
75 | if Confs.FofaKey == nil {
76 | log.Panicln("fofaKey不能为空,格式 fofa_email:fofa_key")
77 | }
78 | number := fofaNumber % len(Confs.FofaKey)
79 | token = Confs.FofaKey[number]
80 | fofaNumber += 1
81 | }
82 | case "zoom":
83 | {
84 | if Confs.ZoomKey == nil {
85 | log.Panicln("ZoomKey不能为空,格式为 [1, 2, 3]")
86 | }
87 | number := zoomNumber % len(Confs.ZoomKey)
88 | token = Confs.ZoomKey[number]
89 | zoomNumber += 1
90 | }
91 | case "shodan":
92 | {
93 | if Confs.ShodanKey == nil {
94 | log.Panicln("ShodanKey不能为空,格式为 [1, 2, 3]")
95 | }
96 | number := shodanNumber % len(Confs.ShodanKey)
97 | token = Confs.ShodanKey[number]
98 | shodanNumber += 1
99 | }
100 | case "quake":
101 | {
102 | if Confs.QuakeKey == nil {
103 | log.Panicln("QuakeKey不能为空,格式为 [1, 2, 3]")
104 | }
105 | number := quakeNumber % len(Confs.QuakeKey)
106 | token = Confs.QuakeKey[number]
107 | quakeNumber += 1
108 | }
109 | case "hunter":
110 | {
111 | if Confs.HunterKey == nil {
112 | log.Panicln("QuakeKey不能为空,格式为 [1, 2, 3]")
113 | }
114 | number := hunterNumber % len(Confs.HunterKey)
115 | token = Confs.HunterKey[number]
116 | hunterNumber += 1
117 | }
118 | case "chaos":
119 | {
120 | if Confs.ChaosKey == nil {
121 | log.Panicln("ChaosKey不能为空,格式为 [1, 2, 3]")
122 | }
123 | number := chaosNumber % len(Confs.ChaosKey)
124 | token = Confs.ChaosKey[number]
125 | chaosNumber += 1
126 | }
127 | default:
128 | {
129 | }
130 | }
131 | return token
132 | }
--------------------------------------------------------------------------------
/mod/flag.go:
--------------------------------------------------------------------------------
1 | package mod
2 |
3 | import "flag"
4 |
5 | var (
6 | V bool
7 | Fofa string
8 | Quake string
9 | Shodan string
10 | Chaos string
11 | Zoomeye string
12 | Hunter string
13 | Num int
14 | Version = "v1.0.4"
15 | Json string
16 | Txt string
17 | Recursion int
18 | )
19 |
20 | func init() {
21 |
22 | flag.BoolVar(&V, "version", false, "显示版本号")
23 | flag.StringVar(&Fofa, "fofa", "", "fofa 查询")
24 | flag.StringVar(&Quake, "quake", "", "quake 查询")
25 | flag.StringVar(&Shodan, "shodan", "", "shodan 查询")
26 | flag.StringVar(&Chaos, "chaos", "", "chaos 查询")
27 | flag.StringVar(&Zoomeye, "zoomeye", "", "zoomeye 查询")
28 | flag.StringVar(&Hunter, "hunter", "", "hunter 查询")
29 | flag.IntVar(&Num, "num", 100, "数量")
30 | flag.StringVar(&Json, "json", "", "导出json格式")
31 | flag.StringVar(&Txt, "txt", "", "导出txt格式")
32 | flag.IntVar(&Recursion, "recursion", 5, "每个接口最多递归几层(遇到错误的API会进行递归)")
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/mod/structinfo.go:
--------------------------------------------------------------------------------
1 | package mod
2 |
3 | import "time"
4 |
5 | // ServiceInfo 参考 https://github.com/YetClass/QuakeAPI/blob/master/core/quake.go 中的结构
6 | type ServiceInfo struct {
7 | Code int `json:"code"`
8 | Message string `json:"message"`
9 | Data []struct {
10 | Time time.Time `json:"time"`
11 | Transport string `json:"transport"`
12 | Service struct {
13 | HTTP struct {
14 | HTMLHash string `json:"html_hash"`
15 | Favicon struct {
16 | Hash string `json:"hash"`
17 | Location string `json:"location"`
18 | Data string `json:"data"`
19 | } `json:"favicon"`
20 | Robots string `json:"robots"`
21 | SitemapHash string `json:"sitemap_hash"`
22 | Server string `json:"server"`
23 | Body string `json:"body"`
24 | XPoweredBy string `json:"x_powered_by"`
25 | MetaKeywords string `json:"meta_keywords"`
26 | RobotsHash string `json:"robots_hash"`
27 | Sitemap string `json:"sitemap"`
28 | Path string `json:"path"`
29 | Title string `json:"title"`
30 | Host string `json:"host"`
31 | SecurityText string `json:"security_text"`
32 | StatusCode int `json:"status_code"`
33 | ResponseHeaders string `json:"response_headers"`
34 | } `json:"http"`
35 | Version string `json:"version"`
36 | Name string `json:"name"`
37 | Product string `json:"product"`
38 | Banner string `json:"banner"`
39 | Response string `json:"response"`
40 | } `json:"service"`
41 | Images []interface{} `json:"images"`
42 | OsName string `json:"os_name"`
43 | Components []interface{} `json:"components"`
44 | Location struct {
45 | DistrictCn string `json:"district_cn"`
46 | ProvinceCn string `json:"province_cn"`
47 | Gps []float64 `json:"gps"`
48 | ProvinceEn string `json:"province_en"`
49 | CityEn string `json:"city_en"`
50 | CountryCode string `json:"country_code"`
51 | CountryEn string `json:"country_en"`
52 | Radius float64 `json:"radius"`
53 | DistrictEn string `json:"district_en"`
54 | Isp string `json:"isp"`
55 | StreetEn string `json:"street_en"`
56 | Owner string `json:"owner"`
57 | CityCn string `json:"city_cn"`
58 | CountryCn string `json:"country_cn"`
59 | StreetCn string `json:"street_cn"`
60 | } `json:"location"`
61 | Asn int `json:"asn"`
62 | Hostname string `json:"hostname"`
63 | Org string `json:"org"`
64 | OsVersion string `json:"os_version"`
65 | IsIpv6 bool `json:"is_ipv6"`
66 | IP string `json:"ip"`
67 | Port int `json:"port"`
68 | } `json:"data"`
69 | Meta struct {
70 | Total int `json:"total"`
71 | PaginationID string `json:"pagination_id"`
72 | } `json:"meta"`
73 | }
74 |
75 | type HunterInfo struct {
76 | Code int `json:"code"`
77 | Data struct {
78 | AccountType string `json:"account_type"`
79 | Total int `json:"total"`
80 | Time int `json:"time"`
81 | Arr []struct {
82 | IsRisk string `json:"is_risk"`
83 | URL string `json:"url"`
84 | IP string `json:"ip"`
85 | Port int `json:"port"`
86 | WebTitle string `json:"web_title"`
87 | Domain string `json:"domain"`
88 | IsRiskProtocol string `json:"is_risk_protocol"`
89 | Protocol string `json:"protocol"`
90 | BaseProtocol string `json:"base_protocol"`
91 | StatusCode int `json:"status_code"`
92 | Component []struct {
93 | Name string `json:"name"`
94 | Version string `json:"version"`
95 | } `json:"component"`
96 | Os string `json:"os"`
97 | Company string `json:"company"`
98 | Number string `json:"number"`
99 | Country string `json:"country"`
100 | Province string `json:"province"`
101 | City string `json:"city"`
102 | UpdatedAt string `json:"updated_at"`
103 | IsWeb string `json:"is_web"`
104 | AsOrg string `json:"as_org"`
105 | Isp string `json:"isp"`
106 | Banner string `json:"banner"`
107 | } `json:"arr"`
108 | ConsumeQuota string `json:"consume_quota"`
109 | RestQuota string `json:"rest_quota"`
110 | SyntaxPrompt string `json:"syntax_prompt"`
111 | } `json:"data"`
112 | Message string `json:"message"`
113 | }
114 |
115 | type ZoomInfo struct {
116 | Code int `json:"code"`
117 | Total int `json:"total"`
118 | Available int `json:"available"`
119 | Matches []struct {
120 | Rdns string `json:"rdns"`
121 | Jarm string `json:"jarm"`
122 | Ico struct {
123 | Mmh3 string `json:"mmh3"`
124 | Md5 string `json:"md5"`
125 | } `json:"ico"`
126 | Txtfile struct {
127 | Robotsmd5 string `json:"robotsmd5"`
128 | Securitymd5 string `json:"securitymd5"`
129 | } `json:"txtfile"`
130 | IP string `json:"ip"`
131 | Portinfo struct {
132 | Hostname string `json:"hostname"`
133 | Os string `json:"os"`
134 | Port int `json:"port"`
135 | Service string `json:"service"`
136 | Title interface{} `json:"title"`
137 | Version string `json:"version"`
138 | Device string `json:"device"`
139 | Extrainfo string `json:"extrainfo"`
140 | Rdns string `json:"rdns"`
141 | App string `json:"app"`
142 | Banner string `json:"banner"`
143 | } `json:"portinfo"`
144 | Timestamp string `json:"timestamp"`
145 | Geoinfo struct {
146 | Continent struct {
147 | Code string `json:"code"`
148 | Names struct {
149 | En string `json:"en"`
150 | ZhCN string `json:"zh-CN"`
151 | } `json:"names"`
152 | GeonameID interface{} `json:"geoname_id"`
153 | } `json:"continent"`
154 | Country struct {
155 | Code string `json:"code"`
156 | Names struct {
157 | En string `json:"en"`
158 | ZhCN string `json:"zh-CN"`
159 | } `json:"names"`
160 | GeonameID interface{} `json:"geoname_id"`
161 | } `json:"country"`
162 | BaseStation string `json:"base_station"`
163 | City struct {
164 | Names struct {
165 | En string `json:"en"`
166 | ZhCN string `json:"zh-CN"`
167 | } `json:"names"`
168 | GeonameID interface{} `json:"geoname_id"`
169 | } `json:"city"`
170 | Isp string `json:"isp"`
171 | Organization string `json:"organization"`
172 | Idc string `json:"idc"`
173 | Location struct {
174 | Lon string `json:"lon"`
175 | Lat string `json:"lat"`
176 | } `json:"location"`
177 | Aso interface{} `json:"aso"`
178 | Asn string `json:"asn"`
179 | Subdivisions struct {
180 | Names struct {
181 | En string `json:"en"`
182 | ZhCN string `json:"zh-CN"`
183 | } `json:"names"`
184 | GeonameID interface{} `json:"geoname_id"`
185 | } `json:"subdivisions"`
186 | PoweredBy string `json:"PoweredBy"`
187 | Scene struct {
188 | En string `json:"en"`
189 | Cn string `json:"cn"`
190 | } `json:"scene"`
191 | OrganizationCN interface{} `json:"organization_CN"`
192 | } `json:"geoinfo"`
193 | Protocol struct {
194 | Application string `json:"application"`
195 | Probe string `json:"probe"`
196 | Transport string `json:"transport"`
197 | } `json:"protocol"`
198 | Honeypot int `json:"honeypot"`
199 | Whois struct {
200 | Two0161130 struct {
201 | AdminC string `json:"admin_c"`
202 | Country string `json:"country"`
203 | Descr string `json:"descr"`
204 | Inetnum string `json:"inetnum"`
205 | IPEnd string `json:"ip_end"`
206 | IPStart string `json:"ip_start"`
207 | Irt []interface{} `json:"irt"`
208 | LastModified string `json:"last_modified"`
209 | MntBy string `json:"mnt_by"`
210 | MntIrt string `json:"mnt_irt"`
211 | MntLower string `json:"mnt_lower"`
212 | MntRoutes string `json:"mnt_routes"`
213 | Netname string `json:"netname"`
214 | Notify string `json:"notify"`
215 | Organization struct {
216 | Address string `json:"address"`
217 | AdminC string `json:"admin_c"`
218 | Country string `json:"country"`
219 | Descr string `json:"descr"`
220 | Email string `json:"email"`
221 | FaxNo string `json:"fax_no"`
222 | LastModified string `json:"last_modified"`
223 | MntBy string `json:"mnt_by"`
224 | MntRef string `json:"mnt_ref"`
225 | Notify string `json:"notify"`
226 | Org string `json:"org"`
227 | OrgName string `json:"org_name"`
228 | Organization string `json:"organization"`
229 | Phone string `json:"phone"`
230 | Source string `json:"source"`
231 | TechC string `json:"tech_c"`
232 | } `json:"organization"`
233 | Person []interface{} `json:"person"`
234 | Role []interface{} `json:"role"`
235 | Source string `json:"source"`
236 | Status string `json:"status"`
237 | TechC string `json:"tech_c"`
238 | } `json:"2016-11-30"`
239 | } `json:"whois,omitempty"`
240 | Whois0 struct {
241 | Two0170518 struct {
242 | AdminC string `json:"admin_c"`
243 | Country string `json:"country"`
244 | Descr string `json:"descr"`
245 | Inetnum string `json:"inetnum"`
246 | IPEnd string `json:"ip_end"`
247 | IPStart string `json:"ip_start"`
248 | Irt []interface{} `json:"irt"`
249 | LastModified string `json:"last_modified"`
250 | MntBy string `json:"mnt_by"`
251 | MntIrt string `json:"mnt_irt"`
252 | MntLower string `json:"mnt_lower"`
253 | MntRoutes string `json:"mnt_routes"`
254 | Netname string `json:"netname"`
255 | Notify string `json:"notify"`
256 | Organization struct {
257 | Address string `json:"address"`
258 | AdminC string `json:"admin_c"`
259 | Country string `json:"country"`
260 | Descr string `json:"descr"`
261 | Email string `json:"email"`
262 | FaxNo string `json:"fax_no"`
263 | LastModified string `json:"last_modified"`
264 | MntBy string `json:"mnt_by"`
265 | MntRef string `json:"mnt_ref"`
266 | Notify string `json:"notify"`
267 | Org string `json:"org"`
268 | OrgName string `json:"org_name"`
269 | Organization string `json:"organization"`
270 | Phone string `json:"phone"`
271 | Source string `json:"source"`
272 | TechC string `json:"tech_c"`
273 | } `json:"organization"`
274 | Person []interface{} `json:"person"`
275 | Role []interface{} `json:"role"`
276 | Source string `json:"source"`
277 | Status string `json:"status"`
278 | TechC string `json:"tech_c"`
279 | } `json:"2017-05-18"`
280 | } `json:"whois,omitempty"`
281 | Whois1 struct {
282 | Two0170518 struct {
283 | AdminC string `json:"admin_c"`
284 | Country string `json:"country"`
285 | Descr string `json:"descr"`
286 | Inetnum string `json:"inetnum"`
287 | IPEnd string `json:"ip_end"`
288 | IPStart string `json:"ip_start"`
289 | Irt []interface{} `json:"irt"`
290 | LastModified string `json:"last_modified"`
291 | MntBy string `json:"mnt_by"`
292 | MntIrt string `json:"mnt_irt"`
293 | MntLower string `json:"mnt_lower"`
294 | MntRoutes string `json:"mnt_routes"`
295 | Netname string `json:"netname"`
296 | Notify string `json:"notify"`
297 | Organization struct {
298 | Address string `json:"address"`
299 | AdminC string `json:"admin_c"`
300 | Country string `json:"country"`
301 | Descr string `json:"descr"`
302 | Email string `json:"email"`
303 | FaxNo string `json:"fax_no"`
304 | LastModified string `json:"last_modified"`
305 | MntBy string `json:"mnt_by"`
306 | MntRef string `json:"mnt_ref"`
307 | Notify string `json:"notify"`
308 | Org string `json:"org"`
309 | OrgName string `json:"org_name"`
310 | Organization string `json:"organization"`
311 | Phone string `json:"phone"`
312 | Source string `json:"source"`
313 | TechC string `json:"tech_c"`
314 | } `json:"organization"`
315 | Person []interface{} `json:"person"`
316 | Role []interface{} `json:"role"`
317 | Source string `json:"source"`
318 | Status string `json:"status"`
319 | TechC string `json:"tech_c"`
320 | } `json:"2017-05-18"`
321 | } `json:"whois,omitempty"`
322 | Whois2 struct {
323 | Two0170518 struct {
324 | AdminC string `json:"admin_c"`
325 | Country string `json:"country"`
326 | Descr string `json:"descr"`
327 | Inetnum string `json:"inetnum"`
328 | IPEnd string `json:"ip_end"`
329 | IPStart string `json:"ip_start"`
330 | Irt []interface{} `json:"irt"`
331 | LastModified string `json:"last_modified"`
332 | MntBy string `json:"mnt_by"`
333 | MntIrt string `json:"mnt_irt"`
334 | MntLower string `json:"mnt_lower"`
335 | MntRoutes string `json:"mnt_routes"`
336 | Netname string `json:"netname"`
337 | Notify string `json:"notify"`
338 | Organization struct {
339 | Address string `json:"address"`
340 | AdminC string `json:"admin_c"`
341 | Country string `json:"country"`
342 | Descr string `json:"descr"`
343 | Email string `json:"email"`
344 | FaxNo string `json:"fax_no"`
345 | LastModified string `json:"last_modified"`
346 | MntBy string `json:"mnt_by"`
347 | MntRef string `json:"mnt_ref"`
348 | Notify string `json:"notify"`
349 | Org string `json:"org"`
350 | OrgName string `json:"org_name"`
351 | Organization string `json:"organization"`
352 | Phone string `json:"phone"`
353 | Source string `json:"source"`
354 | TechC string `json:"tech_c"`
355 | } `json:"organization"`
356 | Person []interface{} `json:"person"`
357 | Role []interface{} `json:"role"`
358 | Source string `json:"source"`
359 | Status string `json:"status"`
360 | TechC string `json:"tech_c"`
361 | } `json:"2017-05-18"`
362 | } `json:"whois,omitempty"`
363 | Whois3 struct {
364 | Two0170518 struct {
365 | AdminC string `json:"admin_c"`
366 | Country string `json:"country"`
367 | Descr string `json:"descr"`
368 | Inetnum string `json:"inetnum"`
369 | IPEnd string `json:"ip_end"`
370 | IPStart string `json:"ip_start"`
371 | Irt []interface{} `json:"irt"`
372 | LastModified string `json:"last_modified"`
373 | MntBy string `json:"mnt_by"`
374 | MntIrt string `json:"mnt_irt"`
375 | MntLower string `json:"mnt_lower"`
376 | MntRoutes string `json:"mnt_routes"`
377 | Netname string `json:"netname"`
378 | Notify string `json:"notify"`
379 | Organization struct {
380 | Address string `json:"address"`
381 | AdminC string `json:"admin_c"`
382 | Country string `json:"country"`
383 | Descr string `json:"descr"`
384 | Email string `json:"email"`
385 | FaxNo string `json:"fax_no"`
386 | LastModified string `json:"last_modified"`
387 | MntBy string `json:"mnt_by"`
388 | MntRef string `json:"mnt_ref"`
389 | Notify string `json:"notify"`
390 | Org string `json:"org"`
391 | OrgName string `json:"org_name"`
392 | Organization string `json:"organization"`
393 | Phone string `json:"phone"`
394 | Source string `json:"source"`
395 | TechC string `json:"tech_c"`
396 | } `json:"organization"`
397 | Person []interface{} `json:"person"`
398 | Role []interface{} `json:"role"`
399 | Source string `json:"source"`
400 | Status string `json:"status"`
401 | TechC string `json:"tech_c"`
402 | } `json:"2017-05-18"`
403 | } `json:"whois,omitempty"`
404 | Whois4 struct {
405 | Two0170518 struct {
406 | AdminC string `json:"admin_c"`
407 | Country string `json:"country"`
408 | Descr string `json:"descr"`
409 | Inetnum string `json:"inetnum"`
410 | IPEnd string `json:"ip_end"`
411 | IPStart string `json:"ip_start"`
412 | Irt []interface{} `json:"irt"`
413 | LastModified string `json:"last_modified"`
414 | MntBy string `json:"mnt_by"`
415 | MntIrt string `json:"mnt_irt"`
416 | MntLower string `json:"mnt_lower"`
417 | MntRoutes string `json:"mnt_routes"`
418 | Netname string `json:"netname"`
419 | Notify string `json:"notify"`
420 | Organization struct {
421 | Address string `json:"address"`
422 | AdminC string `json:"admin_c"`
423 | Country string `json:"country"`
424 | Descr string `json:"descr"`
425 | Email string `json:"email"`
426 | FaxNo string `json:"fax_no"`
427 | LastModified string `json:"last_modified"`
428 | MntBy string `json:"mnt_by"`
429 | MntRef string `json:"mnt_ref"`
430 | Notify string `json:"notify"`
431 | Org string `json:"org"`
432 | OrgName string `json:"org_name"`
433 | Organization string `json:"organization"`
434 | Phone string `json:"phone"`
435 | Source string `json:"source"`
436 | TechC string `json:"tech_c"`
437 | } `json:"organization"`
438 | Person []interface{} `json:"person"`
439 | Role []interface{} `json:"role"`
440 | Source string `json:"source"`
441 | Status string `json:"status"`
442 | TechC string `json:"tech_c"`
443 | } `json:"2017-05-18"`
444 | } `json:"whois,omitempty"`
445 | Whois5 struct {
446 | Two0170518 struct {
447 | AdminC string `json:"admin_c"`
448 | Country string `json:"country"`
449 | Descr string `json:"descr"`
450 | Inetnum string `json:"inetnum"`
451 | IPEnd string `json:"ip_end"`
452 | IPStart string `json:"ip_start"`
453 | Irt []interface{} `json:"irt"`
454 | LastModified string `json:"last_modified"`
455 | MntBy string `json:"mnt_by"`
456 | MntIrt string `json:"mnt_irt"`
457 | MntLower string `json:"mnt_lower"`
458 | MntRoutes string `json:"mnt_routes"`
459 | Netname string `json:"netname"`
460 | Notify string `json:"notify"`
461 | Organization struct {
462 | Address string `json:"address"`
463 | AdminC string `json:"admin_c"`
464 | Country string `json:"country"`
465 | Descr string `json:"descr"`
466 | Email string `json:"email"`
467 | FaxNo string `json:"fax_no"`
468 | LastModified string `json:"last_modified"`
469 | MntBy string `json:"mnt_by"`
470 | MntRef string `json:"mnt_ref"`
471 | Notify string `json:"notify"`
472 | Org string `json:"org"`
473 | OrgName string `json:"org_name"`
474 | Organization string `json:"organization"`
475 | Phone string `json:"phone"`
476 | Source string `json:"source"`
477 | TechC string `json:"tech_c"`
478 | } `json:"organization"`
479 | Person []interface{} `json:"person"`
480 | Role []interface{} `json:"role"`
481 | Source string `json:"source"`
482 | Status string `json:"status"`
483 | TechC string `json:"tech_c"`
484 | } `json:"2017-05-18"`
485 | } `json:"whois,omitempty"`
486 | Whois6 struct {
487 | Two0170518 struct {
488 | AdminC string `json:"admin_c"`
489 | Country string `json:"country"`
490 | Descr string `json:"descr"`
491 | Inetnum string `json:"inetnum"`
492 | IPEnd string `json:"ip_end"`
493 | IPStart string `json:"ip_start"`
494 | Irt []interface{} `json:"irt"`
495 | LastModified string `json:"last_modified"`
496 | MntBy string `json:"mnt_by"`
497 | MntIrt string `json:"mnt_irt"`
498 | MntLower string `json:"mnt_lower"`
499 | MntRoutes string `json:"mnt_routes"`
500 | Netname string `json:"netname"`
501 | Notify string `json:"notify"`
502 | Organization struct {
503 | Address string `json:"address"`
504 | AdminC string `json:"admin_c"`
505 | Country string `json:"country"`
506 | Descr string `json:"descr"`
507 | Email string `json:"email"`
508 | FaxNo string `json:"fax_no"`
509 | LastModified string `json:"last_modified"`
510 | MntBy string `json:"mnt_by"`
511 | MntRef string `json:"mnt_ref"`
512 | Notify string `json:"notify"`
513 | Org string `json:"org"`
514 | OrgName string `json:"org_name"`
515 | Organization string `json:"organization"`
516 | Phone string `json:"phone"`
517 | Source string `json:"source"`
518 | TechC string `json:"tech_c"`
519 | } `json:"organization"`
520 | Person []interface{} `json:"person"`
521 | Role []interface{} `json:"role"`
522 | Source string `json:"source"`
523 | Status string `json:"status"`
524 | TechC string `json:"tech_c"`
525 | } `json:"2017-05-18"`
526 | } `json:"whois,omitempty"`
527 | Whois7 struct {
528 | Two0170518 struct {
529 | AdminC string `json:"admin_c"`
530 | Country string `json:"country"`
531 | Descr string `json:"descr"`
532 | Inetnum string `json:"inetnum"`
533 | IPEnd string `json:"ip_end"`
534 | IPStart string `json:"ip_start"`
535 | Irt []interface{} `json:"irt"`
536 | LastModified string `json:"last_modified"`
537 | MntBy string `json:"mnt_by"`
538 | MntIrt string `json:"mnt_irt"`
539 | MntLower string `json:"mnt_lower"`
540 | MntRoutes string `json:"mnt_routes"`
541 | Netname string `json:"netname"`
542 | Notify string `json:"notify"`
543 | Organization struct {
544 | Address string `json:"address"`
545 | AdminC string `json:"admin_c"`
546 | Country string `json:"country"`
547 | Descr string `json:"descr"`
548 | Email string `json:"email"`
549 | FaxNo string `json:"fax_no"`
550 | LastModified string `json:"last_modified"`
551 | MntBy string `json:"mnt_by"`
552 | MntRef string `json:"mnt_ref"`
553 | Notify string `json:"notify"`
554 | Org string `json:"org"`
555 | OrgName string `json:"org_name"`
556 | Organization string `json:"organization"`
557 | Phone string `json:"phone"`
558 | Source string `json:"source"`
559 | TechC string `json:"tech_c"`
560 | } `json:"organization"`
561 | Person []interface{} `json:"person"`
562 | Role []interface{} `json:"role"`
563 | Source string `json:"source"`
564 | Status string `json:"status"`
565 | TechC string `json:"tech_c"`
566 | } `json:"2017-05-18"`
567 | } `json:"whois,omitempty"`
568 | Whois8 struct {
569 | Two0170518 struct {
570 | AdminC string `json:"admin_c"`
571 | Country string `json:"country"`
572 | Descr string `json:"descr"`
573 | Inetnum string `json:"inetnum"`
574 | IPEnd string `json:"ip_end"`
575 | IPStart string `json:"ip_start"`
576 | Irt []interface{} `json:"irt"`
577 | LastModified string `json:"last_modified"`
578 | MntBy string `json:"mnt_by"`
579 | MntIrt string `json:"mnt_irt"`
580 | MntLower string `json:"mnt_lower"`
581 | MntRoutes string `json:"mnt_routes"`
582 | Netname string `json:"netname"`
583 | Notify string `json:"notify"`
584 | Organization struct {
585 | Address string `json:"address"`
586 | AdminC string `json:"admin_c"`
587 | Country string `json:"country"`
588 | Descr string `json:"descr"`
589 | Email string `json:"email"`
590 | FaxNo string `json:"fax_no"`
591 | LastModified string `json:"last_modified"`
592 | MntBy string `json:"mnt_by"`
593 | MntRef string `json:"mnt_ref"`
594 | Notify string `json:"notify"`
595 | Org string `json:"org"`
596 | OrgName string `json:"org_name"`
597 | Organization string `json:"organization"`
598 | Phone string `json:"phone"`
599 | Source string `json:"source"`
600 | TechC string `json:"tech_c"`
601 | } `json:"organization"`
602 | Person []interface{} `json:"person"`
603 | Role []interface{} `json:"role"`
604 | Source string `json:"source"`
605 | Status string `json:"status"`
606 | TechC string `json:"tech_c"`
607 | } `json:"2017-05-18"`
608 | } `json:"whois,omitempty"`
609 | Whois9 struct {
610 | Two0170518 struct {
611 | AdminC string `json:"admin_c"`
612 | Country string `json:"country"`
613 | Descr string `json:"descr"`
614 | Inetnum string `json:"inetnum"`
615 | IPEnd string `json:"ip_end"`
616 | IPStart string `json:"ip_start"`
617 | Irt []interface{} `json:"irt"`
618 | LastModified string `json:"last_modified"`
619 | MntBy string `json:"mnt_by"`
620 | MntIrt string `json:"mnt_irt"`
621 | MntLower string `json:"mnt_lower"`
622 | MntRoutes string `json:"mnt_routes"`
623 | Netname string `json:"netname"`
624 | Notify string `json:"notify"`
625 | Organization struct {
626 | Address string `json:"address"`
627 | AdminC string `json:"admin_c"`
628 | Country string `json:"country"`
629 | Descr string `json:"descr"`
630 | Email string `json:"email"`
631 | FaxNo string `json:"fax_no"`
632 | LastModified string `json:"last_modified"`
633 | MntBy string `json:"mnt_by"`
634 | MntRef string `json:"mnt_ref"`
635 | Notify string `json:"notify"`
636 | Org string `json:"org"`
637 | OrgName string `json:"org_name"`
638 | Organization string `json:"organization"`
639 | Phone string `json:"phone"`
640 | Source string `json:"source"`
641 | TechC string `json:"tech_c"`
642 | } `json:"organization"`
643 | Person []interface{} `json:"person"`
644 | Role []interface{} `json:"role"`
645 | Source string `json:"source"`
646 | Status string `json:"status"`
647 | TechC string `json:"tech_c"`
648 | } `json:"2017-05-18"`
649 | } `json:"whois,omitempty"`
650 | } `json:"matches"`
651 | Facets struct {
652 | } `json:"facets"`
653 | }
654 |
655 | type ShodanInfo struct {
656 | Matches []struct {
657 | Hash int `json:"hash"`
658 | Shodan struct {
659 | Region string `json:"region"`
660 | Crawler string `json:"crawler"`
661 | Options struct {
662 | } `json:"options"`
663 | Module string `json:"module"`
664 | ID string `json:"id"`
665 | } `json:"_shodan,omitempty"`
666 | Product string `json:"product"`
667 | HTTP struct {
668 | Status int `json:"status"`
669 | RobotsHash interface{} `json:"robots_hash"`
670 | Redirects []interface{} `json:"redirects"`
671 | Securitytxt interface{} `json:"securitytxt"`
672 | Title interface{} `json:"title"`
673 | SitemapHash interface{} `json:"sitemap_hash"`
674 | Robots interface{} `json:"robots"`
675 | Server string `json:"server"`
676 | HeadersHash int `json:"headers_hash"`
677 | Host string `json:"host"`
678 | HTML string `json:"html"`
679 | Location string `json:"location"`
680 | Components struct {
681 | } `json:"components"`
682 | HTMLHash int `json:"html_hash"`
683 | Sitemap interface{} `json:"sitemap"`
684 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
685 | } `json:"http,omitempty"`
686 | Os interface{} `json:"os"`
687 | Timestamp string `json:"timestamp"`
688 | Isp string `json:"isp"`
689 | Cpe23 []string `json:"cpe23,omitempty"`
690 | Cpe []string `json:"cpe,omitempty"`
691 | Transport string `json:"transport"`
692 | Asn string `json:"asn"`
693 | Hostnames []string `json:"hostnames"`
694 | Location struct {
695 | City string `json:"city"`
696 | RegionCode string `json:"region_code"`
697 | AreaCode interface{} `json:"area_code"`
698 | Longitude float64 `json:"longitude"`
699 | Latitude float64 `json:"latitude"`
700 | CountryCode string `json:"country_code"`
701 | CountryName string `json:"country_name"`
702 | } `json:"location"`
703 | Version string `json:"version,omitempty"`
704 | IP int `json:"ip"`
705 | Domains []string `json:"domains"`
706 | Org string `json:"org"`
707 | Data string `json:"data"`
708 | Port int `json:"port"`
709 | IPStr string `json:"ip_str"`
710 | Cloud struct {
711 | Region string `json:"region"`
712 | Service string `json:"service"`
713 | Provider string `json:"provider"`
714 | } `json:"cloud,omitempty"`
715 | Tags []string `json:"tags,omitempty"`
716 | Info string `json:"info,omitempty"`
717 | Shodan0 struct {
718 | Region string `json:"region"`
719 | Ptr bool `json:"ptr"`
720 | Module string `json:"module"`
721 | ID string `json:"id"`
722 | Options struct {
723 | } `json:"options"`
724 | Crawler string `json:"crawler"`
725 | } `json:"_shodan,omitempty"`
726 | Shodan1 struct {
727 | Region string `json:"region"`
728 | Ptr bool `json:"ptr"`
729 | Module string `json:"module"`
730 | ID string `json:"id"`
731 | Options struct {
732 | } `json:"options"`
733 | Crawler string `json:"crawler"`
734 | } `json:"_shodan,omitempty"`
735 | HTTP0 struct {
736 | Status int `json:"status"`
737 | RobotsHash interface{} `json:"robots_hash"`
738 | Redirects []interface{} `json:"redirects"`
739 | Securitytxt interface{} `json:"securitytxt"`
740 | Title string `json:"title"`
741 | SitemapHash interface{} `json:"sitemap_hash"`
742 | HTMLHash int `json:"html_hash"`
743 | Robots interface{} `json:"robots"`
744 | Favicon struct {
745 | Hash int `json:"hash"`
746 | Data string `json:"data"`
747 | Location string `json:"location"`
748 | } `json:"favicon"`
749 | HeadersHash int `json:"headers_hash"`
750 | Host string `json:"host"`
751 | HTML string `json:"html"`
752 | Location string `json:"location"`
753 | Components struct {
754 | } `json:"components"`
755 | Server string `json:"server"`
756 | Sitemap interface{} `json:"sitemap"`
757 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
758 | } `json:"http,omitempty"`
759 | HTTP1 struct {
760 | Status int `json:"status"`
761 | RobotsHash interface{} `json:"robots_hash"`
762 | Redirects []interface{} `json:"redirects"`
763 | Securitytxt interface{} `json:"securitytxt"`
764 | Title string `json:"title"`
765 | SitemapHash interface{} `json:"sitemap_hash"`
766 | HTMLHash int `json:"html_hash"`
767 | Robots interface{} `json:"robots"`
768 | Favicon struct {
769 | Hash int `json:"hash"`
770 | Data string `json:"data"`
771 | Location string `json:"location"`
772 | } `json:"favicon"`
773 | HeadersHash int `json:"headers_hash"`
774 | Host string `json:"host"`
775 | HTML string `json:"html"`
776 | Location string `json:"location"`
777 | Components struct {
778 | } `json:"components"`
779 | Server string `json:"server"`
780 | Sitemap interface{} `json:"sitemap"`
781 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
782 | } `json:"http,omitempty"`
783 | Shodan2 struct {
784 | Region string `json:"region"`
785 | Ptr bool `json:"ptr"`
786 | Module string `json:"module"`
787 | ID string `json:"id"`
788 | Options struct {
789 | } `json:"options"`
790 | Crawler string `json:"crawler"`
791 | } `json:"_shodan,omitempty"`
792 | Shodan3 struct {
793 | Region string `json:"region"`
794 | Ptr bool `json:"ptr"`
795 | Module string `json:"module"`
796 | ID string `json:"id"`
797 | Options struct {
798 | } `json:"options"`
799 | Crawler string `json:"crawler"`
800 | } `json:"_shodan,omitempty"`
801 | Shodan4 struct {
802 | Region string `json:"region"`
803 | Ptr bool `json:"ptr"`
804 | Module string `json:"module"`
805 | ID string `json:"id"`
806 | Options struct {
807 | } `json:"options"`
808 | Crawler string `json:"crawler"`
809 | } `json:"_shodan,omitempty"`
810 | HTTP2 struct {
811 | Status int `json:"status"`
812 | RobotsHash interface{} `json:"robots_hash"`
813 | Redirects []interface{} `json:"redirects"`
814 | Securitytxt interface{} `json:"securitytxt"`
815 | Title string `json:"title"`
816 | SitemapHash interface{} `json:"sitemap_hash"`
817 | HTMLHash int `json:"html_hash"`
818 | Robots interface{} `json:"robots"`
819 | Favicon struct {
820 | Hash int `json:"hash"`
821 | Data string `json:"data"`
822 | Location string `json:"location"`
823 | } `json:"favicon"`
824 | HeadersHash int `json:"headers_hash"`
825 | Host string `json:"host"`
826 | HTML string `json:"html"`
827 | Location string `json:"location"`
828 | Components struct {
829 | } `json:"components"`
830 | Server string `json:"server"`
831 | Sitemap interface{} `json:"sitemap"`
832 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
833 | } `json:"http,omitempty"`
834 | HTTP3 struct {
835 | Status int `json:"status"`
836 | RobotsHash interface{} `json:"robots_hash"`
837 | Redirects []interface{} `json:"redirects"`
838 | Securitytxt interface{} `json:"securitytxt"`
839 | Title string `json:"title"`
840 | SitemapHash interface{} `json:"sitemap_hash"`
841 | HTMLHash int `json:"html_hash"`
842 | Robots interface{} `json:"robots"`
843 | Favicon struct {
844 | Hash int `json:"hash"`
845 | Data string `json:"data"`
846 | Location string `json:"location"`
847 | } `json:"favicon"`
848 | HeadersHash int `json:"headers_hash"`
849 | Host string `json:"host"`
850 | HTML string `json:"html"`
851 | Location string `json:"location"`
852 | Components struct {
853 | } `json:"components"`
854 | Server string `json:"server"`
855 | Sitemap interface{} `json:"sitemap"`
856 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
857 | } `json:"http,omitempty"`
858 | Shodan5 struct {
859 | Region string `json:"region"`
860 | Ptr bool `json:"ptr"`
861 | Module string `json:"module"`
862 | ID string `json:"id"`
863 | Options struct {
864 | } `json:"options"`
865 | Crawler string `json:"crawler"`
866 | } `json:"_shodan,omitempty"`
867 | Shodan6 struct {
868 | Region string `json:"region"`
869 | Ptr bool `json:"ptr"`
870 | Module string `json:"module"`
871 | ID string `json:"id"`
872 | Options struct {
873 | } `json:"options"`
874 | Crawler string `json:"crawler"`
875 | } `json:"_shodan,omitempty"`
876 | HTTP4 struct {
877 | Status int `json:"status"`
878 | RobotsHash interface{} `json:"robots_hash"`
879 | Redirects []interface{} `json:"redirects"`
880 | Securitytxt interface{} `json:"securitytxt"`
881 | Title string `json:"title"`
882 | SitemapHash interface{} `json:"sitemap_hash"`
883 | HTMLHash int `json:"html_hash"`
884 | Robots interface{} `json:"robots"`
885 | Favicon struct {
886 | Hash int `json:"hash"`
887 | Data string `json:"data"`
888 | Location string `json:"location"`
889 | } `json:"favicon"`
890 | HeadersHash int `json:"headers_hash"`
891 | Host string `json:"host"`
892 | HTML string `json:"html"`
893 | Location string `json:"location"`
894 | Components struct {
895 | } `json:"components"`
896 | Server string `json:"server"`
897 | Sitemap interface{} `json:"sitemap"`
898 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
899 | } `json:"http,omitempty"`
900 | Shodan7 struct {
901 | Region string `json:"region"`
902 | Ptr bool `json:"ptr"`
903 | Module string `json:"module"`
904 | ID string `json:"id"`
905 | Options struct {
906 | } `json:"options"`
907 | Crawler string `json:"crawler"`
908 | } `json:"_shodan,omitempty"`
909 | Shodan8 struct {
910 | Region string `json:"region"`
911 | Ptr bool `json:"ptr"`
912 | Module string `json:"module"`
913 | ID string `json:"id"`
914 | Options struct {
915 | } `json:"options"`
916 | Crawler string `json:"crawler"`
917 | } `json:"_shodan,omitempty"`
918 | Shodan9 struct {
919 | Region string `json:"region"`
920 | Ptr bool `json:"ptr"`
921 | Module string `json:"module"`
922 | ID string `json:"id"`
923 | Options struct {
924 | } `json:"options"`
925 | Crawler string `json:"crawler"`
926 | } `json:"_shodan,omitempty"`
927 | Shodan10 struct {
928 | Region string `json:"region"`
929 | Ptr bool `json:"ptr"`
930 | Module string `json:"module"`
931 | ID string `json:"id"`
932 | Options struct {
933 | } `json:"options"`
934 | Crawler string `json:"crawler"`
935 | } `json:"_shodan,omitempty"`
936 | Shodan11 struct {
937 | Region string `json:"region"`
938 | Ptr bool `json:"ptr"`
939 | Module string `json:"module"`
940 | ID string `json:"id"`
941 | Options struct {
942 | } `json:"options"`
943 | Crawler string `json:"crawler"`
944 | } `json:"_shodan,omitempty"`
945 | HTTP5 struct {
946 | Status int `json:"status"`
947 | RobotsHash interface{} `json:"robots_hash"`
948 | Redirects []interface{} `json:"redirects"`
949 | Securitytxt interface{} `json:"securitytxt"`
950 | Title string `json:"title"`
951 | SitemapHash interface{} `json:"sitemap_hash"`
952 | HTMLHash int `json:"html_hash"`
953 | Robots interface{} `json:"robots"`
954 | Favicon struct {
955 | Hash int `json:"hash"`
956 | Data string `json:"data"`
957 | Location string `json:"location"`
958 | } `json:"favicon"`
959 | HeadersHash int `json:"headers_hash"`
960 | Host string `json:"host"`
961 | HTML string `json:"html"`
962 | Location string `json:"location"`
963 | Components struct {
964 | } `json:"components"`
965 | Server string `json:"server"`
966 | Sitemap interface{} `json:"sitemap"`
967 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
968 | } `json:"http,omitempty"`
969 | Shodan12 struct {
970 | Region string `json:"region"`
971 | Ptr bool `json:"ptr"`
972 | Module string `json:"module"`
973 | ID string `json:"id"`
974 | Options struct {
975 | } `json:"options"`
976 | Crawler string `json:"crawler"`
977 | } `json:"_shodan,omitempty"`
978 | HTTP6 struct {
979 | Status int `json:"status"`
980 | RobotsHash int `json:"robots_hash"`
981 | Redirects []interface{} `json:"redirects"`
982 | Securitytxt interface{} `json:"securitytxt"`
983 | Title string `json:"title"`
984 | SitemapHash int `json:"sitemap_hash"`
985 | HTMLHash int `json:"html_hash"`
986 | Robots string `json:"robots"`
987 | Favicon struct {
988 | Hash int `json:"hash"`
989 | Data string `json:"data"`
990 | Location string `json:"location"`
991 | } `json:"favicon"`
992 | HeadersHash int `json:"headers_hash"`
993 | Host string `json:"host"`
994 | HTML string `json:"html"`
995 | Location string `json:"location"`
996 | Components struct {
997 | JQuery struct {
998 | Categories []string `json:"categories"`
999 | } `json:"jQuery"`
1000 | Cdnjs struct {
1001 | Categories []string `json:"categories"`
1002 | } `json:"cdnjs"`
1003 | Bootstrap struct {
1004 | Categories []string `json:"categories"`
1005 | } `json:"Bootstrap"`
1006 | Popper struct {
1007 | Categories []string `json:"categories"`
1008 | } `json:"Popper"`
1009 | JQueryCDN struct {
1010 | Categories []string `json:"categories"`
1011 | } `json:"jQuery CDN"`
1012 | GoogleFontAPI struct {
1013 | Categories []string `json:"categories"`
1014 | } `json:"Google Font API"`
1015 | Cloudflare struct {
1016 | Categories []string `json:"categories"`
1017 | } `json:"Cloudflare"`
1018 | Liveinternet struct {
1019 | Categories []string `json:"categories"`
1020 | } `json:"Liveinternet"`
1021 | } `json:"components"`
1022 | Server string `json:"server"`
1023 | Sitemap string `json:"sitemap"`
1024 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1025 | } `json:"http,omitempty"`
1026 | Ssl struct {
1027 | ChainSha256 []string `json:"chain_sha256"`
1028 | Jarm string `json:"jarm"`
1029 | Chain []string `json:"chain"`
1030 | Dhparams struct {
1031 | Prime string `json:"prime"`
1032 | PublicKey string `json:"public_key"`
1033 | Bits int `json:"bits"`
1034 | Generator int `json:"generator"`
1035 | } `json:"dhparams"`
1036 | Versions []string `json:"versions"`
1037 | AcceptableCas []interface{} `json:"acceptable_cas"`
1038 | Tlsext []struct {
1039 | ID int `json:"id"`
1040 | Name string `json:"name"`
1041 | } `json:"tlsext"`
1042 | Ja3S interface{} `json:"ja3s"`
1043 | Cert struct {
1044 | SigAlg string `json:"sig_alg"`
1045 | Issued string `json:"issued"`
1046 | Expires string `json:"expires"`
1047 | Expired bool `json:"expired"`
1048 | Version int `json:"version"`
1049 | Extensions []struct {
1050 | Critical bool `json:"critical,omitempty"`
1051 | Data string `json:"data"`
1052 | Name string `json:"name"`
1053 | } `json:"extensions"`
1054 | Fingerprint struct {
1055 | Sha256 string `json:"sha256"`
1056 | Sha1 string `json:"sha1"`
1057 | } `json:"fingerprint"`
1058 | Serial int64 `json:"serial"`
1059 | Subject struct {
1060 | Cn string `json:"CN"`
1061 | } `json:"subject"`
1062 | Pubkey struct {
1063 | Type string `json:"type"`
1064 | Bits int `json:"bits"`
1065 | } `json:"pubkey"`
1066 | Issuer struct {
1067 | C string `json:"C"`
1068 | Cn string `json:"CN"`
1069 | O string `json:"O"`
1070 | } `json:"issuer"`
1071 | } `json:"cert"`
1072 | Cipher struct {
1073 | Version string `json:"version"`
1074 | Bits int `json:"bits"`
1075 | Name string `json:"name"`
1076 | } `json:"cipher"`
1077 | Trust struct {
1078 | Revoked bool `json:"revoked"`
1079 | Browser struct {
1080 | Mozilla bool `json:"mozilla"`
1081 | Apple bool `json:"apple"`
1082 | Microsoft bool `json:"microsoft"`
1083 | } `json:"browser"`
1084 | } `json:"trust"`
1085 | HandshakeStates []string `json:"handshake_states"`
1086 | Alpn []string `json:"alpn"`
1087 | Ocsp struct {
1088 | } `json:"ocsp"`
1089 | } `json:"ssl,omitempty"`
1090 | Shodan13 struct {
1091 | Region string `json:"region"`
1092 | Ptr bool `json:"ptr"`
1093 | Module string `json:"module"`
1094 | ID string `json:"id"`
1095 | Options struct {
1096 | } `json:"options"`
1097 | Crawler string `json:"crawler"`
1098 | } `json:"_shodan,omitempty"`
1099 | Shodan14 struct {
1100 | Region string `json:"region"`
1101 | Ptr bool `json:"ptr"`
1102 | Module string `json:"module"`
1103 | ID string `json:"id"`
1104 | Options struct {
1105 | } `json:"options"`
1106 | Crawler string `json:"crawler"`
1107 | } `json:"_shodan,omitempty"`
1108 | HTTP7 struct {
1109 | Status int `json:"status"`
1110 | RobotsHash interface{} `json:"robots_hash"`
1111 | Redirects []interface{} `json:"redirects"`
1112 | Securitytxt interface{} `json:"securitytxt"`
1113 | Title string `json:"title"`
1114 | SitemapHash interface{} `json:"sitemap_hash"`
1115 | HTMLHash int `json:"html_hash"`
1116 | Robots interface{} `json:"robots"`
1117 | Favicon struct {
1118 | Hash int `json:"hash"`
1119 | Data string `json:"data"`
1120 | Location string `json:"location"`
1121 | } `json:"favicon"`
1122 | HeadersHash int `json:"headers_hash"`
1123 | Host string `json:"host"`
1124 | HTML string `json:"html"`
1125 | Location string `json:"location"`
1126 | Components struct {
1127 | } `json:"components"`
1128 | Server string `json:"server"`
1129 | Sitemap interface{} `json:"sitemap"`
1130 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1131 | } `json:"http,omitempty"`
1132 | Shodan15 struct {
1133 | Region string `json:"region"`
1134 | Ptr bool `json:"ptr"`
1135 | Module string `json:"module"`
1136 | ID string `json:"id"`
1137 | Options struct {
1138 | } `json:"options"`
1139 | Crawler string `json:"crawler"`
1140 | } `json:"_shodan,omitempty"`
1141 | Shodan16 struct {
1142 | Region string `json:"region"`
1143 | Ptr bool `json:"ptr"`
1144 | Module string `json:"module"`
1145 | ID string `json:"id"`
1146 | Options struct {
1147 | } `json:"options"`
1148 | Crawler string `json:"crawler"`
1149 | } `json:"_shodan,omitempty"`
1150 | HTTP8 struct {
1151 | Status int `json:"status"`
1152 | RobotsHash interface{} `json:"robots_hash"`
1153 | Redirects []interface{} `json:"redirects"`
1154 | Securitytxt interface{} `json:"securitytxt"`
1155 | Title string `json:"title"`
1156 | SitemapHash interface{} `json:"sitemap_hash"`
1157 | HTMLHash int `json:"html_hash"`
1158 | Robots interface{} `json:"robots"`
1159 | Favicon struct {
1160 | Hash int `json:"hash"`
1161 | Data string `json:"data"`
1162 | Location string `json:"location"`
1163 | } `json:"favicon"`
1164 | HeadersHash int `json:"headers_hash"`
1165 | Host string `json:"host"`
1166 | HTML string `json:"html"`
1167 | Location string `json:"location"`
1168 | Components struct {
1169 | } `json:"components"`
1170 | Server string `json:"server"`
1171 | Sitemap interface{} `json:"sitemap"`
1172 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1173 | } `json:"http,omitempty"`
1174 | Shodan17 struct {
1175 | Region string `json:"region"`
1176 | Ptr bool `json:"ptr"`
1177 | Module string `json:"module"`
1178 | ID string `json:"id"`
1179 | Options struct {
1180 | } `json:"options"`
1181 | Crawler string `json:"crawler"`
1182 | } `json:"_shodan,omitempty"`
1183 | Shodan18 struct {
1184 | Region string `json:"region"`
1185 | Ptr bool `json:"ptr"`
1186 | Module string `json:"module"`
1187 | ID string `json:"id"`
1188 | Options struct {
1189 | } `json:"options"`
1190 | Crawler string `json:"crawler"`
1191 | } `json:"_shodan,omitempty"`
1192 | Shodan19 struct {
1193 | Region string `json:"region"`
1194 | Ptr bool `json:"ptr"`
1195 | Module string `json:"module"`
1196 | ID string `json:"id"`
1197 | Options struct {
1198 | } `json:"options"`
1199 | Crawler string `json:"crawler"`
1200 | } `json:"_shodan,omitempty"`
1201 | HTTP9 struct {
1202 | Status int `json:"status"`
1203 | RobotsHash interface{} `json:"robots_hash"`
1204 | Redirects []interface{} `json:"redirects"`
1205 | Securitytxt interface{} `json:"securitytxt"`
1206 | Title interface{} `json:"title"`
1207 | SitemapHash interface{} `json:"sitemap_hash"`
1208 | Robots interface{} `json:"robots"`
1209 | Server string `json:"server"`
1210 | HeadersHash int `json:"headers_hash"`
1211 | Host string `json:"host"`
1212 | HTML string `json:"html"`
1213 | Location string `json:"location"`
1214 | HTMLHash int `json:"html_hash"`
1215 | Sitemap interface{} `json:"sitemap"`
1216 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1217 | } `json:"http,omitempty"`
1218 | Shodan20 struct {
1219 | Region string `json:"region"`
1220 | Ptr bool `json:"ptr"`
1221 | Module string `json:"module"`
1222 | ID string `json:"id"`
1223 | Options struct {
1224 | } `json:"options"`
1225 | Crawler string `json:"crawler"`
1226 | } `json:"_shodan,omitempty"`
1227 | Shodan21 struct {
1228 | Region string `json:"region"`
1229 | Ptr bool `json:"ptr"`
1230 | Module string `json:"module"`
1231 | ID string `json:"id"`
1232 | Options struct {
1233 | } `json:"options"`
1234 | Crawler string `json:"crawler"`
1235 | } `json:"_shodan,omitempty"`
1236 | Shodan22 struct {
1237 | Region string `json:"region"`
1238 | Ptr bool `json:"ptr"`
1239 | Module string `json:"module"`
1240 | ID string `json:"id"`
1241 | Options struct {
1242 | } `json:"options"`
1243 | Crawler string `json:"crawler"`
1244 | } `json:"_shodan,omitempty"`
1245 | Shodan23 struct {
1246 | Region string `json:"region"`
1247 | Ptr bool `json:"ptr"`
1248 | Module string `json:"module"`
1249 | ID string `json:"id"`
1250 | Options struct {
1251 | } `json:"options"`
1252 | Crawler string `json:"crawler"`
1253 | } `json:"_shodan,omitempty"`
1254 | Shodan24 struct {
1255 | Region string `json:"region"`
1256 | Ptr bool `json:"ptr"`
1257 | Module string `json:"module"`
1258 | ID string `json:"id"`
1259 | Options struct {
1260 | } `json:"options"`
1261 | Crawler string `json:"crawler"`
1262 | } `json:"_shodan,omitempty"`
1263 | Shodan25 struct {
1264 | Region string `json:"region"`
1265 | Ptr bool `json:"ptr"`
1266 | Module string `json:"module"`
1267 | ID string `json:"id"`
1268 | Options struct {
1269 | } `json:"options"`
1270 | Crawler string `json:"crawler"`
1271 | } `json:"_shodan,omitempty"`
1272 | Shodan26 struct {
1273 | Region string `json:"region"`
1274 | Ptr bool `json:"ptr"`
1275 | Module string `json:"module"`
1276 | ID string `json:"id"`
1277 | Options struct {
1278 | } `json:"options"`
1279 | Crawler string `json:"crawler"`
1280 | } `json:"_shodan,omitempty"`
1281 | Shodan27 struct {
1282 | Region string `json:"region"`
1283 | Ptr bool `json:"ptr"`
1284 | Module string `json:"module"`
1285 | ID string `json:"id"`
1286 | Options struct {
1287 | } `json:"options"`
1288 | Crawler string `json:"crawler"`
1289 | } `json:"_shodan,omitempty"`
1290 | HTTP10 struct {
1291 | Status int `json:"status"`
1292 | RobotsHash interface{} `json:"robots_hash"`
1293 | Redirects []interface{} `json:"redirects"`
1294 | Securitytxt interface{} `json:"securitytxt"`
1295 | Title string `json:"title"`
1296 | SitemapHash interface{} `json:"sitemap_hash"`
1297 | HTMLHash int `json:"html_hash"`
1298 | Robots interface{} `json:"robots"`
1299 | Favicon struct {
1300 | Hash int `json:"hash"`
1301 | Data string `json:"data"`
1302 | Location string `json:"location"`
1303 | } `json:"favicon"`
1304 | HeadersHash int `json:"headers_hash"`
1305 | Host string `json:"host"`
1306 | HTML string `json:"html"`
1307 | Location string `json:"location"`
1308 | Components struct {
1309 | } `json:"components"`
1310 | Server string `json:"server"`
1311 | Sitemap interface{} `json:"sitemap"`
1312 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1313 | } `json:"http,omitempty"`
1314 | HTTP11 struct {
1315 | Status int `json:"status"`
1316 | RobotsHash interface{} `json:"robots_hash"`
1317 | Redirects []struct {
1318 | Host string `json:"host"`
1319 | Data string `json:"data"`
1320 | Location string `json:"location"`
1321 | } `json:"redirects"`
1322 | Securitytxt interface{} `json:"securitytxt"`
1323 | Title interface{} `json:"title"`
1324 | SitemapHash interface{} `json:"sitemap_hash"`
1325 | Robots interface{} `json:"robots"`
1326 | Server string `json:"server"`
1327 | HeadersHash int `json:"headers_hash"`
1328 | Host string `json:"host"`
1329 | HTML string `json:"html"`
1330 | Location string `json:"location"`
1331 | HTMLHash int `json:"html_hash"`
1332 | Sitemap interface{} `json:"sitemap"`
1333 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1334 | } `json:"http,omitempty"`
1335 | Shodan28 struct {
1336 | Region string `json:"region"`
1337 | Ptr bool `json:"ptr"`
1338 | Module string `json:"module"`
1339 | ID string `json:"id"`
1340 | Options struct {
1341 | Hostname string `json:"hostname"`
1342 | Scan string `json:"scan"`
1343 | } `json:"options"`
1344 | Crawler string `json:"crawler"`
1345 | } `json:"_shodan,omitempty"`
1346 | Shodan29 struct {
1347 | Region string `json:"region"`
1348 | Ptr bool `json:"ptr"`
1349 | Module string `json:"module"`
1350 | ID string `json:"id"`
1351 | Options struct {
1352 | } `json:"options"`
1353 | Crawler string `json:"crawler"`
1354 | } `json:"_shodan,omitempty"`
1355 | HTTP12 struct {
1356 | Status int `json:"status"`
1357 | RobotsHash interface{} `json:"robots_hash"`
1358 | Redirects []interface{} `json:"redirects"`
1359 | Securitytxt interface{} `json:"securitytxt"`
1360 | Title string `json:"title"`
1361 | SitemapHash interface{} `json:"sitemap_hash"`
1362 | Waf string `json:"waf"`
1363 | Robots interface{} `json:"robots"`
1364 | Favicon struct {
1365 | Hash int `json:"hash"`
1366 | Data string `json:"data"`
1367 | Location string `json:"location"`
1368 | } `json:"favicon"`
1369 | HeadersHash int `json:"headers_hash"`
1370 | Host string `json:"host"`
1371 | HTML time.Time `json:"html"`
1372 | Location string `json:"location"`
1373 | Components struct {
1374 | GoogleTagManager struct {
1375 | Categories []string `json:"categories"`
1376 | } `json:"Google Tag Manager"`
1377 | Pingdom struct {
1378 | Categories []string `json:"categories"`
1379 | } `json:"Pingdom"`
1380 | } `json:"components"`
1381 | HTMLHash int `json:"html_hash"`
1382 | Server string `json:"server"`
1383 | Sitemap interface{} `json:"sitemap"`
1384 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1385 | } `json:"http,omitempty"`
1386 | Shodan30 struct {
1387 | Region string `json:"region"`
1388 | Ptr bool `json:"ptr"`
1389 | Module string `json:"module"`
1390 | ID string `json:"id"`
1391 | Options struct {
1392 | Hostname string `json:"hostname"`
1393 | Scan string `json:"scan"`
1394 | } `json:"options"`
1395 | Crawler string `json:"crawler"`
1396 | } `json:"_shodan,omitempty"`
1397 | Shodan31 struct {
1398 | Region string `json:"region"`
1399 | Ptr bool `json:"ptr"`
1400 | Module string `json:"module"`
1401 | ID string `json:"id"`
1402 | Options struct {
1403 | } `json:"options"`
1404 | Crawler string `json:"crawler"`
1405 | } `json:"_shodan,omitempty"`
1406 | Shodan32 struct {
1407 | Region string `json:"region"`
1408 | Ptr bool `json:"ptr"`
1409 | Module string `json:"module"`
1410 | ID string `json:"id"`
1411 | Options struct {
1412 | } `json:"options"`
1413 | Crawler string `json:"crawler"`
1414 | } `json:"_shodan,omitempty"`
1415 | HTTP13 struct {
1416 | Status int `json:"status"`
1417 | RobotsHash interface{} `json:"robots_hash"`
1418 | Redirects []interface{} `json:"redirects"`
1419 | Securitytxt interface{} `json:"securitytxt"`
1420 | Title string `json:"title"`
1421 | SitemapHash interface{} `json:"sitemap_hash"`
1422 | HTMLHash int `json:"html_hash"`
1423 | Robots interface{} `json:"robots"`
1424 | Favicon struct {
1425 | Hash int `json:"hash"`
1426 | Data string `json:"data"`
1427 | Location string `json:"location"`
1428 | } `json:"favicon"`
1429 | HeadersHash int `json:"headers_hash"`
1430 | Host string `json:"host"`
1431 | HTML string `json:"html"`
1432 | Location string `json:"location"`
1433 | Components struct {
1434 | } `json:"components"`
1435 | Server string `json:"server"`
1436 | Sitemap interface{} `json:"sitemap"`
1437 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1438 | } `json:"http,omitempty"`
1439 | Shodan33 struct {
1440 | Region string `json:"region"`
1441 | Ptr bool `json:"ptr"`
1442 | Module string `json:"module"`
1443 | ID string `json:"id"`
1444 | Options struct {
1445 | } `json:"options"`
1446 | Crawler string `json:"crawler"`
1447 | } `json:"_shodan,omitempty"`
1448 | Shodan34 struct {
1449 | Region string `json:"region"`
1450 | Ptr bool `json:"ptr"`
1451 | Module string `json:"module"`
1452 | ID string `json:"id"`
1453 | Options struct {
1454 | } `json:"options"`
1455 | Crawler string `json:"crawler"`
1456 | } `json:"_shodan,omitempty"`
1457 | Shodan35 struct {
1458 | Region string `json:"region"`
1459 | Ptr bool `json:"ptr"`
1460 | Module string `json:"module"`
1461 | ID string `json:"id"`
1462 | Options struct {
1463 | } `json:"options"`
1464 | Crawler string `json:"crawler"`
1465 | } `json:"_shodan,omitempty"`
1466 | Shodan36 struct {
1467 | Region string `json:"region"`
1468 | Ptr bool `json:"ptr"`
1469 | Module string `json:"module"`
1470 | ID string `json:"id"`
1471 | Options struct {
1472 | } `json:"options"`
1473 | Crawler string `json:"crawler"`
1474 | } `json:"_shodan,omitempty"`
1475 | HTTP14 struct {
1476 | Status int `json:"status"`
1477 | RobotsHash interface{} `json:"robots_hash"`
1478 | Redirects []interface{} `json:"redirects"`
1479 | Securitytxt interface{} `json:"securitytxt"`
1480 | Title interface{} `json:"title"`
1481 | SitemapHash interface{} `json:"sitemap_hash"`
1482 | Robots interface{} `json:"robots"`
1483 | Server string `json:"server"`
1484 | HeadersHash int `json:"headers_hash"`
1485 | Host string `json:"host"`
1486 | HTML string `json:"html"`
1487 | Location string `json:"location"`
1488 | HTMLHash int `json:"html_hash"`
1489 | Sitemap interface{} `json:"sitemap"`
1490 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1491 | } `json:"http,omitempty"`
1492 | HTTP15 struct {
1493 | Status int `json:"status"`
1494 | RobotsHash interface{} `json:"robots_hash"`
1495 | Redirects []interface{} `json:"redirects"`
1496 | Securitytxt interface{} `json:"securitytxt"`
1497 | Title string `json:"title"`
1498 | SitemapHash interface{} `json:"sitemap_hash"`
1499 | HTMLHash int `json:"html_hash"`
1500 | Robots interface{} `json:"robots"`
1501 | Favicon struct {
1502 | Hash int `json:"hash"`
1503 | Data string `json:"data"`
1504 | Location string `json:"location"`
1505 | } `json:"favicon"`
1506 | HeadersHash int `json:"headers_hash"`
1507 | Host string `json:"host"`
1508 | HTML string `json:"html"`
1509 | Location string `json:"location"`
1510 | Components struct {
1511 | } `json:"components"`
1512 | Server string `json:"server"`
1513 | Sitemap interface{} `json:"sitemap"`
1514 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1515 | } `json:"http,omitempty"`
1516 | Shodan37 struct {
1517 | Region string `json:"region"`
1518 | Ptr bool `json:"ptr"`
1519 | Module string `json:"module"`
1520 | ID string `json:"id"`
1521 | Options struct {
1522 | } `json:"options"`
1523 | Crawler string `json:"crawler"`
1524 | } `json:"_shodan,omitempty"`
1525 | HTTP16 struct {
1526 | Status int `json:"status"`
1527 | RobotsHash interface{} `json:"robots_hash"`
1528 | Redirects []interface{} `json:"redirects"`
1529 | Securitytxt interface{} `json:"securitytxt"`
1530 | Title string `json:"title"`
1531 | SitemapHash interface{} `json:"sitemap_hash"`
1532 | HTMLHash int `json:"html_hash"`
1533 | Robots interface{} `json:"robots"`
1534 | Favicon struct {
1535 | Hash int `json:"hash"`
1536 | Data string `json:"data"`
1537 | Location string `json:"location"`
1538 | } `json:"favicon"`
1539 | HeadersHash int `json:"headers_hash"`
1540 | Host string `json:"host"`
1541 | HTML string `json:"html"`
1542 | Location string `json:"location"`
1543 | Components struct {
1544 | } `json:"components"`
1545 | Server string `json:"server"`
1546 | Sitemap interface{} `json:"sitemap"`
1547 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1548 | } `json:"http,omitempty"`
1549 | HTTP17 struct {
1550 | Status int `json:"status"`
1551 | RobotsHash int `json:"robots_hash"`
1552 | Redirects []interface{} `json:"redirects"`
1553 | Securitytxt interface{} `json:"securitytxt"`
1554 | Title string `json:"title"`
1555 | SitemapHash interface{} `json:"sitemap_hash"`
1556 | HTMLHash int `json:"html_hash"`
1557 | Robots string `json:"robots"`
1558 | Favicon struct {
1559 | Hash int `json:"hash"`
1560 | Data string `json:"data"`
1561 | Location string `json:"location"`
1562 | } `json:"favicon"`
1563 | HeadersHash int `json:"headers_hash"`
1564 | Host string `json:"host"`
1565 | HTML string `json:"html"`
1566 | Location string `json:"location"`
1567 | Components struct {
1568 | } `json:"components"`
1569 | Server string `json:"server"`
1570 | Sitemap interface{} `json:"sitemap"`
1571 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1572 | } `json:"http,omitempty"`
1573 | Shodan38 struct {
1574 | Region string `json:"region"`
1575 | Ptr bool `json:"ptr"`
1576 | Module string `json:"module"`
1577 | ID string `json:"id"`
1578 | Options struct {
1579 | Referrer string `json:"referrer"`
1580 | } `json:"options"`
1581 | Crawler string `json:"crawler"`
1582 | } `json:"_shodan,omitempty"`
1583 | Shodan39 struct {
1584 | Region string `json:"region"`
1585 | Ptr bool `json:"ptr"`
1586 | Module string `json:"module"`
1587 | ID string `json:"id"`
1588 | Options struct {
1589 | } `json:"options"`
1590 | Crawler string `json:"crawler"`
1591 | } `json:"_shodan,omitempty"`
1592 | Shodan40 struct {
1593 | Region string `json:"region"`
1594 | Ptr bool `json:"ptr"`
1595 | Module string `json:"module"`
1596 | ID string `json:"id"`
1597 | Options struct {
1598 | } `json:"options"`
1599 | Crawler string `json:"crawler"`
1600 | } `json:"_shodan,omitempty"`
1601 | Shodan41 struct {
1602 | Region string `json:"region"`
1603 | Ptr bool `json:"ptr"`
1604 | Module string `json:"module"`
1605 | ID string `json:"id"`
1606 | Options struct {
1607 | } `json:"options"`
1608 | Crawler string `json:"crawler"`
1609 | } `json:"_shodan,omitempty"`
1610 | HTTP18 struct {
1611 | Status int `json:"status"`
1612 | RobotsHash interface{} `json:"robots_hash"`
1613 | Redirects []interface{} `json:"redirects"`
1614 | Securitytxt interface{} `json:"securitytxt"`
1615 | Title string `json:"title"`
1616 | SitemapHash interface{} `json:"sitemap_hash"`
1617 | HTMLHash int `json:"html_hash"`
1618 | Robots interface{} `json:"robots"`
1619 | Favicon struct {
1620 | Hash int `json:"hash"`
1621 | Data string `json:"data"`
1622 | Location string `json:"location"`
1623 | } `json:"favicon"`
1624 | HeadersHash int `json:"headers_hash"`
1625 | Host string `json:"host"`
1626 | HTML string `json:"html"`
1627 | Location string `json:"location"`
1628 | Components struct {
1629 | Prototype struct {
1630 | Categories []string `json:"categories"`
1631 | } `json:"Prototype"`
1632 | ExtJS struct {
1633 | Categories []string `json:"categories"`
1634 | } `json:"ExtJS"`
1635 | SynologyDiskStation struct {
1636 | Categories []string `json:"categories"`
1637 | } `json:"Synology DiskStation"`
1638 | } `json:"components"`
1639 | Server string `json:"server"`
1640 | Sitemap interface{} `json:"sitemap"`
1641 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1642 | } `json:"http,omitempty"`
1643 | SynologyDsm struct {
1644 | Hostname string `json:"hostname"`
1645 | } `json:"synology_dsm,omitempty"`
1646 | Shodan42 struct {
1647 | Region string `json:"region"`
1648 | Ptr bool `json:"ptr"`
1649 | Module string `json:"module"`
1650 | ID string `json:"id"`
1651 | Options struct {
1652 | } `json:"options"`
1653 | Crawler string `json:"crawler"`
1654 | } `json:"_shodan,omitempty"`
1655 | HTTP19 struct {
1656 | Status int `json:"status"`
1657 | RobotsHash int `json:"robots_hash"`
1658 | Redirects []interface{} `json:"redirects"`
1659 | Securitytxt interface{} `json:"securitytxt"`
1660 | Title string `json:"title"`
1661 | SitemapHash interface{} `json:"sitemap_hash"`
1662 | HTMLHash int `json:"html_hash"`
1663 | Robots string `json:"robots"`
1664 | Favicon struct {
1665 | Hash int `json:"hash"`
1666 | Data string `json:"data"`
1667 | Location string `json:"location"`
1668 | } `json:"favicon"`
1669 | HeadersHash int `json:"headers_hash"`
1670 | Host string `json:"host"`
1671 | HTML string `json:"html"`
1672 | Location string `json:"location"`
1673 | Components struct {
1674 | Modernizr struct {
1675 | Categories []string `json:"categories"`
1676 | } `json:"Modernizr"`
1677 | WordPress struct {
1678 | Categories []string `json:"categories"`
1679 | } `json:"WordPress"`
1680 | MySQL struct {
1681 | Categories []string `json:"categories"`
1682 | } `json:"MySQL"`
1683 | W3TotalCache struct {
1684 | Categories []string `json:"categories"`
1685 | } `json:"W3 Total Cache"`
1686 | YoastSEO struct {
1687 | Categories []string `json:"categories"`
1688 | } `json:"Yoast SEO"`
1689 | Php struct {
1690 | Categories []string `json:"categories"`
1691 | } `json:"PHP"`
1692 | } `json:"components"`
1693 | Server string `json:"server"`
1694 | Sitemap interface{} `json:"sitemap"`
1695 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1696 | } `json:"http,omitempty"`
1697 | Shodan43 struct {
1698 | Region string `json:"region"`
1699 | Ptr bool `json:"ptr"`
1700 | Module string `json:"module"`
1701 | ID string `json:"id"`
1702 | Options struct {
1703 | } `json:"options"`
1704 | Crawler string `json:"crawler"`
1705 | } `json:"_shodan,omitempty"`
1706 | HTTP20 struct {
1707 | Status int `json:"status"`
1708 | RobotsHash interface{} `json:"robots_hash"`
1709 | Redirects []interface{} `json:"redirects"`
1710 | Securitytxt interface{} `json:"securitytxt"`
1711 | Title string `json:"title"`
1712 | SitemapHash interface{} `json:"sitemap_hash"`
1713 | HTMLHash int `json:"html_hash"`
1714 | Robots interface{} `json:"robots"`
1715 | Favicon struct {
1716 | Hash int `json:"hash"`
1717 | Data string `json:"data"`
1718 | Location string `json:"location"`
1719 | } `json:"favicon"`
1720 | HeadersHash int `json:"headers_hash"`
1721 | Host string `json:"host"`
1722 | HTML string `json:"html"`
1723 | Location string `json:"location"`
1724 | Components struct {
1725 | Prototype struct {
1726 | Categories []string `json:"categories"`
1727 | } `json:"Prototype"`
1728 | ExtJS struct {
1729 | Categories []string `json:"categories"`
1730 | } `json:"ExtJS"`
1731 | SynologyDiskStation struct {
1732 | Categories []string `json:"categories"`
1733 | } `json:"Synology DiskStation"`
1734 | } `json:"components"`
1735 | Server string `json:"server"`
1736 | Sitemap interface{} `json:"sitemap"`
1737 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1738 | } `json:"http,omitempty"`
1739 | Shodan44 struct {
1740 | Region string `json:"region"`
1741 | Ptr bool `json:"ptr"`
1742 | Module string `json:"module"`
1743 | ID string `json:"id"`
1744 | Options struct {
1745 | } `json:"options"`
1746 | Crawler string `json:"crawler"`
1747 | } `json:"_shodan,omitempty"`
1748 | HTTP21 struct {
1749 | Status int `json:"status"`
1750 | RobotsHash interface{} `json:"robots_hash"`
1751 | Redirects []interface{} `json:"redirects"`
1752 | Securitytxt interface{} `json:"securitytxt"`
1753 | Title string `json:"title"`
1754 | SitemapHash interface{} `json:"sitemap_hash"`
1755 | HTMLHash int `json:"html_hash"`
1756 | Robots interface{} `json:"robots"`
1757 | Favicon struct {
1758 | Hash int `json:"hash"`
1759 | Data string `json:"data"`
1760 | Location string `json:"location"`
1761 | } `json:"favicon"`
1762 | HeadersHash int `json:"headers_hash"`
1763 | Host string `json:"host"`
1764 | HTML string `json:"html"`
1765 | Location string `json:"location"`
1766 | Components struct {
1767 | AnimateCSS struct {
1768 | Categories []string `json:"categories"`
1769 | } `json:"animate.css"`
1770 | } `json:"components"`
1771 | Server string `json:"server"`
1772 | Sitemap interface{} `json:"sitemap"`
1773 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1774 | } `json:"http,omitempty"`
1775 | HTTP22 struct {
1776 | Status int `json:"status"`
1777 | RobotsHash int `json:"robots_hash"`
1778 | Redirects []interface{} `json:"redirects"`
1779 | Securitytxt interface{} `json:"securitytxt"`
1780 | Title string `json:"title"`
1781 | SitemapHash interface{} `json:"sitemap_hash"`
1782 | HTMLHash int `json:"html_hash"`
1783 | Robots string `json:"robots"`
1784 | Favicon struct {
1785 | Hash int `json:"hash"`
1786 | Data string `json:"data"`
1787 | Location string `json:"location"`
1788 | } `json:"favicon"`
1789 | HeadersHash int `json:"headers_hash"`
1790 | Host string `json:"host"`
1791 | HTML string `json:"html"`
1792 | Location string `json:"location"`
1793 | Components struct {
1794 | } `json:"components"`
1795 | Server string `json:"server"`
1796 | Sitemap interface{} `json:"sitemap"`
1797 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1798 | } `json:"http,omitempty"`
1799 | Shodan45 struct {
1800 | Region string `json:"region"`
1801 | Ptr bool `json:"ptr"`
1802 | Module string `json:"module"`
1803 | ID string `json:"id"`
1804 | Options struct {
1805 | } `json:"options"`
1806 | Crawler string `json:"crawler"`
1807 | } `json:"_shodan,omitempty"`
1808 | Shodan46 struct {
1809 | Region string `json:"region"`
1810 | Ptr bool `json:"ptr"`
1811 | Module string `json:"module"`
1812 | ID string `json:"id"`
1813 | Options struct {
1814 | } `json:"options"`
1815 | Crawler string `json:"crawler"`
1816 | } `json:"_shodan,omitempty"`
1817 | Shodan47 struct {
1818 | Region string `json:"region"`
1819 | Ptr bool `json:"ptr"`
1820 | Module string `json:"module"`
1821 | ID string `json:"id"`
1822 | Options struct {
1823 | Referrer string `json:"referrer"`
1824 | Hostname string `json:"hostname"`
1825 | Scan string `json:"scan"`
1826 | } `json:"options"`
1827 | Crawler string `json:"crawler"`
1828 | } `json:"_shodan,omitempty"`
1829 | Shodan48 struct {
1830 | Region string `json:"region"`
1831 | Ptr bool `json:"ptr"`
1832 | Module string `json:"module"`
1833 | ID string `json:"id"`
1834 | Options struct {
1835 | } `json:"options"`
1836 | Crawler string `json:"crawler"`
1837 | } `json:"_shodan,omitempty"`
1838 | Shodan49 struct {
1839 | Region string `json:"region"`
1840 | Ptr bool `json:"ptr"`
1841 | Module string `json:"module"`
1842 | ID string `json:"id"`
1843 | Options struct {
1844 | } `json:"options"`
1845 | Crawler string `json:"crawler"`
1846 | } `json:"_shodan,omitempty"`
1847 | HTTP23 struct {
1848 | Status int `json:"status"`
1849 | RobotsHash interface{} `json:"robots_hash"`
1850 | Redirects []interface{} `json:"redirects"`
1851 | Securitytxt interface{} `json:"securitytxt"`
1852 | Title interface{} `json:"title"`
1853 | SitemapHash interface{} `json:"sitemap_hash"`
1854 | Robots interface{} `json:"robots"`
1855 | Server string `json:"server"`
1856 | HeadersHash int `json:"headers_hash"`
1857 | Host string `json:"host"`
1858 | HTML string `json:"html"`
1859 | Location string `json:"location"`
1860 | HTMLHash int `json:"html_hash"`
1861 | Sitemap interface{} `json:"sitemap"`
1862 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
1863 | } `json:"http,omitempty"`
1864 | Shodan50 struct {
1865 | Region string `json:"region"`
1866 | Ptr bool `json:"ptr"`
1867 | Module string `json:"module"`
1868 | ID string `json:"id"`
1869 | Options struct {
1870 | } `json:"options"`
1871 | Crawler string `json:"crawler"`
1872 | } `json:"_shodan,omitempty"`
1873 | Vulns struct {
1874 | CVE20198943 struct {
1875 | Verified bool `json:"verified"`
1876 | References []string `json:"references"`
1877 | Cvss float64 `json:"cvss"`
1878 | Summary string `json:"summary"`
1879 | } `json:"CVE-2019-8943"`
1880 | CVE202028039 struct {
1881 | Verified bool `json:"verified"`
1882 | References []string `json:"references"`
1883 | Cvss float64 `json:"cvss"`
1884 | Summary string `json:"summary"`
1885 | } `json:"CVE-2020-28039"`
1886 | CVE202028038 struct {
1887 | Verified bool `json:"verified"`
1888 | References []string `json:"references"`
1889 | Cvss float64 `json:"cvss"`
1890 | Summary string `json:"summary"`
1891 | } `json:"CVE-2020-28038"`
1892 | CVE202036326 struct {
1893 | Verified bool `json:"verified"`
1894 | References []string `json:"references"`
1895 | Cvss float64 `json:"cvss"`
1896 | Summary string `json:"summary"`
1897 | } `json:"CVE-2020-36326"`
1898 | CVE201917673 struct {
1899 | Verified bool `json:"verified"`
1900 | References []string `json:"references"`
1901 | Cvss float64 `json:"cvss"`
1902 | Summary string `json:"summary"`
1903 | } `json:"CVE-2019-17673"`
1904 | CVE201917672 struct {
1905 | Verified bool `json:"verified"`
1906 | References []string `json:"references"`
1907 | Cvss float64 `json:"cvss"`
1908 | Summary string `json:"summary"`
1909 | } `json:"CVE-2019-17672"`
1910 | CVE201917671 struct {
1911 | Verified bool `json:"verified"`
1912 | References []string `json:"references"`
1913 | Cvss float64 `json:"cvss"`
1914 | Summary string `json:"summary"`
1915 | } `json:"CVE-2019-17671"`
1916 | CVE20181000773 struct {
1917 | Verified bool `json:"verified"`
1918 | References []string `json:"references"`
1919 | Cvss float64 `json:"cvss"`
1920 | Summary string `json:"summary"`
1921 | } `json:"CVE-2018-1000773"`
1922 | CVE202028037 struct {
1923 | Verified bool `json:"verified"`
1924 | References []string `json:"references"`
1925 | Cvss float64 `json:"cvss"`
1926 | Summary string `json:"summary"`
1927 | } `json:"CVE-2020-28037"`
1928 | CVE202028036 struct {
1929 | Verified bool `json:"verified"`
1930 | References []string `json:"references"`
1931 | Cvss float64 `json:"cvss"`
1932 | Summary string `json:"summary"`
1933 | } `json:"CVE-2020-28036"`
1934 | CVE201917675 struct {
1935 | Verified bool `json:"verified"`
1936 | References []string `json:"references"`
1937 | Cvss float64 `json:"cvss"`
1938 | Summary string `json:"summary"`
1939 | } `json:"CVE-2019-17675"`
1940 | CVE201917674 struct {
1941 | Verified bool `json:"verified"`
1942 | References []string `json:"references"`
1943 | Cvss float64 `json:"cvss"`
1944 | Summary string `json:"summary"`
1945 | } `json:"CVE-2019-17674"`
1946 | CVE201819296 struct {
1947 | Verified bool `json:"verified"`
1948 | References []string `json:"references"`
1949 | Cvss float64 `json:"cvss"`
1950 | Summary string `json:"summary"`
1951 | } `json:"CVE-2018-19296"`
1952 | CVE20199787 struct {
1953 | Verified bool `json:"verified"`
1954 | References []string `json:"references"`
1955 | Cvss float64 `json:"cvss"`
1956 | Summary string `json:"summary"`
1957 | } `json:"CVE-2019-9787"`
1958 | CVE20198942 struct {
1959 | Verified bool `json:"verified"`
1960 | References []string `json:"references"`
1961 | Cvss float64 `json:"cvss"`
1962 | Summary string `json:"summary"`
1963 | } `json:"CVE-2019-8942"`
1964 | CVE201820152 struct {
1965 | Verified bool `json:"verified"`
1966 | References []string `json:"references"`
1967 | Cvss float64 `json:"cvss"`
1968 | Summary string `json:"summary"`
1969 | } `json:"CVE-2018-20152"`
1970 | CVE201917669 struct {
1971 | Verified bool `json:"verified"`
1972 | References []string `json:"references"`
1973 | Cvss float64 `json:"cvss"`
1974 | Summary string `json:"summary"`
1975 | } `json:"CVE-2019-17669"`
1976 | CVE201812895 struct {
1977 | Verified bool `json:"verified"`
1978 | References []string `json:"references"`
1979 | Cvss float64 `json:"cvss"`
1980 | Summary string `json:"summary"`
1981 | } `json:"CVE-2018-12895"`
1982 | CVE20204050 struct {
1983 | Verified bool `json:"verified"`
1984 | References []string `json:"references"`
1985 | Cvss float64 `json:"cvss"`
1986 | Summary string `json:"summary"`
1987 | } `json:"CVE-2020-4050"`
1988 | CVE202144223 struct {
1989 | Verified bool `json:"verified"`
1990 | References []string `json:"references"`
1991 | Cvss float64 `json:"cvss"`
1992 | Summary string `json:"summary"`
1993 | } `json:"CVE-2021-44223"`
1994 | CVE202028033 struct {
1995 | Verified bool `json:"verified"`
1996 | References []string `json:"references"`
1997 | Cvss float64 `json:"cvss"`
1998 | Summary string `json:"summary"`
1999 | } `json:"CVE-2020-28033"`
2000 | CVE202011028 struct {
2001 | Verified bool `json:"verified"`
2002 | References []string `json:"references"`
2003 | Cvss float64 `json:"cvss"`
2004 | Summary string `json:"summary"`
2005 | } `json:"CVE-2020-11028"`
2006 | CVE202011029 struct {
2007 | Verified bool `json:"verified"`
2008 | References []string `json:"references"`
2009 | Cvss float64 `json:"cvss"`
2010 | Summary string `json:"summary"`
2011 | } `json:"CVE-2020-11029"`
2012 | CVE201916218 struct {
2013 | Verified bool `json:"verified"`
2014 | References []string `json:"references"`
2015 | Cvss float64 `json:"cvss"`
2016 | Summary string `json:"summary"`
2017 | } `json:"CVE-2019-16218"`
2018 | CVE201916219 struct {
2019 | Verified bool `json:"verified"`
2020 | References []string `json:"references"`
2021 | Cvss float64 `json:"cvss"`
2022 | Summary string `json:"summary"`
2023 | } `json:"CVE-2019-16219"`
2024 | CVE201820151 struct {
2025 | Verified bool `json:"verified"`
2026 | References []string `json:"references"`
2027 | Cvss float64 `json:"cvss"`
2028 | Summary string `json:"summary"`
2029 | } `json:"CVE-2018-20151"`
2030 | CVE202011025 struct {
2031 | Verified bool `json:"verified"`
2032 | References []string `json:"references"`
2033 | Cvss float64 `json:"cvss"`
2034 | Summary string `json:"summary"`
2035 | } `json:"CVE-2020-11025"`
2036 | CVE202011026 struct {
2037 | Verified bool `json:"verified"`
2038 | References []string `json:"references"`
2039 | Cvss float64 `json:"cvss"`
2040 | Summary string `json:"summary"`
2041 | } `json:"CVE-2020-11026"`
2042 | CVE202011027 struct {
2043 | Verified bool `json:"verified"`
2044 | References []string `json:"references"`
2045 | Cvss float64 `json:"cvss"`
2046 | Summary string `json:"summary"`
2047 | } `json:"CVE-2020-11027"`
2048 | CVE201920043 struct {
2049 | Verified bool `json:"verified"`
2050 | References []string `json:"references"`
2051 | Cvss float64 `json:"cvss"`
2052 | Summary string `json:"summary"`
2053 | } `json:"CVE-2019-20043"`
2054 | CVE201917670 struct {
2055 | Verified bool `json:"verified"`
2056 | References []string `json:"references"`
2057 | Cvss float64 `json:"cvss"`
2058 | Summary string `json:"summary"`
2059 | } `json:"CVE-2019-17670"`
2060 | CVE201810101 struct {
2061 | Verified bool `json:"verified"`
2062 | References []string `json:"references"`
2063 | Cvss float64 `json:"cvss"`
2064 | Summary string `json:"summary"`
2065 | } `json:"CVE-2018-10101"`
2066 | CVE201810100 struct {
2067 | Verified bool `json:"verified"`
2068 | References []string `json:"references"`
2069 | Cvss float64 `json:"cvss"`
2070 | Summary string `json:"summary"`
2071 | } `json:"CVE-2018-10100"`
2072 | CVE201920042 struct {
2073 | Verified bool `json:"verified"`
2074 | References []string `json:"references"`
2075 | Cvss float64 `json:"cvss"`
2076 | Summary string `json:"summary"`
2077 | } `json:"CVE-2019-20042"`
2078 | CVE201810102 struct {
2079 | Verified bool `json:"verified"`
2080 | References []string `json:"references"`
2081 | Cvss float64 `json:"cvss"`
2082 | Summary string `json:"summary"`
2083 | } `json:"CVE-2018-10102"`
2084 | CVE201717094 struct {
2085 | Verified bool `json:"verified"`
2086 | References []string `json:"references"`
2087 | Cvss float64 `json:"cvss"`
2088 | Summary string `json:"summary"`
2089 | } `json:"CVE-2017-17094"`
2090 | CVE201920041 struct {
2091 | Verified bool `json:"verified"`
2092 | References []string `json:"references"`
2093 | Cvss float64 `json:"cvss"`
2094 | Summary string `json:"summary"`
2095 | } `json:"CVE-2019-20041"`
2096 | CVE201717091 struct {
2097 | Verified bool `json:"verified"`
2098 | References []string `json:"references"`
2099 | Cvss float64 `json:"cvss"`
2100 | Summary string `json:"summary"`
2101 | } `json:"CVE-2017-17091"`
2102 | CVE201717093 struct {
2103 | Verified bool `json:"verified"`
2104 | References []string `json:"references"`
2105 | Cvss float64 `json:"cvss"`
2106 | Summary string `json:"summary"`
2107 | } `json:"CVE-2017-17093"`
2108 | CVE201717092 struct {
2109 | Verified bool `json:"verified"`
2110 | References []string `json:"references"`
2111 | Cvss float64 `json:"cvss"`
2112 | Summary string `json:"summary"`
2113 | } `json:"CVE-2017-17092"`
2114 | CVE202025286 struct {
2115 | Verified bool `json:"verified"`
2116 | References []string `json:"references"`
2117 | Cvss float64 `json:"cvss"`
2118 | Summary string `json:"summary"`
2119 | } `json:"CVE-2020-25286"`
2120 | CVE202028035 struct {
2121 | Verified bool `json:"verified"`
2122 | References []string `json:"references"`
2123 | Cvss float64 `json:"cvss"`
2124 | Summary string `json:"summary"`
2125 | } `json:"CVE-2020-28035"`
2126 | CVE201916217 struct {
2127 | Verified bool `json:"verified"`
2128 | References []string `json:"references"`
2129 | Cvss float64 `json:"cvss"`
2130 | Summary string `json:"summary"`
2131 | } `json:"CVE-2019-16217"`
2132 | CVE202221663 struct {
2133 | Verified bool `json:"verified"`
2134 | References []string `json:"references"`
2135 | Cvss float64 `json:"cvss"`
2136 | Summary string `json:"summary"`
2137 | } `json:"CVE-2022-21663"`
2138 | CVE202221662 struct {
2139 | Verified bool `json:"verified"`
2140 | References []string `json:"references"`
2141 | Cvss float64 `json:"cvss"`
2142 | Summary string `json:"summary"`
2143 | } `json:"CVE-2022-21662"`
2144 | CVE202221661 struct {
2145 | Verified bool `json:"verified"`
2146 | References []string `json:"references"`
2147 | Cvss float64 `json:"cvss"`
2148 | Summary string `json:"summary"`
2149 | } `json:"CVE-2022-21661"`
2150 | CVE202028034 struct {
2151 | Verified bool `json:"verified"`
2152 | References []string `json:"references"`
2153 | Cvss float64 `json:"cvss"`
2154 | Summary string `json:"summary"`
2155 | } `json:"CVE-2020-28034"`
2156 | CVE201820150 struct {
2157 | Verified bool `json:"verified"`
2158 | References []string `json:"references"`
2159 | Cvss float64 `json:"cvss"`
2160 | Summary string `json:"summary"`
2161 | } `json:"CVE-2018-20150"`
2162 | CVE202028040 struct {
2163 | Verified bool `json:"verified"`
2164 | References []string `json:"references"`
2165 | Cvss float64 `json:"cvss"`
2166 | Summary string `json:"summary"`
2167 | } `json:"CVE-2020-28040"`
2168 | CVE202221664 struct {
2169 | Verified bool `json:"verified"`
2170 | References []string `json:"references"`
2171 | Cvss float64 `json:"cvss"`
2172 | Summary string `json:"summary"`
2173 | } `json:"CVE-2022-21664"`
2174 | CVE202011030 struct {
2175 | Verified bool `json:"verified"`
2176 | References []string `json:"references"`
2177 | Cvss float64 `json:"cvss"`
2178 | Summary string `json:"summary"`
2179 | } `json:"CVE-2020-11030"`
2180 | CVE202028032 struct {
2181 | Verified bool `json:"verified"`
2182 | References []string `json:"references"`
2183 | Cvss float64 `json:"cvss"`
2184 | Summary string `json:"summary"`
2185 | } `json:"CVE-2020-28032"`
2186 | CVE20204049 struct {
2187 | Verified bool `json:"verified"`
2188 | References []string `json:"references"`
2189 | Cvss float64 `json:"cvss"`
2190 | Summary string `json:"summary"`
2191 | } `json:"CVE-2020-4049"`
2192 | CVE20204048 struct {
2193 | Verified bool `json:"verified"`
2194 | References []string `json:"references"`
2195 | Cvss float64 `json:"cvss"`
2196 | Summary string `json:"summary"`
2197 | } `json:"CVE-2020-4048"`
2198 | CVE20204047 struct {
2199 | Verified bool `json:"verified"`
2200 | References []string `json:"references"`
2201 | Cvss float64 `json:"cvss"`
2202 | Summary string `json:"summary"`
2203 | } `json:"CVE-2020-4047"`
2204 | CVE20204046 struct {
2205 | Verified bool `json:"verified"`
2206 | References []string `json:"references"`
2207 | Cvss float64 `json:"cvss"`
2208 | Summary string `json:"summary"`
2209 | } `json:"CVE-2020-4046"`
2210 | CVE201820148 struct {
2211 | Verified bool `json:"verified"`
2212 | References []string `json:"references"`
2213 | Cvss float64 `json:"cvss"`
2214 | Summary string `json:"summary"`
2215 | } `json:"CVE-2018-20148"`
2216 | CVE201820149 struct {
2217 | Verified bool `json:"verified"`
2218 | References []string `json:"references"`
2219 | Cvss float64 `json:"cvss"`
2220 | Summary string `json:"summary"`
2221 | } `json:"CVE-2018-20149"`
2222 | CVE201916223 struct {
2223 | Verified bool `json:"verified"`
2224 | References []string `json:"references"`
2225 | Cvss float64 `json:"cvss"`
2226 | Summary string `json:"summary"`
2227 | } `json:"CVE-2019-16223"`
2228 | CVE201916222 struct {
2229 | Verified bool `json:"verified"`
2230 | References []string `json:"references"`
2231 | Cvss float64 `json:"cvss"`
2232 | Summary string `json:"summary"`
2233 | } `json:"CVE-2019-16222"`
2234 | CVE201916221 struct {
2235 | Verified bool `json:"verified"`
2236 | References []string `json:"references"`
2237 | Cvss float64 `json:"cvss"`
2238 | Summary string `json:"summary"`
2239 | } `json:"CVE-2019-16221"`
2240 | CVE201916220 struct {
2241 | Verified bool `json:"verified"`
2242 | References []string `json:"references"`
2243 | Cvss float64 `json:"cvss"`
2244 | Summary string `json:"summary"`
2245 | } `json:"CVE-2019-16220"`
2246 | CVE201916780 struct {
2247 | Verified bool `json:"verified"`
2248 | References []string `json:"references"`
2249 | Cvss float64 `json:"cvss"`
2250 | Summary string `json:"summary"`
2251 | } `json:"CVE-2019-16780"`
2252 | CVE201916781 struct {
2253 | Verified bool `json:"verified"`
2254 | References []string `json:"references"`
2255 | Cvss float64 `json:"cvss"`
2256 | Summary string `json:"summary"`
2257 | } `json:"CVE-2019-16781"`
2258 | CVE20171000600 struct {
2259 | Verified bool `json:"verified"`
2260 | References []string `json:"references"`
2261 | Cvss float64 `json:"cvss"`
2262 | Summary string `json:"summary"`
2263 | } `json:"CVE-2017-1000600"`
2264 | CVE201820147 struct {
2265 | Verified bool `json:"verified"`
2266 | References []string `json:"references"`
2267 | Cvss float64 `json:"cvss"`
2268 | Summary string `json:"summary"`
2269 | } `json:"CVE-2018-20147"`
2270 | CVE201820153 struct {
2271 | Verified bool `json:"verified"`
2272 | References []string `json:"references"`
2273 | Cvss float64 `json:"cvss"`
2274 | Summary string `json:"summary"`
2275 | } `json:"CVE-2018-20153"`
2276 | CVE202129450 struct {
2277 | Verified bool `json:"verified"`
2278 | References []string `json:"references"`
2279 | Cvss float64 `json:"cvss"`
2280 | Summary string `json:"summary"`
2281 | } `json:"CVE-2021-29450"`
2282 | } `json:"vulns,omitempty"`
2283 | HTTP24 struct {
2284 | Status int `json:"status"`
2285 | RobotsHash interface{} `json:"robots_hash"`
2286 | Redirects []interface{} `json:"redirects"`
2287 | Securitytxt interface{} `json:"securitytxt"`
2288 | Title string `json:"title"`
2289 | SitemapHash interface{} `json:"sitemap_hash"`
2290 | HTMLHash int `json:"html_hash"`
2291 | Robots interface{} `json:"robots"`
2292 | Favicon struct {
2293 | Hash int `json:"hash"`
2294 | Data string `json:"data"`
2295 | Location string `json:"location"`
2296 | } `json:"favicon"`
2297 | HeadersHash int `json:"headers_hash"`
2298 | Host string `json:"host"`
2299 | HTML string `json:"html"`
2300 | Location string `json:"location"`
2301 | Components struct {
2302 | JQuery struct {
2303 | Categories []string `json:"categories"`
2304 | } `json:"jQuery"`
2305 | AllInOneSEOPack struct {
2306 | Categories []string `json:"categories"`
2307 | } `json:"All in One SEO Pack"`
2308 | SWFObject struct {
2309 | Categories []string `json:"categories"`
2310 | } `json:"SWFObject"`
2311 | Twitter struct {
2312 | Categories []string `json:"categories"`
2313 | } `json:"Twitter"`
2314 | JQueryMigrate struct {
2315 | Categories []string `json:"categories"`
2316 | } `json:"jQuery Migrate"`
2317 | YouTube struct {
2318 | Categories []string `json:"categories"`
2319 | } `json:"YouTube"`
2320 | WordPress struct {
2321 | Categories []string `json:"categories"`
2322 | } `json:"WordPress"`
2323 | MySQL struct {
2324 | Categories []string `json:"categories"`
2325 | } `json:"MySQL"`
2326 | Php struct {
2327 | Categories []string `json:"categories"`
2328 | } `json:"PHP"`
2329 | } `json:"components"`
2330 | Server string `json:"server"`
2331 | Sitemap interface{} `json:"sitemap"`
2332 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
2333 | } `json:"http,omitempty"`
2334 | Shodan51 struct {
2335 | Region string `json:"region"`
2336 | Ptr bool `json:"ptr"`
2337 | Module string `json:"module"`
2338 | ID string `json:"id"`
2339 | Options struct {
2340 | Hostname string `json:"hostname"`
2341 | Scan string `json:"scan"`
2342 | } `json:"options"`
2343 | Crawler string `json:"crawler"`
2344 | } `json:"_shodan,omitempty"`
2345 | Shodan52 struct {
2346 | Region string `json:"region"`
2347 | Ptr bool `json:"ptr"`
2348 | Module string `json:"module"`
2349 | ID string `json:"id"`
2350 | Options struct {
2351 | } `json:"options"`
2352 | Crawler string `json:"crawler"`
2353 | } `json:"_shodan,omitempty"`
2354 | Vulns0 struct {
2355 | CVE202231626 struct {
2356 | Verified bool `json:"verified"`
2357 | References []string `json:"references"`
2358 | Cvss float64 `json:"cvss"`
2359 | Summary string `json:"summary"`
2360 | } `json:"CVE-2022-31626"`
2361 | CVE202231625 struct {
2362 | Verified bool `json:"verified"`
2363 | References []string `json:"references"`
2364 | Cvss float64 `json:"cvss"`
2365 | Summary string `json:"summary"`
2366 | } `json:"CVE-2022-31625"`
2367 | CVE202121707 struct {
2368 | Verified bool `json:"verified"`
2369 | References []string `json:"references"`
2370 | Cvss float64 `json:"cvss"`
2371 | Summary string `json:"summary"`
2372 | } `json:"CVE-2021-21707"`
2373 | CVE202121706 struct {
2374 | Verified bool `json:"verified"`
2375 | References []string `json:"references"`
2376 | Cvss float64 `json:"cvss"`
2377 | Summary string `json:"summary"`
2378 | } `json:"CVE-2021-21706"`
2379 | CVE202121705 struct {
2380 | Verified bool `json:"verified"`
2381 | References []string `json:"references"`
2382 | Cvss float64 `json:"cvss"`
2383 | Summary string `json:"summary"`
2384 | } `json:"CVE-2021-21705"`
2385 | CVE202121704 struct {
2386 | Verified bool `json:"verified"`
2387 | References []string `json:"references"`
2388 | Cvss float64 `json:"cvss"`
2389 | Summary string `json:"summary"`
2390 | } `json:"CVE-2021-21704"`
2391 | CVE202121703 struct {
2392 | Verified bool `json:"verified"`
2393 | References []string `json:"references"`
2394 | Cvss float64 `json:"cvss"`
2395 | Summary string `json:"summary"`
2396 | } `json:"CVE-2021-21703"`
2397 | CVE202121708 struct {
2398 | Verified bool `json:"verified"`
2399 | References []string `json:"references"`
2400 | Cvss float64 `json:"cvss"`
2401 | Summary string `json:"summary"`
2402 | } `json:"CVE-2021-21708"`
2403 | } `json:"vulns,omitempty"`
2404 | HTTP25 struct {
2405 | Status int `json:"status"`
2406 | RobotsHash interface{} `json:"robots_hash"`
2407 | Redirects []interface{} `json:"redirects"`
2408 | Securitytxt interface{} `json:"securitytxt"`
2409 | Title string `json:"title"`
2410 | SitemapHash interface{} `json:"sitemap_hash"`
2411 | HTMLHash int `json:"html_hash"`
2412 | Robots interface{} `json:"robots"`
2413 | Favicon struct {
2414 | Hash int `json:"hash"`
2415 | Data string `json:"data"`
2416 | Location string `json:"location"`
2417 | } `json:"favicon"`
2418 | HeadersHash int `json:"headers_hash"`
2419 | Host string `json:"host"`
2420 | HTML string `json:"html"`
2421 | Location string `json:"location"`
2422 | Components struct {
2423 | } `json:"components"`
2424 | Server string `json:"server"`
2425 | Sitemap interface{} `json:"sitemap"`
2426 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
2427 | } `json:"http,omitempty"`
2428 | HTTP26 struct {
2429 | Status int `json:"status"`
2430 | RobotsHash interface{} `json:"robots_hash"`
2431 | Redirects []interface{} `json:"redirects"`
2432 | Securitytxt interface{} `json:"securitytxt"`
2433 | Title string `json:"title"`
2434 | SitemapHash interface{} `json:"sitemap_hash"`
2435 | HTMLHash int `json:"html_hash"`
2436 | Robots interface{} `json:"robots"`
2437 | Favicon struct {
2438 | Hash int `json:"hash"`
2439 | Data string `json:"data"`
2440 | Location string `json:"location"`
2441 | } `json:"favicon"`
2442 | HeadersHash int `json:"headers_hash"`
2443 | Host string `json:"host"`
2444 | HTML string `json:"html"`
2445 | Location string `json:"location"`
2446 | Components struct {
2447 | } `json:"components"`
2448 | Server string `json:"server"`
2449 | Sitemap interface{} `json:"sitemap"`
2450 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
2451 | } `json:"http,omitempty"`
2452 | Shodan53 struct {
2453 | Region string `json:"region"`
2454 | Ptr bool `json:"ptr"`
2455 | Module string `json:"module"`
2456 | ID string `json:"id"`
2457 | Options struct {
2458 | } `json:"options"`
2459 | Crawler string `json:"crawler"`
2460 | } `json:"_shodan,omitempty"`
2461 | Shodan54 struct {
2462 | Region string `json:"region"`
2463 | Ptr bool `json:"ptr"`
2464 | Module string `json:"module"`
2465 | ID string `json:"id"`
2466 | Options struct {
2467 | } `json:"options"`
2468 | Crawler string `json:"crawler"`
2469 | } `json:"_shodan,omitempty"`
2470 | Shodan55 struct {
2471 | Region string `json:"region"`
2472 | Ptr bool `json:"ptr"`
2473 | Module string `json:"module"`
2474 | ID string `json:"id"`
2475 | Options struct {
2476 | } `json:"options"`
2477 | Crawler string `json:"crawler"`
2478 | } `json:"_shodan,omitempty"`
2479 | Shodan56 struct {
2480 | Region string `json:"region"`
2481 | Ptr bool `json:"ptr"`
2482 | Module string `json:"module"`
2483 | ID string `json:"id"`
2484 | Options struct {
2485 | } `json:"options"`
2486 | Crawler string `json:"crawler"`
2487 | } `json:"_shodan,omitempty"`
2488 | Shodan57 struct {
2489 | Region string `json:"region"`
2490 | Ptr bool `json:"ptr"`
2491 | Module string `json:"module"`
2492 | ID string `json:"id"`
2493 | Options struct {
2494 | } `json:"options"`
2495 | Crawler string `json:"crawler"`
2496 | } `json:"_shodan,omitempty"`
2497 | HTTP27 struct {
2498 | Status int `json:"status"`
2499 | RobotsHash interface{} `json:"robots_hash"`
2500 | Redirects []interface{} `json:"redirects"`
2501 | Securitytxt interface{} `json:"securitytxt"`
2502 | Title string `json:"title"`
2503 | SitemapHash interface{} `json:"sitemap_hash"`
2504 | HTMLHash int `json:"html_hash"`
2505 | Robots interface{} `json:"robots"`
2506 | Favicon struct {
2507 | Hash int `json:"hash"`
2508 | Data string `json:"data"`
2509 | Location string `json:"location"`
2510 | } `json:"favicon"`
2511 | HeadersHash int `json:"headers_hash"`
2512 | Host string `json:"host"`
2513 | HTML string `json:"html"`
2514 | Location string `json:"location"`
2515 | Components struct {
2516 | } `json:"components"`
2517 | Server string `json:"server"`
2518 | Sitemap interface{} `json:"sitemap"`
2519 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
2520 | } `json:"http,omitempty"`
2521 | Shodan58 struct {
2522 | Region string `json:"region"`
2523 | Ptr bool `json:"ptr"`
2524 | Module string `json:"module"`
2525 | ID string `json:"id"`
2526 | Options struct {
2527 | } `json:"options"`
2528 | Crawler string `json:"crawler"`
2529 | } `json:"_shodan,omitempty"`
2530 | Shodan59 struct {
2531 | Region string `json:"region"`
2532 | Ptr bool `json:"ptr"`
2533 | Module string `json:"module"`
2534 | ID string `json:"id"`
2535 | Options struct {
2536 | } `json:"options"`
2537 | Crawler string `json:"crawler"`
2538 | } `json:"_shodan,omitempty"`
2539 | Shodan60 struct {
2540 | Region string `json:"region"`
2541 | Ptr bool `json:"ptr"`
2542 | Module string `json:"module"`
2543 | ID string `json:"id"`
2544 | Options struct {
2545 | Hostname string `json:"hostname"`
2546 | Scan string `json:"scan"`
2547 | } `json:"options"`
2548 | Crawler string `json:"crawler"`
2549 | } `json:"_shodan,omitempty"`
2550 | HTTP28 struct {
2551 | Status int `json:"status"`
2552 | RobotsHash interface{} `json:"robots_hash"`
2553 | Redirects []interface{} `json:"redirects"`
2554 | Securitytxt interface{} `json:"securitytxt"`
2555 | Title string `json:"title"`
2556 | SitemapHash interface{} `json:"sitemap_hash"`
2557 | HTMLHash int `json:"html_hash"`
2558 | Robots interface{} `json:"robots"`
2559 | Favicon struct {
2560 | Hash int `json:"hash"`
2561 | Data string `json:"data"`
2562 | Location string `json:"location"`
2563 | } `json:"favicon"`
2564 | HeadersHash int `json:"headers_hash"`
2565 | Host string `json:"host"`
2566 | HTML string `json:"html"`
2567 | Location string `json:"location"`
2568 | Components struct {
2569 | NodeJs struct {
2570 | Categories []string `json:"categories"`
2571 | } `json:"Node.js"`
2572 | NuxtJs struct {
2573 | Categories []string `json:"categories"`
2574 | } `json:"Nuxt.js"`
2575 | VueJs struct {
2576 | Categories []string `json:"categories"`
2577 | } `json:"Vue.js"`
2578 | } `json:"components"`
2579 | Server string `json:"server"`
2580 | Sitemap interface{} `json:"sitemap"`
2581 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
2582 | } `json:"http,omitempty"`
2583 | HTTP29 struct {
2584 | Status int `json:"status"`
2585 | RobotsHash interface{} `json:"robots_hash"`
2586 | Redirects []interface{} `json:"redirects"`
2587 | Securitytxt interface{} `json:"securitytxt"`
2588 | Title string `json:"title"`
2589 | SitemapHash interface{} `json:"sitemap_hash"`
2590 | HTMLHash int `json:"html_hash"`
2591 | Robots interface{} `json:"robots"`
2592 | Favicon struct {
2593 | Hash int `json:"hash"`
2594 | Data string `json:"data"`
2595 | Location string `json:"location"`
2596 | } `json:"favicon"`
2597 | HeadersHash int `json:"headers_hash"`
2598 | Host string `json:"host"`
2599 | HTML string `json:"html"`
2600 | Location string `json:"location"`
2601 | Components struct {
2602 | } `json:"components"`
2603 | Server string `json:"server"`
2604 | Sitemap interface{} `json:"sitemap"`
2605 | SecuritytxtHash interface{} `json:"securitytxt_hash"`
2606 | } `json:"http,omitempty"`
2607 | Shodan61 struct {
2608 | Region string `json:"region"`
2609 | Ptr bool `json:"ptr"`
2610 | Module string `json:"module"`
2611 | ID string `json:"id"`
2612 | Options struct {
2613 | } `json:"options"`
2614 | Crawler string `json:"crawler"`
2615 | } `json:"_shodan,omitempty"`
2616 | } `json:"matches"`
2617 | Total int `json:"total"`
2618 | }
2619 |
--------------------------------------------------------------------------------
/ones:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # ======================== !! NOTE !! ========================
4 | # ________ ________ ________ ________ ________ ________ ________ ________ ________ ___ ___
5 | # |\ _____\\ _____\\ _____\\ _____\\ _____\\ _____\\ _____\\ _____\\ __ \ |\ \ / /|
6 | # \ \ \__/\ \ \__/\ \ \__/\ \ \__/\ \ \__/\ \ \__/\ \ \__/\ \ \__/\ \ \|\ \ \ \ \/ / /
7 | # \ \ __\\ \ __\\ \ __\\ \ __\\ \ __\\ \ __\\ \ __\\ \ __\\ \ \\\ \ \ \ / /
8 | # \ \ \_| \ \ \_| \ \ \_| \ \ \_| \ \ \_| \ \ \_| \ \ \_| \ \ \_| \ \ \\\ \ / \/
9 | # \ \__\ \ \__\ \ \__\ \ \__\ \ \__\ \ \__\ \ \__\ \ \__\ \ \_______\/ /\ \
10 | # \|__| \|__| \|__| \|__| \|__| \|__| \|__| \|__| \|_______/__/ /\ __\
11 | # |__|/ \|__|
12 |
13 | # ===================== 基础变量设置 =====================
14 |
15 | ones_Version="1.0.0 Dev(Beta1)"
16 |
17 | # ===================== 基础函数 =====================
18 |
19 | Echo_INFOR(){
20 |
21 | echo -e "\033[1;36m$(date +"%H:%M:%S")\033[0m \033[1;32m[INFOR]\033[0m - \033[1;32m$1\033[0m"
22 |
23 | }
24 |
25 | Echo_ALERT(){
26 |
27 | echo -e "\033[1;36m$(date +"%H:%M:%S")\033[0m \033[1;33m[ALERT]\033[0m - \033[1;33m$1\033[0m"
28 |
29 | }
30 |
31 | Echo_ERROR(){
32 |
33 | echo -e "\033[1;36m$(date +"%H:%M:%S")\033[0m \033[1;31m[ERROR]\033[0m - \033[1;31m$1\n\033[0m"
34 |
35 | }
36 |
37 | Echo_ERROR2(){
38 |
39 | Echo_ERROR "$name download failed, please check if the network is reachable, proxychains4 configuration is correct"
40 |
41 | }
42 |
43 | Echo_ERROR3(){
44 |
45 | Echo_ERROR "$name installation failed"
46 |
47 | }
48 |
49 | Install_Switch(){
50 |
51 | case $Linux_Version in
52 | *"CentOS"*|*"RedHat"*|*"Fedora"*|*"AlmaLinux"*|*"VzLinux"*|*"Rocky"*)
53 | yum install -y $1 1> /dev/null 2>> /dev/null && Echo_INFOR "Successfully installed $1 " || Echo_ERROR "$1 installation failed, please check the log /dev/null"
54 | ;;
55 | *"Kali"*|*"Ubuntu"*|*"Debian"*)
56 | apt-get install -y $1 1> /dev/null 2>> /dev/null && Echo_INFOR "Successfully installed $1 " || Echo_ERROR "$1 installation failed, please check the log /dev/null"
57 | ;;
58 | *) ;;
59 | esac
60 |
61 | }
62 |
63 | Install_Switch2(){
64 |
65 | apt-get install -yq --no-install-recommends $1 1> /dev/null 2>> /dev/null && Echo_INFOR "Successfully installed $1 " || Echo_ERROR "$1 installation failed, please check the log /dev/null"
66 |
67 | }
68 |
69 | Install_Switch3(){
70 |
71 | python2 -m pip install $1 > /dev/null 2>&1 && Echo_INFOR "Successfully installed $1 (python2)" || Echo_ERROR "$1 module installation failed, please try changing the pip proxy or check if python2 is installed!"
72 |
73 | }
74 |
75 | Install_Switch4(){
76 |
77 | pip3 install $1 1> /dev/null 2>> /dev/null && Echo_INFOR "Successfully installed $1 (python3)" || Echo_ERROR "$1 module installation failed, please check the log /dev/null"
78 |
79 | }
80 |
81 | Install_Switch5(){
82 |
83 | python3 -m pip install $1 1> /dev/null 2>> /dev/null && Echo_INFOR "Successfully installed $1 (python3)" || Echo_ERROR "$1 module installation failed, please check the log /dev/null"
84 |
85 | }
86 |
87 | print_some(){
88 |
89 | echo -e ""
90 | echo -e "\033[1;36m------------------------------------------------------------------------------------------\033[0m"
91 | echo -e ""
92 |
93 | }
94 |
95 | # ===================== 检查模块 =====================
96 |
97 | check_null(){
98 |
99 | if [ $1 == ] 2>> /dev/null
100 | then
101 | Echo_ERROR "输入不可为空"
102 | exit 1
103 | fi
104 |
105 | }
106 |
107 | check_conf(){
108 |
109 | if test -e /root/ones.conf
110 | then
111 | sleep 0.001
112 | else
113 | Echo_ERROR "请创建 ones.conf 配置文件,并运行 -init 初始化环境"
114 | exit 1
115 | fi
116 |
117 | }
118 |
119 | # ===================== KEY设置 =====================
120 |
121 | init_key1(){
122 |
123 | identify_fofa_email=`cat /root/ones.conf | jq .fofa_email | uniq | tr -d "\""`
124 | identify_fofa_key=`cat /root/ones.conf | jq .fofa_key | uniq | tr -d "\""`
125 | identify_chaos=`cat /root/ones.conf | jq .chaos_key | uniq | tr -d "\""`
126 | identify_shodan_key=`cat /root/ones.conf | jq .shodan_key | uniq | tr -d "\""`
127 | identify_quake_key=`cat /root/ones.conf | jq .quake_key | uniq | tr -d "\""`
128 | identify_zoom_key=`cat /root/ones.conf | jq .zoom_key | uniq | tr -d "\""`
129 | identify_hunter_key=`cat /root/ones.conf | jq .hunter_key | uniq | tr -d "\""`
130 |
131 | }
132 |
133 | Banner(){
134 |
135 | # https://www.bootschool.net/ascii starwars 字体
136 | echo -e "\033[1;34m ______ __ __ _______ _______ \033[0m"
137 | echo -e "\033[1;32m / __ \ | \ | | | ____| / | \033[0m"
138 | echo -e "\033[1;36m | | | | | \| | | |__ | (---- \033[0m"
139 | echo -e "\033[1;31m | | | | | | | __| \ \ \033[0m"
140 | echo -e "\033[1;35m | -- | | |\ | | |____ ---) | \033[0m"
141 | echo -e "\033[1;33m \______/ |__| \__| |_______||_______/ \n\033[0m"
142 |
143 | }
144 |
145 | osint_fofa(){
146 |
147 | FOFA_STRING="$1"
148 |
149 | if [ $2 == ] 2>> /dev/null
150 | then
151 | FOFA_SIZE="50"
152 | else
153 | FOFA_SIZE=$2
154 | fi
155 |
156 | echo -e "\033[1;33m\n>> 调用 Fofa 接口\n\033[0m"
157 | Echo_INFOR "搜索语法 : ${FOFA_STRING}" && echo -e ""
158 |
159 | ( printf "$FOFA_STRING" | base64 -w 0 ) > fofa_tmp
160 |
161 | FOFA_TEMP=$( fofa.json )
165 | cat fofa.json | jq '.results[]' > fofa.txt.bak
166 | cat fofa.txt.bak | sed 's/\"//g' > fofa.txt && rm -rf fofa.txt.bak
167 | rm -rf fofa_tmp
168 | Echo_INFOR "结果导出 (json): fofa.json"
169 | Echo_INFOR "结果输出 (txt) : fofa.txt 总数 $(wc -l fofa.txt | awk '{print $1}')"
170 |
171 | }
172 |
173 | osint_zoomeye(){
174 |
175 | ZOOM_STRING="$1"
176 |
177 | if [ $2 == ] 2>> /dev/null
178 | then
179 | ZOOM_SIZE="20"
180 | else
181 | ZOOM_SIZE=$2
182 | fi
183 |
184 | echo -e "\033[1;33m\n>> 调用 zoomeye 接口\n\033[0m"
185 | Echo_INFOR "搜索语法 : ${ZOOM_STRING}"
186 |
187 | # https://github.com/knownsec/ZoomEye-python
188 | Echo_INFOR "当前 zoomeye API 剩余额度如下 :"
189 | zoomeye info
190 | echo -e ""
191 | ( zoomeye search "${ZOOM_STRING}" -num ${ZOOM_SIZE} | awk '{print $1}' ) > zoomeye.txt
192 |
193 | cat zoomeye.txt | sed 's/ip\:port//g' > zoomeye.txt.bak && rm -rf zoomeye.txt
194 | cat zoomeye.txt.bak | sed 's/total\://g' > zoomeye.txt && rm -rf zoomeye.txt.bak
195 |
196 | Echo_INFOR "命令结果输出 : zoomeye.txt 总数 $(wc -l zoomeye.txt | awk '{print $1}')"
197 |
198 | }
199 |
200 | osint_shodan(){
201 |
202 | shodan_STRING="$1"
203 |
204 | if [ $2 == ] 2>> /dev/null
205 | then
206 | shodan_SIZE="50"
207 | else
208 | shodan_SIZE=$2
209 | fi
210 |
211 | echo -e "\033[1;33m\n>> 调用 shodan 接口\n\033[0m"
212 | Echo_INFOR "搜索语法 : ${shodan_STRING}"
213 |
214 | # https://account.shodan.io/
215 | # https://developer.shodan.io/dashboard
216 | # https://developer.shodan.io/api
217 | Echo_INFOR "当前 shodan API 剩余额度如下 :"
218 | curl -X GET "https://api.shodan.io/api-info?key=${identify_shodan_key}"
219 | echo -e "\n"
220 | shodan search --fields ip_str,port {$shodan_STRING} --limit ${shodan_SIZE} --no-color --separator ":" > shodan_demo.txt
221 |
222 | cat shodan_demo.txt | sed s'/.$//' > shodan.txt && rm -rf shodan_demo.txt
223 |
224 | Echo_INFOR "命令结果输出 : shodan.txt 总数 $(wc -l shodan.txt | awk '{print $1}')"
225 |
226 | }
227 |
228 | osint_quake(){
229 |
230 | quake_STRING="$1"
231 |
232 | if [ $2 == ] 2>> /dev/null
233 | then
234 | quake_SIZE="50"
235 | else
236 | quake_SIZE=$2
237 | fi
238 |
239 | echo -e "\033[1;33m\n>> 调用 quake 接口\n\033[0m"
240 | Echo_INFOR "搜索语法 : ${quake_STRING}"
241 |
242 | # https://quake.360.cn/quake/#/personal?tab=file
243 | # https://quake.360.cn/quake/#/help
244 | Echo_INFOR "当前 quake API 剩余额度如下 :"
245 | curl -X GET "https://quake.360.cn/api/v3/user/info" -H "X-QuakeToken: ${identify_quake_key}" --silent > quake_api.json
246 | echo -e "月度积分 : $(cat quake_api.json | jq .data.credit)"
247 | echo -e "长效积分 : $(cat quake_api.json | jq .data.persistent_credit)\n"
248 |
249 | rm -rf quake_api.json
250 | curl -X POST -H "X-QuakeToken: ${identify_quake_key}" -H "Content-Type: application/json" https://quake.360.cn/api/v3/search/quake_service -d "{
251 | \"query\": \"${quake_STRING}\",
252 | \"start\": 0,
253 | \"size\": \"${quake_SIZE}\",
254 | \"latest\": \"true\",
255 | \"include\": [\"ip\",\"port\"]
256 | }" --silent > quake.json
257 |
258 | cat quake.json | jq '.data[]' | jq '.ip+":"+(.port|tostring)' > quake.txt.bak
259 | cat quake.txt.bak | sed 's/\"//g' > quake.txt && rm -rf quake.txt.bak
260 | rm -rf fofa_tmp
261 | Echo_INFOR "结果导出 (json): quake.json"
262 | Echo_INFOR "结果输出 (txt) : quake.txt 总数 $(wc -l quake.txt | awk '{print $1}')"
263 |
264 | }
265 |
266 | osint_hunter(){
267 |
268 | hunter_STRING="$1"
269 |
270 | if [ $2 == ] 2>> /dev/null
271 | then
272 | hunter_SIZE="50"
273 | else
274 | hunter_SIZE=$2
275 | fi
276 |
277 | echo -e "\033[1;33m\n>> 调用 hunter 接口\033[0m"
278 | Echo_INFOR "搜索语法 : ${hunter_STRING}"
279 |
280 | ( echo "$hunter_STRING" | base64 -w 0 ) > hunter_tmp
281 |
282 | hunter_TEMP=$( hunter.json
286 |
287 | Echo_INFOR "$(jq '.data.rest_quota' hunter.json | sed 's/\"//g')"
288 |
289 | cat hunter.json | jq '.data.arr[]' | jq '.ip+":"+(.port|tostring)' > hunter.txt.bak
290 | cat hunter.txt.bak | sed 's/\"//g' > hunter.txt && rm -rf hunter.txt.bak
291 |
292 | Echo_INFOR "结果导出 (json): hunter.json"
293 | Echo_INFOR "结果导出 (txt) : hunter.txt 总数 $(wc -l hunter.txt | awk '{print $1}')"
294 |
295 | }
296 |
297 | osint_chaos(){
298 |
299 | # https://github.com/projectdiscovery/chaos-client
300 | chaos -silent -key $identify_chaos -d $1 -o chaos.txt
301 | echo -e ""
302 | Echo_INFOR "域名结果输出 : chaos.txt 总数 $(wc -l chaos.txt | awk '{print $1}')"
303 |
304 | }
305 |
306 | # -init
307 | init_func(){
308 |
309 | # init ZOOM_KEY
310 | echo -e "\033[1;33m>> 配置 zoomeye 环境\n\033[0m"
311 |
312 | zoomeye -h > /dev/null 2>&1
313 | if [ $? == 0 ]
314 | then
315 | zoomeye init -apikey "${identify_zoom_key}"
316 | else
317 | Install_Switch4 "zoomeye"
318 | zoomeye init -apikey "${identify_zoom_key}"
319 | fi
320 |
321 | print_some
322 |
323 | # init shodan_KEY
324 | echo -e "\033[1;33m>> 配置 shodan 环境\n\033[0m"
325 |
326 | shodan -h > /dev/null 2>&1
327 | if [ $? == 0 ]
328 | then
329 | shodan init "${identify_shodan_key}"
330 | else
331 | Install_Switch4 "shodan"
332 | shodan init "${identify_shodan_key}"
333 | fi
334 |
335 | }
336 |
337 | # -help
338 | Help_Info(){
339 |
340 | echo -e ""
341 | echo -e "\033[1;34m|—— -chaos [DOMAIN] 调用 chaos 查询接口\033[0m"
342 | echo -e "\033[1;32m|———— ones -chaos ffffffff0x.com\033[0m"
343 | echo -e "\033[1;34m|—— -fofa [STRING] (num) 调用 Fofa 查询接口\033[0m"
344 | echo -e "\033[1;32m|———— ones -fofa 'tomcat' 100\033[0m"
345 | echo -e "\033[1;34m|—— -hunter [STRING] (num) 调用 hunter 查询接口\033[0m"
346 | echo -e "\033[1;32m|———— ones -hunter 'tomcat' 100\033[0m"
347 | echo -e "\033[1;34m|—— -quake [STRING] (num) 调用 quake 查询接口\033[0m"
348 | echo -e "\033[1;32m|———— ones -quake 'tomcat' 100\033[0m"
349 | echo -e "\033[1;34m|—— -zoom [STRING] (num) 调用 Zoomeye 查询接口\033[0m"
350 | echo -e "\033[1;32m|———— ones -zoom 'tomcat' 100\033[0m"
351 | echo -e "\033[1;34m|—— -shodan [STRING] (num) 调用 shodan 查询接口\033[0m"
352 | echo -e "\033[1;32m|———— ones -shodan 'tomcat' 100\033[0m"
353 | echo -e "\ncreate by ffffffff0x"
354 |
355 | }
356 |
357 | case "$1" in
358 | -fofa)
359 | check_conf
360 | init_key1
361 | osint_fofa "$2" "$3"
362 | ;;
363 | -zoom)
364 | check_conf
365 | init_key1
366 | osint_zoomeye "$2" "$3"
367 | ;;
368 | -shodan)
369 | check_conf
370 | init_key1
371 | osint_shodan "$2" "$3"
372 | ;;
373 | -quake)
374 | check_conf
375 | init_key1
376 | osint_quake "$2" "$3"
377 | ;;
378 | -hunter)
379 | check_conf
380 | init_key1
381 | osint_hunter "$2" "$3"
382 | ;;
383 | -chaos)
384 | check_conf
385 | init_key1
386 | osint_chaos "$2" "$3"
387 | ;;
388 | -h | h | -help | help)
389 | printf "\033c"
390 | Help_Info
391 | exit 1
392 | ;;
393 | -init | init)
394 | check_conf
395 | init_key1
396 | init_func
397 | ;;
398 | *)
399 | Banner
400 | echo -e "\033[1;32mones 当前版本 :\033[0m \033[1;35m$ones_Version \033[0m"
401 | echo -e "\n\033[1;34m使用 -h/-help 选项查看帮助文档\033[0m"
402 | exit 1
403 | ;;
404 | esac
405 |
406 | echo -e "\033[1;36m \n-----OVER-----\n \033[0m"
407 |
--------------------------------------------------------------------------------
/utils/output.go:
--------------------------------------------------------------------------------
1 | package utils
2 |
3 | import (
4 | "bufio"
5 | "fmt"
6 | onese "ones/engine"
7 | ones "ones/mod"
8 | "os"
9 | )
10 |
11 | var AllJson = ""
12 | var TmpSlice []string
13 | var HostSlice []string
14 |
15 | func OutputProcess() {
16 |
17 | if ones.Fofa != "" {
18 | AllJson, TmpSlice = onese.TodoFofa()
19 | HostSlice = append(TmpSlice)
20 | }
21 | if ones.Quake != "" {
22 | AllJson, TmpSlice = onese.TodoQuake()
23 | HostSlice = append(TmpSlice)
24 | }
25 | if ones.Hunter != "" {
26 | TmpSlice = onese.TodoHunter()
27 | HostSlice = append(TmpSlice)
28 | }
29 | if ones.Shodan != "" {
30 | TmpSlice = onese.TodoShodan()
31 | HostSlice = append(TmpSlice)
32 | }
33 | if ones.Zoomeye != "" {
34 | TmpSlice = onese.TodoZoomeye()
35 | HostSlice = append(TmpSlice)
36 | }
37 | if ones.Chaos != "" {
38 | AllJson, TmpSlice = onese.TodoChaos()
39 | HostSlice = append(TmpSlice)
40 | }
41 |
42 | if ones.Json != "" {
43 | TodoJson()
44 | }
45 | if ones.Txt != "" {
46 | TodoTxt()
47 | }
48 | if ones.Json == "" && ones.Txt == "" {
49 | ToRaw()
50 | }
51 |
52 | }
53 | func TodoJson() {
54 |
55 | filePath := ones.Json
56 | file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
57 | if err != nil {
58 | fmt.Println("文件打开失败", err)
59 | }
60 | defer file.Close()
61 | write := bufio.NewWriter(file)
62 | write.WriteString(AllJson)
63 | write.Flush()
64 |
65 | fmt.Println("json 格式文件已输出到: ", ones.Json)
66 | }
67 |
68 | func TodoTxt() {
69 |
70 | filePath := ones.Txt
71 | file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
72 | if err != nil {
73 | fmt.Println("文件打开失败", err)
74 | }
75 | defer file.Close()
76 | write := bufio.NewWriter(file)
77 |
78 | for _, v := range HostSlice {
79 | write.WriteString(v + "\n")
80 | }
81 |
82 | write.Flush()
83 |
84 | fmt.Println("txt 格式文件已输出到: ", ones.Txt)
85 |
86 | }
87 |
88 | func ToRaw() {
89 | for _, v := range HostSlice {
90 | fmt.Println(v)
91 | }
92 |
93 | }
94 |
--------------------------------------------------------------------------------