├── .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 | ones 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 | ![](./img/11.png) 110 | 111 | fofa 查询 tomcat,只查询15个,输出 json 格式的数据到 output123.json 中 112 | ```bash 113 | ./ones -fofa 'app="APACHE-Tomcat"' -num 15 -json output123.json 114 | ``` 115 | 116 | ![](./img/12.png) 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 | ![](./img/13.png) 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 | ![](./img/14.png) 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 | - ![](./img/10.png) 185 | 186 | - zoomeye API-KEY 187 | - https://www.zoomeye.org/profile 188 | - ![](./img/6.png) 189 | 190 | - shodan API-KEY 191 | - https://account.shodan.io/ 192 | - ![](./img/7.png) 193 | 194 | - quake API-KEY 195 | - https://quake.360.cn/quake/#/personal 196 | - ![](./img/8.webp) 197 | 198 | - hunter API-KEY 199 | - https://hunter.qianxin.com/home/userInfo 200 | - ![](./img/9.png) 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 | [![](./img/JetBrains.png)](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 | --------------------------------------------------------------------------------