├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── auto_assign.yml ├── dependabot.yml ├── release.yml └── workflows │ ├── check-duplicates.yml │ ├── codeql-analysis.yml │ ├── go.yml │ ├── golangci-lint.yml │ ├── release-binary.yml │ └── release-test.yml ├── .gitignore ├── .golangci.yml ├── .goreleaser.yaml ├── LICENSE ├── Makefile ├── README.md ├── cmd └── favirecon │ └── favirecon.go ├── go.mod ├── go.sum ├── pkg ├── favirecon │ ├── db.go │ ├── db.json │ ├── favirecon.go │ ├── favirecon_test.go │ ├── html.go │ ├── http.go │ ├── ratelimit.go │ ├── url.go │ └── utils.go ├── input │ ├── check.go │ └── flags.go └── output │ ├── banner.go │ └── output.go ├── scripts ├── check-dups.sh ├── check-favicon-ok.sh ├── favicon-to-add.txt └── nuclei-templates-favicon.py └── snapcraft.yaml /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: edoardottt 2 | liberapay: edoardottt 3 | patreon: edoardottt 4 | ko_fi: edoardottt 5 | open_collective: edoardottt 6 | custom: "https://www.paypal.me/edoardottt" 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/auto_assign.yml: -------------------------------------------------------------------------------- 1 | # Set to true to add reviewers to pull requests 2 | addReviewers: true 3 | 4 | # A list of reviewers to be added to pull requests (GitHub user name) 5 | reviewers: 6 | - edoardottt 7 | 8 | # A list of keywords to be skipped the process that add reviewers if pull requests include it 9 | skipKeywords: 10 | - wip 11 | 12 | # A number of reviewers added to the pull request 13 | # Set 0 to add all the reviewers (default: 0) 14 | numberOfReviewers: 0 15 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | 4 | # Maintain dependencies for go modules 5 | - package-ecosystem: "gomod" 6 | directory: "/" 7 | schedule: 8 | interval: "weekly" 9 | target-branch: "devel" 10 | commit-message: 11 | prefix: "chore" 12 | include: "scope" 13 | labels: 14 | - "Maintenance" 15 | -------------------------------------------------------------------------------- /.github/release.yml: -------------------------------------------------------------------------------- 1 | changelog: 2 | exclude: 3 | authors: 4 | - dependabot 5 | categories: 6 | - title: 🎉 New Features 7 | labels: 8 | - "Type: Enhancement" 9 | - title: 🐞 Bug Fixes 10 | labels: 11 | - "Type: Bug" 12 | - title: 🔨 Maintenance 13 | labels: 14 | - "Type: Maintenance" 15 | - title: Other Changes 16 | labels: 17 | - "*" -------------------------------------------------------------------------------- /.github/workflows/check-duplicates.yml: -------------------------------------------------------------------------------- 1 | name: Check Duplicates 2 | 3 | on: 4 | push: 5 | branches: [ "main","devel"] 6 | pull_request: 7 | branches: [ "main","devel"] 8 | 9 | jobs: 10 | check-duplicates: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Check Out Code 14 | uses: actions/checkout@v2 15 | 16 | - name: Run Check Duplicates Script 17 | run: | 18 | chmod +x scripts/check-dups.sh 19 | ./scripts/check-dups.sh 20 | working-directory: ${{ github.workspace }} -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL" 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | # The branches below must be a subset of the branches above 8 | branches: [main] 9 | schedule: 10 | - cron: '0 0 * * 6' 11 | 12 | jobs: 13 | analyze: 14 | name: Analyze 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | fail-fast: false 19 | matrix: 20 | # Override automatic language detection by changing the below list 21 | # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] 22 | language: ['go'] 23 | # Learn more... 24 | # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection 25 | 26 | steps: 27 | - name: Checkout repository 28 | uses: actions/checkout@v2 29 | with: 30 | # We must fetch at least the immediate parents so that if this is 31 | # a pull request then we can checkout the head. 32 | fetch-depth: 2 33 | 34 | # If this run was triggered by a pull request event, then checkout 35 | # the head of the pull request instead of the merge commit. 36 | - run: git checkout HEAD^2 37 | if: ${{ github.event_name == 'pull_request' }} 38 | 39 | # Initializes the CodeQL tools for scanning. 40 | - name: Initialize CodeQL 41 | uses: github/codeql-action/init@v2 42 | with: 43 | languages: ${{ matrix.language }} 44 | # If you wish to specify custom queries, you can do so here or in a config file. 45 | # By default, queries listed here will override any specified in a config file. 46 | # Prefix the list here with "+" to use these queries and those in the config file. 47 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 48 | 49 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 50 | # If this step fails, then you should remove it and run the build manually (see below) 51 | - name: Autobuild 52 | uses: github/codeql-action/autobuild@v2 53 | 54 | # ℹ️ Command-line programs to run using the OS shell. 55 | # 📚 https://git.io/JvXDl 56 | 57 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 58 | # and modify them (or add more) to build your code if your project 59 | # uses a compiled language 60 | 61 | #- run: | 62 | # make bootstrap 63 | # make release 64 | 65 | - name: Perform CodeQL Analysis 66 | uses: github/codeql-action/analyze@v2 67 | -------------------------------------------------------------------------------- /.github/workflows/go.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a golang project 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go 3 | 4 | name: Go 5 | 6 | on: 7 | push: 8 | branches: [ "main","devel"] 9 | pull_request: 10 | branches: [ "main","devel"] 11 | 12 | jobs: 13 | 14 | build: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v3 18 | 19 | - name: Set up Go 20 | uses: actions/setup-go@v3 21 | with: 22 | go-version: 1.21 23 | 24 | - name: Build 25 | run: go build -v ./... 26 | 27 | - name: Test 28 | run: go test -v ./... 29 | -------------------------------------------------------------------------------- /.github/workflows/golangci-lint.yml: -------------------------------------------------------------------------------- 1 | name: golangci-lint 2 | on: 3 | push: 4 | tags: 5 | - v* 6 | branches: 7 | - devel 8 | - main 9 | pull_request: 10 | permissions: 11 | contents: read 12 | # Optional: allow read access to pull request. Use with `only-new-issues` option. 13 | # pull-requests: read 14 | jobs: 15 | golangci: 16 | name: lint 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/setup-go@v3 20 | with: 21 | go-version: 1.23 22 | - uses: actions/checkout@v3 23 | - name: golangci-lint 24 | uses: golangci/golangci-lint-action@v3 25 | with: 26 | # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version 27 | version: v1.61.0 28 | 29 | # Optional: working directory, useful for monorepos 30 | # working-directory: somedir 31 | 32 | # Optional: golangci-lint command line arguments. 33 | # args: --issues-exit-code=0 34 | 35 | # Optional: show only new issues if it's a pull request. The default value is `false`. 36 | # only-new-issues: true 37 | 38 | # Optional: if set to true then the all caching functionality will be complete disabled, 39 | # takes precedence over all other caching options. 40 | # skip-cache: true 41 | 42 | # Optional: if set to true then the action don't cache or restore ~/go/pkg. 43 | # skip-pkg-cache: true 44 | 45 | # Optional: if set to true then the action don't cache or restore ~/.cache/go-build. 46 | # skip-build-cache: true 47 | -------------------------------------------------------------------------------- /.github/workflows/release-binary.yml: -------------------------------------------------------------------------------- 1 | name: 🎉 Release Binary 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | workflow_dispatch: 8 | 9 | jobs: 10 | release: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: "Check out code" 14 | uses: actions/checkout@v3 15 | with: 16 | fetch-depth: 0 17 | 18 | - name: "Set up Go" 19 | uses: actions/setup-go@v4 20 | with: 21 | go-version: 1.21.x 22 | 23 | - name: "Create release on GitHub" 24 | timeout-minutes: 10 25 | uses: goreleaser/goreleaser-action@v4 26 | with: 27 | args: "release --clean" 28 | version: latest 29 | workdir: . 30 | env: 31 | GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" -------------------------------------------------------------------------------- /.github/workflows/release-test.yml: -------------------------------------------------------------------------------- 1 | name: 🔨 Release Test 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - '**.go' 7 | - '**.mod' 8 | workflow_dispatch: 9 | 10 | jobs: 11 | release-test: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: "Check out code" 15 | uses: actions/checkout@v3 16 | with: 17 | fetch-depth: 0 18 | 19 | - name: Set up Go 20 | uses: actions/setup-go@v4 21 | with: 22 | go-version: 1.21.x 23 | 24 | - name: release test 25 | uses: goreleaser/goreleaser-action@v4 26 | with: 27 | args: "release --clean --snapshot" 28 | version: latest -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | scripts/check-present.sh 3 | scripts/compute-murmur3.go 4 | scripts/fav-google.py 5 | scripts/mm3.py 6 | /favirecon 7 | *.snap 8 | 9 | # Binaries for programs and plugins 10 | *.exe 11 | *.exe~ 12 | *.dll 13 | *.so 14 | *.dylib 15 | 16 | # Test binary, built with `go test -c` 17 | *.test 18 | *.cfg 19 | 20 | # Test input files 21 | *.in 22 | 23 | # Output of the go coverage tool, specifically when used with LiteIDE 24 | *.out 25 | 26 | # Dependency directories (remove the comment below to include it) 27 | # vendor/ 28 | -------------------------------------------------------------------------------- /.golangci.yml: -------------------------------------------------------------------------------- 1 | linters: 2 | # Enable all available linters. 3 | # Default: false 4 | disable-all: true 5 | enable: 6 | - asciicheck 7 | - bodyclose 8 | - copyloopvar 9 | - dogsled 10 | - dupl 11 | - err113 12 | - errcheck 13 | - exhaustive 14 | - gochecknoglobals 15 | - goconst 16 | - gocritic 17 | - godot 18 | - godox 19 | - goheader 20 | - gomodguard 21 | - goprintffuncname 22 | - gosimple 23 | - govet 24 | - ineffassign 25 | - misspell 26 | - mnd 27 | - nakedret 28 | - nolintlint 29 | - prealloc 30 | - rowserrcheck 31 | - sqlclosecheck 32 | - staticcheck 33 | - stylecheck 34 | - testpackage 35 | - typecheck 36 | - unconvert 37 | - unparam 38 | - unused 39 | - whitespace 40 | - wsl 41 | 42 | linters-settings: 43 | wsl: 44 | strict-append: false 45 | enforce-err-cuddling: true 46 | 47 | mnd: 48 | # Values always ignored: "1", "1.0", "0" and "0.0" 49 | # Default: [] 50 | ignored-numbers: 51 | - '2' 52 | - '0644' 53 | 54 | issues: 55 | exclude-rules: 56 | - path: pkg/favirecon/db.go 57 | text: "should be written without leading space as `//nolint: gochecknoglobals`" 58 | - path: pkg/output/banner.go 59 | text: "should be written without leading space as `//nolint: gochecknoglobals`" -------------------------------------------------------------------------------- /.goreleaser.yaml: -------------------------------------------------------------------------------- 1 | release: 2 | header: | 3 | ## favirecon {{ .Tag }} 🥳 4 | *Use favicons to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services.* 5 | 6 | footer: | 7 | If you encounter a problem, just open an [issue](https://github.com/edoardottt/favirecon/issues) 8 | 9 | before: 10 | hooks: 11 | - go mod tidy 12 | 13 | builds: 14 | - env: 15 | - CGO_ENABLED=0 16 | goos: 17 | - linux 18 | - windows 19 | - darwin 20 | goarch: 21 | - amd64 22 | - 386 23 | - arm 24 | - arm64 25 | ignore: 26 | - goos: darwin 27 | goarch: '386' 28 | - goos: windows 29 | goarch: 'arm' 30 | - goos: windows 31 | goarch: 'arm64' 32 | binary: '{{ .ProjectName }}' 33 | main: ./cmd/favirecon/ 34 | 35 | archives: 36 | - format: zip 37 | name_template: '{{ .ProjectName }}_{{ .Version }}_{{ if eq .Os "darwin" }}macOS{{ else }}{{ .Os }}{{ end }}_{{ .Arch }}' 38 | 39 | checksum: 40 | algorithm: sha256 41 | 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 vrenzolaverace 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | REPO=github.com/edoardottt/favirecon 2 | 3 | remod: 4 | @rm -rf go.* 5 | @go mod init ${REPO} 6 | @go get ./... 7 | @go mod tidy -v 8 | @echo "Done." 9 | 10 | update: 11 | @go get -u ./... 12 | @go mod tidy -v 13 | @echo "Done." 14 | 15 | lint: 16 | @golangci-lint run 17 | 18 | build: 19 | @go build ./cmd/favirecon/ 20 | @sudo mv favirecon /usr/local/bin/ 21 | @echo "Done." 22 | 23 | clean: 24 | @sudo rm -rf /usr/local/bin/favirecon 25 | @echo "Done." 26 | 27 | test: 28 | @go test -race ./... 29 | @echo "Done." -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | favirecon 3 |
4 |

5 | 6 |

Use favicons to improve your target recon phase

7 | 8 |
Coded with 💙 by edoardottt
9 | 10 |

11 | 12 | 13 | go action 14 | 15 | 16 | 17 | go report card 18 | 19 | 20 |
21 | 22 | Share on Twitter! 23 | 24 |

25 | 26 |

27 | Install • 28 | Get Started • 29 | Examples • 30 | Changelog • 31 | Contributing • 32 | License 33 |

34 | 35 |

36 | 37 |

38 | 39 | > **Note** 40 | > This tool heavily relies on its favicon hash database. If you think you have a new favicon hash that's worth adding or you think there is a wrong hash-service association please open an issue. 41 | 42 | Install 📡 43 | ---------- 44 | 45 | ### Homebrew 46 | 47 | ```console 48 | brew install favirecon 49 | ``` 50 | 51 | ### Snap 52 | 53 | ```console 54 | sudo snap install favirecon 55 | ``` 56 | 57 | ### Go 58 | 59 | ```console 60 | go install github.com/edoardottt/favirecon/cmd/favirecon@latest 61 | ``` 62 | 63 | Get Started 🎉 64 | ---------- 65 | 66 | ```console 67 | Usage: 68 | favirecon [flags] 69 | 70 | Flags: 71 | INPUT: 72 | -u, -url string Input domain 73 | -l, -list string File containing input domains 74 | -cidr Interpret input as CIDR 75 | 76 | CONFIGURATIONS: 77 | -hash string[] Filter results having these favicon hashes (comma separated) 78 | -c, -concurrency int Concurrency level (default 50) 79 | -t, -timeout int Connection timeout in seconds (default 10) 80 | -rl, -rate-limit int Set a rate limit (per second) 81 | -px, -proxy string Set a proxy server (URL) 82 | 83 | OUTPUT: 84 | -o, -output string File to write output results 85 | -v, -verbose Verbose output 86 | -s, -silent Silent output. Print only results 87 | -j, -json JSON output 88 | ``` 89 | 90 | Examples 💡 91 | ---------- 92 | 93 | Identify a single domain 94 | 95 | ```console 96 | favirecon -u https://www.github.com 97 | ``` 98 | 99 | ```console 100 | echo https://www.github.com | favirecon 101 | ``` 102 | 103 | Grab all possible results from a list of domains (protocols needed!) 104 | 105 | ```console 106 | favirecon -l targets.txt 107 | ``` 108 | 109 | ```console 110 | cat targets.txt | favirecon 111 | ``` 112 | 113 | Grab all possible results belonging to a specific target(s) (protocols needed!) 114 | 115 | ```console 116 | cat targets.txt | favirecon -hash 708578229 117 | ``` 118 | 119 | Grab all possible results from single CIDR 120 | 121 | ```console 122 | favirecon -u 192.168.1.0/24 -cidr 123 | ``` 124 | 125 | Use a Proxy 126 | 127 | ```console 128 | favirecon -u https://www.github.com -px http://127.0.0.1:8080 129 | ``` 130 | 131 | JSON Output 132 | 133 | ```console 134 | favirecon -u https://www.github.com -j 135 | ``` 136 | 137 | Changelog 📌 138 | ------- 139 | 140 | Detailed changes for each release are documented in the [release notes](https://github.com/edoardottt/favirecon/releases). 141 | 142 | Contributing 🛠 143 | ------- 144 | 145 | Just open an [issue](https://github.com/edoardottt/favirecon/issues) / [pull request](https://github.com/edoardottt/favirecon/pulls). 146 | 147 | Before opening a pull request, download [golangci-lint](https://golangci-lint.run/usage/install/) and run 148 | 149 | ```console 150 | golangci-lint run 151 | ``` 152 | 153 | If there aren't errors, go ahead :) 154 | 155 | In the news 📰 156 | ------- 157 | 158 | - [Hive Five Newsletter by Securibee](https://securib.ee/newsletter/) 159 | 160 | License 📝 161 | ------- 162 | 163 | This repository is under [MIT License](https://github.com/edoardottt/favirecon/blob/main/LICENSE). 164 | [edoardottt.com](https://edoardottt.com/) to contact me. 165 | -------------------------------------------------------------------------------- /cmd/favirecon/favirecon.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package main 8 | 9 | import ( 10 | "github.com/edoardottt/favirecon/pkg/favirecon" 11 | "github.com/edoardottt/favirecon/pkg/input" 12 | ) 13 | 14 | func main() { 15 | options := input.ParseOptions() 16 | runner := favirecon.New(options) 17 | runner.Run() 18 | } 19 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/edoardottt/favirecon 2 | 3 | go 1.23.0 4 | 5 | require ( 6 | github.com/PuerkitoBio/goquery v1.10.3 7 | github.com/edoardottt/golazy v0.1.4 8 | github.com/projectdiscovery/goflags v0.1.74 9 | github.com/projectdiscovery/gologger v1.1.54 10 | github.com/projectdiscovery/mapcidr v1.1.34 11 | github.com/projectdiscovery/utils v0.4.19 12 | github.com/stretchr/testify v1.10.0 13 | github.com/twmb/murmur3 v1.1.8 14 | go.uber.org/ratelimit v0.3.1 15 | ) 16 | 17 | require ( 18 | github.com/STARRY-S/zip v0.2.3 // indirect 19 | github.com/andybalholm/brotli v1.1.1 // indirect 20 | github.com/andybalholm/cascadia v1.3.3 // indirect 21 | github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect 22 | github.com/aymerick/douceur v0.2.0 // indirect 23 | github.com/benbjohnson/clock v1.3.5 // indirect 24 | github.com/bodgit/plumbing v1.3.0 // indirect 25 | github.com/bodgit/sevenzip v1.6.1 // indirect 26 | github.com/bodgit/windows v1.0.1 // indirect 27 | github.com/cnf/structhash v0.0.0-20250313080605-df4c6cc74a9a // indirect 28 | github.com/davecgh/go-spew v1.1.1 // indirect 29 | github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect 30 | github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect 31 | github.com/gorilla/css v1.0.1 // indirect 32 | github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect 33 | github.com/json-iterator/go v1.1.12 // indirect 34 | github.com/klauspost/compress v1.18.0 // indirect 35 | github.com/klauspost/pgzip v1.2.6 // indirect 36 | github.com/logrusorgru/aurora v2.0.3+incompatible // indirect 37 | github.com/mattn/go-isatty v0.0.20 // indirect 38 | github.com/mholt/archives v0.1.1 // indirect 39 | github.com/microcosm-cc/bluemonday v1.0.27 // indirect 40 | github.com/miekg/dns v1.1.65 // indirect 41 | github.com/minio/minlz v1.0.0 // indirect 42 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect 43 | github.com/modern-go/reflect2 v1.0.2 // indirect 44 | github.com/nwaples/rardecode/v2 v2.1.1 // indirect 45 | github.com/pierrec/lz4/v4 v4.1.22 // indirect 46 | github.com/pkg/errors v0.9.1 // indirect 47 | github.com/pmezard/go-difflib v1.0.0 // indirect 48 | github.com/projectdiscovery/blackrock v0.0.1 // indirect 49 | github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d // indirect 50 | github.com/sorairolake/lzip-go v0.3.7 // indirect 51 | github.com/spf13/afero v1.14.0 // indirect 52 | github.com/therootcompany/xz v1.0.1 // indirect 53 | github.com/tidwall/gjson v1.18.0 // indirect 54 | github.com/tidwall/match v1.1.1 // indirect 55 | github.com/tidwall/pretty v1.2.1 // indirect 56 | github.com/ulikunitz/xz v0.5.12 // indirect 57 | go4.org v0.0.0-20230225012048-214862532bf5 // indirect 58 | golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect 59 | golang.org/x/mod v0.24.0 // indirect 60 | golang.org/x/net v0.39.0 // indirect 61 | golang.org/x/sync v0.13.0 // indirect 62 | golang.org/x/sys v0.32.0 // indirect 63 | golang.org/x/text v0.24.0 // indirect 64 | golang.org/x/tools v0.32.0 // indirect 65 | gopkg.in/djherbis/times.v1 v1.3.0 // indirect 66 | gopkg.in/yaml.v3 v3.0.1 // indirect 67 | ) 68 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 2 | cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 3 | cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= 4 | cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= 5 | cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= 6 | cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= 7 | cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= 8 | cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= 9 | cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= 10 | cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= 11 | cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= 12 | cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= 13 | cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= 14 | cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= 15 | cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= 16 | cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= 17 | dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 18 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 19 | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 20 | github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiUkhzPo= 21 | github.com/PuerkitoBio/goquery v1.10.3/go.mod h1:tMUX0zDMHXYlAQk6p35XxQMqMweEKB7iK7iLNd4RH4Y= 22 | github.com/STARRY-S/zip v0.2.3 h1:luE4dMvRPDOWQdeDdUxUoZkzUIpTccdKdhHHsQJ1fm4= 23 | github.com/STARRY-S/zip v0.2.3/go.mod h1:lqJ9JdeRipyOQJrYSOtpNAiaesFO6zVDsE8GIGFaoSk= 24 | github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= 25 | github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= 26 | github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= 27 | github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= 28 | github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= 29 | github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= 30 | github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= 31 | github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= 32 | github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= 33 | github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 34 | github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU= 35 | github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs= 36 | github.com/bodgit/sevenzip v1.6.1 h1:kikg2pUMYC9ljU7W9SaqHXhym5HyKm8/M/jd31fYan4= 37 | github.com/bodgit/sevenzip v1.6.1/go.mod h1:GVoYQbEVbOGT8n2pfqCIMRUaRjQ8F9oSqoBEqZh5fQ8= 38 | github.com/bodgit/windows v1.0.1 h1:tF7K6KOluPYygXa3Z2594zxlkbKPAOvqr97etrGNIz4= 39 | github.com/bodgit/windows v1.0.1/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM= 40 | github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 41 | github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 42 | github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= 43 | github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= 44 | github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= 45 | github.com/cnf/structhash v0.0.0-20250313080605-df4c6cc74a9a h1:Ohw57yVY2dBTt+gsC6aZdteyxwlxfbtgkFEMTEkwgSw= 46 | github.com/cnf/structhash v0.0.0-20250313080605-df4c6cc74a9a/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4= 47 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 48 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 49 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 50 | github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 h1:2tV76y6Q9BB+NEBasnqvs7e49aEBFI8ejC89PSnWH+4= 51 | github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= 52 | github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= 53 | github.com/edoardottt/golazy v0.1.4 h1:TsRFfTpOabiyTyiB2Dm/aR4id5r+ILOxNjYOSkeq8ec= 54 | github.com/edoardottt/golazy v0.1.4/go.mod h1:uZRa3TRYvQSxmbAc7O9+3RelkMu+ACbKiUoy+uPsGVM= 55 | github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 56 | github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= 57 | github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= 58 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 59 | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 60 | github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 61 | github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 62 | github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 63 | github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 64 | github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 65 | github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= 66 | github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 67 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 68 | github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 69 | github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 70 | github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 71 | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 72 | github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 73 | github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 74 | github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 75 | github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 76 | github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 77 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 78 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 79 | github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 80 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 81 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 82 | github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 83 | github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 84 | github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 85 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= 86 | github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= 87 | github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= 88 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= 89 | github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= 90 | github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= 91 | github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= 92 | github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 93 | github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 94 | github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= 95 | github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 96 | github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= 97 | github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= 98 | github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= 99 | github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= 100 | github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= 101 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 102 | github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 103 | github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= 104 | github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= 105 | github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= 106 | github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= 107 | github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= 108 | github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= 109 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 110 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 111 | github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= 112 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 113 | github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= 114 | github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= 115 | github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= 116 | github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 117 | github.com/mholt/archives v0.1.1 h1:c7J3qXN1FB54y0qiUXiq9Bxk4eCUc8pdXWwOhZdRzeY= 118 | github.com/mholt/archives v0.1.1/go.mod h1:FQVz01Q2uXKB/35CXeW/QFO23xT+hSCGZHVtha78U4I= 119 | github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= 120 | github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= 121 | github.com/miekg/dns v1.1.65 h1:0+tIPHzUW0GCge7IiK3guGP57VAw7hoPDfApjkMD1Fc= 122 | github.com/miekg/dns v1.1.65/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck= 123 | github.com/minio/minlz v1.0.0 h1:Kj7aJZ1//LlTP1DM8Jm7lNKvvJS2m74gyyXXn3+uJWQ= 124 | github.com/minio/minlz v1.0.0/go.mod h1:qT0aEB35q79LLornSzeDH75LBf3aH1MV+jB5w9Wasec= 125 | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 126 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= 127 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 128 | github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= 129 | github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= 130 | github.com/nwaples/rardecode/v2 v2.1.1 h1:OJaYalXdliBUXPmC8CZGQ7oZDxzX1/5mQmgn0/GASew= 131 | github.com/nwaples/rardecode/v2 v2.1.1/go.mod h1:7uz379lSxPe6j9nvzxUZ+n7mnJNgjsRNb6IbvGVHRmw= 132 | github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= 133 | github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= 134 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 135 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 136 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 137 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 138 | github.com/projectdiscovery/blackrock v0.0.1 h1:lHQqhaaEFjgf5WkuItbpeCZv2DUIE45k0VbGJyft6LQ= 139 | github.com/projectdiscovery/blackrock v0.0.1/go.mod h1:ANUtjDfaVrqB453bzToU+YB4cUbvBRpLvEwoWIwlTss= 140 | github.com/projectdiscovery/goflags v0.1.74 h1:n85uTRj5qMosm0PFBfsvOL24I7TdWRcWq/1GynhXS7c= 141 | github.com/projectdiscovery/goflags v0.1.74/go.mod h1:UMc9/7dFz2oln+10tv6cy+7WZKTHf9UGhaNkF95emh4= 142 | github.com/projectdiscovery/gologger v1.1.54 h1:WMzvJ8j/4gGfPKpCttSTaYCVDU1MWQSJnk3wU8/U6Ws= 143 | github.com/projectdiscovery/gologger v1.1.54/go.mod h1:vza/8pe2OKOt+ujFWncngknad1XWr8EnLKlbcejOyUE= 144 | github.com/projectdiscovery/mapcidr v1.1.34 h1:udr83vQ7oz3kEOwlsU6NC6o08leJzSDQtls1wmXN/kM= 145 | github.com/projectdiscovery/mapcidr v1.1.34/go.mod h1:1+1R6OkKSAKtWDXE9RvxXtXPoajXTYX0eiEdkqlhQqQ= 146 | github.com/projectdiscovery/utils v0.4.19 h1:rWOOTWUMQK9gvgH01rrw0qFi0hrh712hM1pCUzapCqA= 147 | github.com/projectdiscovery/utils v0.4.19/go.mod h1:y5gnpQn802iEWqf0djTRNskJlS62P5eqe1VS1+ah0tk= 148 | github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 149 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 150 | github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= 151 | github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d h1:hrujxIzL1woJ7AwssoOcM/tq5JjjG2yYOc8odClEiXA= 152 | github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= 153 | github.com/sorairolake/lzip-go v0.3.7 h1:vP2uiD/NoklLyzYMdgOWkZME0ulkSfVTTE4MNRKCwNs= 154 | github.com/sorairolake/lzip-go v0.3.7/go.mod h1:THOHr0FlNVCw2eOIEE9shFJAG1QxQg/pf2XUPAmNIqg= 155 | github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= 156 | github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= 157 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 158 | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= 159 | github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 160 | github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= 161 | github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 162 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 163 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 164 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 165 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 166 | github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= 167 | github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 168 | github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 169 | github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= 170 | github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= 171 | github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= 172 | github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= 173 | github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= 174 | github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= 175 | github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= 176 | github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= 177 | github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= 178 | github.com/twmb/murmur3 v1.1.8 h1:8Yt9taO/WN3l08xErzjeschgZU2QSrwm1kclYq+0aRg= 179 | github.com/twmb/murmur3 v1.1.8/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= 180 | github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= 181 | github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= 182 | github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= 183 | github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= 184 | github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= 185 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 186 | go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= 187 | go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= 188 | go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 189 | go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 190 | go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= 191 | go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 192 | go.uber.org/ratelimit v0.3.1 h1:K4qVE+byfv/B3tC+4nYWP7v/6SimcO7HzHekoMNBma0= 193 | go.uber.org/ratelimit v0.3.1/go.mod h1:6euWsTB6U/Nb3X++xEUXA8ciPJvr19Q/0h1+oDcJhRk= 194 | go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc= 195 | go4.org v0.0.0-20230225012048-214862532bf5/go.mod h1:F57wTi5Lrj6WLyswp5EYV1ncrEbFGHD4hhz6S1ZYeaU= 196 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 197 | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 198 | golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 199 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 200 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 201 | golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= 202 | golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= 203 | golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= 204 | golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 205 | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 206 | golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 207 | golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= 208 | golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= 209 | golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= 210 | golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 211 | golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 212 | golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= 213 | golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= 214 | golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= 215 | golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= 216 | golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 217 | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 218 | golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= 219 | golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 220 | golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 221 | golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 222 | golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 223 | golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 224 | golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= 225 | golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 226 | golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= 227 | golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= 228 | golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= 229 | golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= 230 | golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 231 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 232 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 233 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 234 | golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 235 | golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 236 | golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 237 | golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= 238 | golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= 239 | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 240 | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 241 | golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 242 | golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 243 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 244 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 245 | golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 246 | golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 247 | golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 248 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 249 | golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 250 | golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 251 | golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 252 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 253 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 254 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 255 | golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 256 | golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 257 | golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= 258 | golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= 259 | golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= 260 | golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= 261 | golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= 262 | golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= 263 | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 264 | golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 265 | golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 266 | golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 267 | golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 268 | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 269 | golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 270 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 271 | golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 272 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 273 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 274 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 275 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 276 | golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= 277 | golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 278 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 279 | golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 280 | golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= 281 | golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= 282 | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 283 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 284 | golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 285 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 286 | golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 287 | golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 288 | golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 289 | golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 290 | golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 291 | golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 292 | golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 293 | golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 294 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 295 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 296 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 297 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 298 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 299 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 300 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 301 | golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 302 | golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 303 | golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 304 | golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 305 | golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= 306 | golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 307 | golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= 308 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 309 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 310 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 311 | golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 312 | golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= 313 | golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= 314 | golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= 315 | golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= 316 | golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 317 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 318 | golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 319 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 320 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 321 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 322 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 323 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 324 | golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 325 | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 326 | golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 327 | golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 328 | golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= 329 | golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= 330 | golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 331 | golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 332 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 333 | golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 334 | golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 335 | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 336 | golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 337 | golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 338 | golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 339 | golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 340 | golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 341 | golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 342 | golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 343 | golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 344 | golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 345 | golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 346 | golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 347 | golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 348 | golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 349 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 350 | golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 351 | golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 352 | golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 353 | golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 354 | golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 355 | golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 356 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 357 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 358 | golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= 359 | golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= 360 | golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= 361 | golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= 362 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 363 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 364 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 365 | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= 366 | google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= 367 | google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 368 | google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 369 | google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 370 | google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 371 | google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 372 | google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 373 | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 374 | google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 375 | google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 376 | google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= 377 | google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 378 | google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 379 | google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 380 | google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 381 | google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 382 | google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 383 | google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 384 | google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 385 | google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= 386 | google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 387 | google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 388 | google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 389 | google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 390 | google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 391 | google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= 392 | google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= 393 | google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 394 | google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 395 | google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 396 | google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 397 | google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 398 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 399 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= 400 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 401 | gopkg.in/djherbis/times.v1 v1.3.0 h1:uxMS4iMtH6Pwsxog094W0FYldiNnfY/xba00vq6C2+o= 402 | gopkg.in/djherbis/times.v1 v1.3.0/go.mod h1:AQlg6unIsrsCEdQYhTzERy542dz6SFdQFZFv6mUY0P8= 403 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 404 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 405 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 406 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 407 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 408 | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 409 | honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 410 | honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 411 | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 412 | honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= 413 | rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= 414 | rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= 415 | rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= 416 | -------------------------------------------------------------------------------- /pkg/favirecon/db.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon 8 | 9 | import ( 10 | "encoding/json" 11 | "errors" 12 | "fmt" 13 | "log" 14 | 15 | _ "embed" 16 | 17 | "github.com/projectdiscovery/goflags" 18 | ) 19 | 20 | // nolint: gochecknoglobals 21 | var ( 22 | //go:embed db.json 23 | dbJSON string 24 | 25 | db map[string]string 26 | ErrHashNotFound = errors.New("hash not found") 27 | ErrHashNotMatching = errors.New("hash not matching hash provided") 28 | ) 29 | 30 | func init() { 31 | if err := json.Unmarshal([]byte(dbJSON), &db); err != nil { 32 | log.Fatal("error while unmarshaling db") 33 | } 34 | } 35 | 36 | // CheckFavicon checks if faviconHash is present in the database. If hash (slice) is not empty, 37 | // it checks also if that faviconHash is one of the inputted hashes. 38 | // If faviconHash is not found, an error is returned. 39 | func CheckFavicon(faviconHash string, hash goflags.StringSlice, url ...string) (string, error) { 40 | if k, ok := db[faviconHash]; ok { 41 | if len(hash) != 0 { 42 | if contains(hash, faviconHash) { 43 | return k, nil 44 | } 45 | 46 | return "", fmt.Errorf("[%s] %s %w", faviconHash, url, ErrHashNotMatching) 47 | } 48 | 49 | return k, nil 50 | } 51 | 52 | if len(url) == 0 { 53 | return "", fmt.Errorf("%w", ErrHashNotFound) 54 | } 55 | 56 | return "", fmt.Errorf("[%s] %s %w", faviconHash, url, ErrHashNotFound) 57 | } 58 | -------------------------------------------------------------------------------- /pkg/favirecon/db.json: -------------------------------------------------------------------------------- 1 | { 2 | "-1000719429": "SpamSniper", 3 | "-1001050714": "GROWI - Team collaboration software", 4 | "-1003107038": "WordPress", 5 | "1004209915": "Contaware", 6 | "-1004700569": "TheHost", 7 | "-1010568750": "phpMyAdmin", 8 | "1011076161": "ASPECT Control Panel", 9 | "-1012744956": "Kaspersky Endpoint Security Cloud", 10 | "1012948051": "Opengear Management Console", 11 | "-1013024216": "Dashy", 12 | "1052926265": "File Browser", 13 | "1015545776": "pfSense", 14 | "-1015932800": "Ghost (CMS)", 15 | "1016158463": "Netonix", 16 | "-101718582": "GIAE Online", 17 | "-1017346469": "WeBWork", 18 | "1020814938": "Ubiquiti - AirOS", 19 | "1021528395": "Phicomm", 20 | "-1022206565": "CrushFTP", 21 | "-1022319330": "Belkin router", 22 | "1023869165": "Flood Web UI", 23 | "1027252292": "AnyDesk", 24 | "-1028703177": "TP Link", 25 | "1029363268": "QSolve Management System", 26 | "-103091179": "Halon Security", 27 | "1032553729": "Elastix", 28 | "-1036244016": "XWeb", 29 | "1037387972": "Dlink Router", 30 | "-103848262": "Makhost", 31 | "1038500535": "D-Link (router/network)", 32 | "-1038557304": "Webmin", 33 | "1039044672": "Apache", 34 | "-1041180225": "QNAP NAS Virtualization Station", 35 | "104189364": "Vigor Router", 36 | "-104250814": "idfuse", 37 | "-1043355641": "eBuilder", 38 | "1045696447": "Sophos User Portal/VPN Portal", 39 | "1046701084": "iCanteen", 40 | "-10469226": "3CX Web", 41 | "1047213685": "Netgear (Network)", 42 | "-1049382096": "BrbOS", 43 | "-1050377603": "ThingsPro Gateway", 44 | "-1050786453": "Plesk", 45 | "105083909": "FireEye", 46 | "-1051063062": "Apache Archiva", 47 | "-1051205943": "Siemens Simatic", 48 | "1051648103": "Securepoint", 49 | "1053515370": "OfficeSpace", 50 | "-1054477011": "Leica Geosystems", 51 | "1056758035": "Webmin", 52 | "-1057103077": "CPT", 53 | "-1057698644": "Issabel", 54 | "1059329877": "Tecvoz", 55 | "1059461494": "Ecessa WAN Optimizer", 56 | "-1059717365": "Ebay", 57 | "-1060318941": "WayOS", 58 | "-1062191521": "VOS", 59 | "1064742722": "RabbitMQ", 60 | "-106646451": "WISPR (Airlan)", 61 | "-1067420240": "GraphQL", 62 | "1068026086": "ComfortClick", 63 | "-1068237086": "Etherpad", 64 | "106844876": "Revive Adserver", 65 | "107061220": "T-Mobile", 66 | "-1071169404": "Deluge Web UI", 67 | "1073075415": "Jaspersoft", 68 | "-1074357885": "MyCloud NAS", 69 | "1075305934": "IBM Lotus Domino Web Access", 70 | "1076320928": "XOffice", 71 | "1076833462": "Mailu", 72 | "1081719753": "D-Link (Network)", 73 | "-1082845244": "RabbitMQ Management", 74 | "108362015": "IMuse", 75 | "108411803": "Deluge Web UI", 76 | "-108457676": "QMatic", 77 | "-1085284672": "Wordpress", 78 | "1088281959": "RF-301K", 79 | "-1088664572": "Microbit", 80 | "1090061843": "Webtitan Cloud", 81 | "-1093172228": "truVision (NVR)", 82 | "-1093314638": "IBM iNotes", 83 | "1095915848": "Airwatch", 84 | "-1096293925": "ECO World UI", 85 | "-10974981": "Shinobi (CCTV)", 86 | "1098596251": "Fedora Server Edition", 87 | "1099097618": "Squidex", 88 | "-1101206929": "Bluemax", 89 | "1101614703": "UPS", 90 | "1102047973": "KPMG", 91 | "1103599349": "Untangle", 92 | "-1104274084": "eRad", 93 | "1104879639": "MandeUmZap", 94 | "-1105083093": "KeyCloak", 95 | "110768013": "Sapido router", 96 | "-1108647419": "SmartFoxServer", 97 | "-1109801483": "Seafile", 98 | "-1111841537": "Platform For Science", 99 | "-111232642": "starbeacon CMS", 100 | "-1115903764": "Pydio", 101 | "1117165781": "SimpleHelp (Remote Support)", 102 | "-1117549627": "Fastvue Reporter for FortiGate", 103 | "-1118274094": "Communigate", 104 | "1118684072": "Baidu", 105 | "-1119613926": "Bluehost", 106 | "1122883478": "Codiad", 107 | "1124727888": "Powered by Leapfunder", 108 | "-1124868062": "Netport Software (DSL)", 109 | "112509862": "i.LON", 110 | "1125166869": "KEMP Login Screen", 111 | "-1125259127": "Avigilon Web Access", 112 | "-1126048407": "ParentSchool SIS", 113 | "1126652438": "Cypress Configuration and Management", 114 | "1126835021": "InstaCart", 115 | "-112697680": "PostGraphile", 116 | "-1127895693": "Zuul", 117 | "-1128128488": "VMWare Access Gateway", 118 | "-1130575070": "WISE TIGER router", 119 | "-1131046522": "Dolibarr", 120 | "-1131689409": "yTM", 121 | "-1132465110": "NiFi server", 122 | "1135165421": "Ricoh", 123 | "1135750934": "Infinite Campus", 124 | "1136074368": "SchoolNet", 125 | "-1138074337": "LUM", 126 | "-1139576724": "WorkForce Telestaff Login", 127 | "1139788073": "Metasploit", 128 | "1142227528": "Aruba (Virtual Controller)", 129 | "-1142667323": "Tenderland", 130 | "1143877728": "Dremio", 131 | "1144925962": "Dlink Webcam", 132 | "1147858285": "Dell", 133 | "-1148190371": "OPNsense", 134 | "-1148627124": "Nagios XI", 135 | "1149842582": "Improbable.io", 136 | "-1151246177": "Servatica", 137 | "-1151675028": "ISP Manager (Web Hosting Panel)", 138 | "115295460": "Strider", 139 | "-1153873472": "Airwatch", 140 | "-1153950306": "Dell", 141 | "-1155883524": "Homebridge", 142 | "1156815778": "JBoss EAP 6", 143 | "1157789622": "Ubiquiti UNMS", 144 | "-1160966609": "Gitea", 145 | "1162358134": "ALLNET", 146 | "-1162630024": "Jumpserver", 147 | "-1162730477": "Vanderbilt SPC", 148 | "116323821": "Spring boot", 149 | "1163764264": "CentreStack", 150 | "1165640109": "Mizuho Global e-Banking", 151 | "1165838194": "ThinkPHP", 152 | "1166865883": "Haivision Makito", 153 | "1167359424": "Samsung", 154 | "1169183049": "BoaServer", 155 | "-1169314298": "INSTAR IP Cameras", 156 | "1170430551": "React App", 157 | "-1170501093": "phpLDAPadmin", 158 | "-1171707951": "Accellion File Transfer", 159 | "-1172436532": "SecureLink Enterprise Access", 160 | "1174526129": "OLT Web management interface", 161 | "1174841451": "Drupal", 162 | "1175383902": "Real 2D/3D", 163 | "1176554158": "Sauter moduWeb", 164 | "-1176564322": "HWg-STE", 165 | "1176619560": "Intelbras", 166 | "1177920756": "AVS electronics", 167 | "1178471380": "Foldr", 168 | "1179099333": "Youtube", 169 | "11794165": "Apollo", 170 | "1180765435": "OrientDB", 171 | "1182206475": "VMWare Horizon", 172 | "-1182250791": "Kodi Web Interface", 173 | "-1183519486": "EMail Marketing Service", 174 | "-1184167764": "DEVA Broadcast", 175 | "118652228": "ZF2 App", 176 | "1188424430": "KT\u0026C", 177 | "1188645141": "Huweishen", 178 | "-1188918488": "Fujitsu NAS", 179 | "-1189292869": "FlatPress", 180 | "-1189561879": "Linear eMerge", 181 | "1192261743": "E2open", 182 | "-1193783166": "HOT Box", 183 | "1194900831": "boost ai", 184 | "119532476": "Mahara ePortfolio system", 185 | "-1196651128": "NetGear Login", 186 | "119741608": "Teltonika", 187 | "1197632109": "Video Conferencing server for Enterprise", 188 | "-1197966750": "Gemalto", 189 | "1198579728": "DbGate", 190 | "12003995": "Walmart", 191 | "-1200737715": "Kibana", 192 | "-1202103423": "TeamSystem", 193 | "-1203021870": "Kubeflow", 194 | "-1205024243": "lwIP (A Lightweight TCP/IP stack)", 195 | "1205288142": "OpenVidu", 196 | "-120854511": "CUPS", 197 | "1211608009": "Openfire Admin Console", 198 | "-1212471026": "PBX in a flash", 199 | "-1214233731": "Wightman", 200 | "1215779410": "ControlID", 201 | "-1217002480": "AppDynamics", 202 | "-121875991": "Xen Orchestra", 203 | "1221759509": "Dlink Webcam", 204 | "1224108256": "CrownPeak", 205 | "1224439683": "Barracuda Networks", 206 | "1224994964": "Vodafone", 207 | "-1225484776": "Endian Firewall", 208 | "-1226343463": "SnapGear Management Console", 209 | "1227004061": "Assurant", 210 | "1227052603": "Alibaba Cloud (Block Page)", 211 | "1227152965": "Killing Floor Web Admin", 212 | "1228349756": "h5ai", 213 | "-1231308448": "Atlassian Crowd", 214 | "-1231681737": "Ghost (CMS)", 215 | "1232159009": "Apple", 216 | "1232596212": "OpenStack", 217 | "1232683746": "Citigold", 218 | "1233473326": "AmicaWEB - Combivox", 219 | "1234311970": "Onera", 220 | "1235070469": "Synology VPN Plus", 221 | "-1235192469": "Metasploit", 222 | "-1237480336": "Vue", 223 | "123821839": "Sangfor", 224 | "-1238307632": "Devline", 225 | "-1238837624": "Liquid Pixels", 226 | "1239721344": "Micro Focus Vibe", 227 | "-1240222446": "Zhejiang Uniview Technologies Co.", 228 | "-1240387895": "Unqork", 229 | "1240573703": "Roche Global Corporate Website", 230 | "1240618871": "Oracle Hospitality - Reporting and Analytics", 231 | "1241049726": "iomega NAS", 232 | "1241305867": "Enlighted Manage", 233 | "-124234705": "VoIPmonitor", 234 | "-1243674871": "AppNext", 235 | "1244636413": "cPanel Login", 236 | "-1244757483": "Kaspersky", 237 | "1245897666": "xWiki", 238 | "1248917303": "JupyterHub", 239 | "1249285083": "Ubiquiti Aircube", 240 | "-1249852061": "Microsoft Outlook", 241 | "-1250210868": "bticino", 242 | "-1250474341": "VMware Workspace", 243 | "-1250820636": "CP Plus", 244 | "1251810433": "Cafe24 (Korea)", 245 | "-1252041730": "Vue.js", 246 | "1253536875": "ZNC Web Frontend", 247 | "-1253943670": "HUMAX", 248 | "-1255347784": "AngularJS", 249 | "-1255454840": "Mailwatch", 250 | "-1255992602": "VMware Horizon", 251 | "-1258058404": "TileServer GL", 252 | "-1259700605": "Forcepoint Access forbidden", 253 | "-1261322577": "Aqua Enterprise", 254 | "1262005940": "Jamf Login", 255 | "-1262113920": "Git", 256 | "1263391110": "Web Directory", 257 | "-1264095219": "OpenBullet2", 258 | "1266034062": "Mailing lists service", 259 | "-1267819858": "KeyHelp (Keyweb AG)", 260 | "-1268095485": "VZPP Plesk", 261 | "-12700016": "Seafile", 262 | "-1272756243": "Citrix Login", 263 | "1273982002": "Mautic (Open Source Marketing Automation)", 264 | "1274078387": "TP-LINK (Network Device)", 265 | "-1274798165": "Sophos Mobile", 266 | "-1275148624": "Accrisoft", 267 | "-1275226814": "XAMPP", 268 | "-1277814690": "LaCie", 269 | "1278323681": "Gitlab", 270 | "-127886975": "Metasploit", 271 | "1280124172": "VK Services", 272 | "1280461262": "Braze", 273 | "1280907310": "Webmin", 274 | "1281253102": "Dahua Storm (DVR)", 275 | "1288385475": "Livebox", 276 | "1292731542": "IP-Symcon WebFront", 277 | "129457226": "Liferay Portal", 278 | "-1298108480": "Yii PHP Framework", 279 | "1298613326": "NEXIOS", 280 | "1302486561": "NetData", 281 | "1303364595": "ErpNext", 282 | "1307188176": "UniFi NVR: Software Portal", 283 | "1307375944": "Octoprint (3D printer)", 284 | "-1308101551": "Pegasus", 285 | "130960039": "EnergyTeam", 286 | "1312262473": "MicroEngine", 287 | "-1312806261": "Confluence", 288 | "-1313140993": "vBulletin", 289 | "-131381065": "eve - Emulated Virtual Environment", 290 | "-1314102215": "Verdaccio", 291 | "-1314405728": "Alexandria", 292 | "-1314943136": "Apache HTTP Server", 293 | "-1316071138": "TalkingData", 294 | "-1316507119": "Tieline", 295 | "-1317621215": "D-View 8", 296 | "1318124267": "Avigilon", 297 | "-1319025408": "Netgear", 298 | "-1319399032": "ispbox", 299 | "1319699698": "Form.io", 300 | "1319780356": "Biotime", 301 | "1323738809": "Nexus Repository Manager", 302 | "1325605650": "Overleaf", 303 | "133039858": "Libraesva ESG", 304 | "1332183546": "Sun Java System Application Server", 305 | "-1332828203": "Network Storage Server", 306 | "1333537166": "Alfresco", 307 | "-1334408578": "Solar-Log", 308 | "1334507537": "BroadWave", 309 | "-1334617766": "Jitsi Meet", 310 | "-1335251146": "Totolink", 311 | "1335824931": "AVer", 312 | "1335852856": "RedCap", 313 | "-1336042616": "S2 Netbox Login", 314 | "-1338133217": "Riverbed", 315 | "-1343070146": "Intelbras SA", 316 | "-134375033": "Plesk", 317 | "-1343761772": "SAVPizzaDoor", 318 | "-134458680": "LifeSize UVC Video Center", 319 | "-1344736688": "Phicomm", 320 | "1346408936": "PowerController", 321 | "-1346447358": "TilginAB (HomeGateway)", 322 | "1347937389": "SAP Conversational AI", 323 | "-1348984223": "Jaeger UI", 324 | "1349199107": "BlueBean", 325 | "-1350437236": "WiFi Login", 326 | "-1350587650": "nxFilter", 327 | "1351214488": "Dead End", 328 | "-1351901211": "Luma Surveillance", 329 | "-1352019987": "Viprinet", 330 | "-1353325588": "Remote UI Portal", 331 | "-1354933624": "Dlink Webcam", 332 | "-1355675073": "RadiusManager", 333 | "1356662359": "Outlook Web Application", 334 | "1356900853": "Winmail Server", 335 | "135741046": "FG Forrest", 336 | "1358855492": "PrivateBin", 337 | "-1360098475": "WorkWave", 338 | "-1364880648": "InnoMedia", 339 | "1366863347": "Greenshift", 340 | "1367373012": "DolphinPHP", 341 | "1367958180": "litemall", 342 | "1370528867": "Yahoo", 343 | "1370990243": "Trend Micro Deep Security Manager", 344 | "-137295400": "NETGEAR ReadyNAS", 345 | "-1373888521": "ErpNext", 346 | "-1374555452": "Baidu", 347 | "1375401192": "VICIdial", 348 | "1375487984": "Web based Configurator", 349 | "-1375671634": "The Lounge", 350 | "-1376750468": "Greatek", 351 | "1376888327": "Ecole", 352 | "-1378182799": "Archivematica", 353 | "-1379982221": "Atlassian - Bamboo", 354 | "1380259394": "BBC", 355 | "1380908726": "jeecg-boot", 356 | "1381079566": "EVSE Web Interface", 357 | "-1381126564": "Global Management System", 358 | "1382324298": "Apple", 359 | "-1385513933": "WangShen", 360 | "-1387041300": "PINC Solutions", 361 | "-1387795012": "PayKeeper", 362 | "1390393078": "Optergy", 363 | "-1393435578": "Mediatrix", 364 | "1395038954": "Phenix", 365 | "-1395400951": "Huawei - ADSL/Router", 366 | "1398055326": "WSO2 Management Console", 367 | "1398098445": "ownCloud", 368 | "-1399433489": "Prometheus Server", 369 | "1403071546": "Pearson", 370 | "1405460984": "pfSense", 371 | "1407809463": "Dolibarr", 372 | "1410071322": "SmarterTrack", 373 | "1410610129": "Supermicro Intelligent Management (IPMI)", 374 | "-1413670889": "Ansible AWX", 375 | "-1414475558": "Microsoft IIS", 376 | "-1414548363": "ThinVNC", 377 | "-1416401235": "Gigapod", 378 | "1417992821": "Lynx System", 379 | "-1418620977": "Wekan", 380 | "142044466": "The Internet Archive", 381 | "1422770566": "Endian Firewall", 382 | "142313513": "Facebook", 383 | "1423291318": "Smart PABX", 384 | "1423930703": "lighttpd", 385 | "-1424036600": "Portainer", 386 | "1424295654": "Icecast Streaming Media Server", 387 | "-1424697070": "SmartAdServer", 388 | "1427774978": "Home motion by Somfy", 389 | "1427976651": "ZTE (Network)", 390 | "-1432009195": "Elastix", 391 | "1433417005": "Salesforce", 392 | "1435180442": "HOTSPLOTS Router", 393 | "-1435467015": "CoreLogic", 394 | "1436966696": "Barracuda", 395 | "-1437701105": "XAMPP", 396 | "-1439222863": "Ivanti", 397 | "-1441715561": "Vodafone", 398 | "-1441956789": "Tableau", 399 | "1442699674": "NET", 400 | "-1442789563": "Nuxt JS", 401 | "1443361300": "Poweradmin", 402 | "-1445519482": "Kaseya", 403 | "1446490141": "MetInfo", 404 | "1446754233": "Apache", 405 | "-1446794564": "Ubiquiti Login Portals", 406 | "-1450898105": "TELE2", 407 | "-1451027808": "Intelbras", 408 | "1451166122": "ExtremeXOS ScreenPlay", 409 | "-1451366515": "DuckDuckGo", 410 | "-1452159623": "Tecvoz", 411 | "145291791": "Bump50:50", 412 | "1453890729": "Webmin", 413 | "-1457536113": "CradlePoint", 414 | "-1457628171": "Postmark", 415 | "-1461493576": "tdssuite", 416 | "1462981117": "Cyberoam", 417 | "1464851260": "MCMS", 418 | "-1465226128": "Atriuum", 419 | "-1465479343": "DNN (CMS)", 420 | "-1465760059": "RaspAP", 421 | "-146638980": "SharePoint", 422 | "-1466785234": "Dahua", 423 | "1466912879": "CradlePoint Technology (Router)", 424 | "1467395679": "Ligowave (network)", 425 | "-1469020453": "Britecore", 426 | "1469328760": "PMB", 427 | "-1471633460": "YY", 428 | "1472757244": "gov.uk", 429 | "-1472951746": "MI router", 430 | "1473157813": "CyberHound Appliance", 431 | "1474516533": "MagicMail Server", 432 | "-1474875778": "GLPI", 433 | "-1475308062": "NEBERO Login", 434 | "-1476120239": "Dreamfactory", 435 | "1476335317": "FireEye", 436 | "-1476384993": "Adobe Connect Central", 437 | "-1477373218": "Rusonyx", 438 | "-1477563858": "Arris", 439 | "-1477694668": "emessage", 440 | "-147798235": "Vodafone", 441 | "-1478010471": "wiki.js", 442 | "1479202414": "Arcadyan o2 box (Network)", 443 | "1479449210": "UniFi Controller", 444 | "1482591128": "Plone", 445 | "1483097076": "SyncThru Web Service (Printers)", 446 | "1484947000": "GoAnywhere MFT", 447 | "1485257654": "SonarQube", 448 | "1486876794": "ip3sec", 449 | "1487164831": "Metabase", 450 | "1487209721": "Kerio Clientless SSL-VPN", 451 | "-1489194754": "FatPipe", 452 | "-1489682310": "ICON Time system", 453 | "1490343308": "MK-AUTH", 454 | "-1491070374": "iMM Control Center", 455 | "1491281975": "PragmaRX", 456 | "-1492653156": "Speco technologies", 457 | "-1492966240": "RADIX", 458 | "149371702": "Synology DiskStation", 459 | "149496700": "Wisenet", 460 | "-1495061773": "Metalink", 461 | "1495420903": "Arris", 462 | "1495853641": "RedHat", 463 | "1496254733": "JBoss", 464 | "1496849154": "Baidu", 465 | "-1498185948": "Apple", 466 | "-1499488123": "Tainy E/HMOD", 467 | "-1499940355": "Rukovoditel", 468 | "1500512504": "leanote", 469 | "1500747026": "Powerschool", 470 | "1501109148": "Silver Peak", 471 | "1502215759": "Mirth", 472 | "1502482995": "Indeed", 473 | "1502815117": "pgAdmin", 474 | "1503188865": "FuelPHP", 475 | "-1505158120": "Jedox", 476 | "-1507094812": "MLflow", 477 | "-1507567067": "Baidu (IP error page)", 478 | "-1507821392": "Mastodon server", 479 | "1510327675": "Zerto", 480 | "1510423261": "maxView Storage Manager", 481 | "151225607": "Webif^2", 482 | "-1516177449": "SAP", 483 | "1517005673": "Redmine", 484 | "-1517793453": "CentOS", 485 | "-1521640213": "HotelDruid", 486 | "-1522253755": "Indico", 487 | "1522616207": "CentOS", 488 | "1523210179": "Gigaset", 489 | "1523284537": "Yahoo!", 490 | "1526179599": "Foreman", 491 | "1526980381": "Intraweb", 492 | "1528355650": "Pinterest", 493 | "-1528414776": "Rumpus", 494 | "1529113957": "Milestone Web Client", 495 | "1529794015": "Manaba", 496 | "1530688358": "Argon Technologies", 497 | "-1532282299": "IP Camera", 498 | "1537743656": "DropBox", 499 | "1540037626": "VKontakte", 500 | "1540323611": "Zentyal", 501 | "-1540609146": "KeystoneJS", 502 | "1540720428": "SysAid", 503 | "1544230796": "cPanel Login", 504 | "1544596682": "TelevisGo", 505 | "-1544605732": "Amazon", 506 | "1545970007": "Magnolia", 507 | "-1546574541": "Sonatype Nexus Repository Manager", 508 | "-1547576879": "Saia Burgess Controls - PCD", 509 | "-1549154783": "Bank of America", 510 | "1552601947": "FlexNet", 511 | "1552860581": "Elastic (Database)", 512 | "1553502622": "A10 Networks", 513 | "1555083561": "Linux", 514 | "-155518807": "ilsonline", 515 | "-1561873722": "Nginx", 516 | "1561951501": "Zyxel", 517 | "156312019": "Technicolor / Thomson Speedtouch (Network / ADSL)", 518 | "1563218345": "Postfix Admin", 519 | "-1564279764": "SuperHub 2", 520 | "1565357565": "wallabag", 521 | "1565485509": "Amazon AWS", 522 | "-1566222852": "Nice CXone", 523 | "-1566499661": "NSFocus", 524 | "1566659252": "KBlue", 525 | "1568516651": "Acronis", 526 | "-1569190618": "TransIP", 527 | "-1571472432": "Sierra Wireless Ace Manager (Airlink)", 528 | "-157270335": "Barracuda Firewall", 529 | "1574384512": "Storybook", 530 | "-1576282848": "GoCD", 531 | "-1577363222": "AMP - Application Management Panel", 532 | "-1580354544": "MailStore Web Access", 533 | "-1581907337": "Atlassian - JIRA", 534 | "1582430156": "Superset", 535 | "15831193": "WatchGuard", 536 | "1583275852": "Spectranet", 537 | "-1584893473": "docker-swarm-visualizer", 538 | "1585145626": "netdata dashboard", 539 | "-1587809317": "Strapi app", 540 | "-1588746893": "CommuniGate", 541 | "-1589842876": "Deluge Web UI", 542 | "1591050260": "Aipo", 543 | "1591770950": "ValidMail", 544 | "-1592540846": "i-VU Router", 545 | "-1593402357": "AT\u0026T", 546 | "-1593651747": "Blackboard", 547 | "1594377337": "Technicolor", 548 | "1597827316": "PUSR device", 549 | "1601194732": "Sophos Cyberoam (appliance)", 550 | "1603223646": "Comcast Business", 551 | "1604149042": "Synology", 552 | "-160425702": "Medallia", 553 | "1604363273": "AeroHive Networks", 554 | "160541240": "Transparency Analysis Notification Solution", 555 | "-160596078": "RSSBUS", 556 | "-1606065523": "Cachet", 557 | "-1606103083": "T-Mobile", 558 | "160634455": "O2 easy setup", 559 | "-1607644090": "Bitnami", 560 | "-1608064257": "Dell", 561 | "-1608282972": "VMS Broadcast Server", 562 | "-1610980956": "Drupal", 563 | "1611729805": "Elastic (Database)", 564 | "-1612496354": "Teltonika", 565 | "-1614186944": "Kelley Blue Book", 566 | "-1615532813": "Tautulli", 567 | "-1616115760": "ownCloud", 568 | "-1616143106": "AXIS (network cameras)", 569 | "16202868": "Universal Devices (UD)", 570 | "-1620734764": "Velocix Asset Portal", 571 | "1620794131": "SocketCluster", 572 | "1623760745": "bee-queue/arena", 573 | "162418931": "Absorb", 574 | "1627330242": "Joomla", 575 | "-1629133697": "IIS Windows Server", 576 | "1629518721": "macOS Server (Apple)", 577 | "-1630354993": "Proofpoint", 578 | "1632680057": "LiveConfig", 579 | "1632780968": "Université Toulouse 1 Capitole", 580 | "1635147929": "Criteo Corp", 581 | "163538942": "ARC", 582 | "-1637180585": "Arlo", 583 | "-1637198354": "FileMaker", 584 | "-163806709": "AlphaNet", 585 | "-1638258999": "Restreamer", 586 | "163842882": "Cisco Meraki", 587 | "1638963529": "Observium", 588 | "-1640178715": "Reddit", 589 | "1640914316": "Araknis", 590 | "-1642012180": "MyOmBox", 591 | "-1642532491": "Atlassian - Confluence", 592 | "1642701741": "Vmware Secure File Transfer", 593 | "164535647": "Bipiemme Technology", 594 | "1648531157": "InfiNet Wireless | WANFleX (Network)", 595 | "-1649762785": "webflow", 596 | "-165021467": "Ambari", 597 | "-1654229048": "Vivotek (Camera)", 598 | "-1655234758": "WSO2", 599 | "-165631681": "Gibbon", 600 | "-1656662001": "iServer", 601 | "-1656695885": "iomega NAS", 602 | "165976831": "Vodafone (Technicolor)", 603 | "-1660707210": "Vinyl", 604 | "-1661331374": "Dedicated Micros", 605 | "-166151761": "Abilis (Network/Automation)", 606 | "-1661672841": "Fexa", 607 | "-1661746099": "netDocuments", 608 | "1662176488": "PV Webserver", 609 | "1663064917": "MyChart", 610 | "-1664635936": "Telnet", 611 | "-1666561833": "Wildfly", 612 | "-1667378049": "Chamilo", 613 | "1668183286": "Kibana", 614 | "1668385882": "Avigilon", 615 | "1668745903": "Piwik", 616 | "1668832054": "Adform", 617 | "1669535914": "SoftGuard Desktop Security Suite", 618 | "1670778556": "IPCop", 619 | "-1672096080": "Cargo Site Builder", 620 | "1673203892": "Oracle", 621 | "-1675031883": "PhalApi", 622 | "1675395218": "Controllr", 623 | "-167656799": "Drupal", 624 | "-167663731": "Bitwarden", 625 | "1676997917": "OpenEdx", 626 | "-1677255344": "UBNT Router UI", 627 | "1678170702": "Asustor", 628 | "-1678298769": "Kerio Connect WebMail", 629 | "-1679308822": "PostIt-Lite", 630 | "-1680052984": "Web2Py", 631 | "-1680106844": "Wix", 632 | "-1680741662": "MediaSpace", 633 | "-1684189219": "GrandStream Device", 634 | "1684500512": "Baidu", 635 | "1684574358": "InVid", 636 | "168613227": "SAP", 637 | "16866410": "SonicWall", 638 | "168728537": "Thinfinity", 639 | "-1687285536": "Zammad", 640 | "1687568805": "UniFi", 641 | "-1688698891": "SpamExperts", 642 | "1689753480": "Matomo", 643 | "-1692183672": "Veeva", 644 | "-1692862215": "Canon Remote UI", 645 | "1693580324": "EFAK", 646 | "1693977300": "ampps", 647 | "-1697334194": "Univention Portal", 648 | "-1702393021": "mofinetwork", 649 | "-1702769256": "Bosch Security Systems (Camera)", 650 | "-1702798999": "1A First Alternative", 651 | "1703788174": "D-Link (router/network)", 652 | "1708197458": "Nordex Portal", 653 | "1709607771": "Avycon", 654 | "-1710631084": "Askey Cable Modem", 655 | "-1711491868": "Domino", 656 | "1714492006": "BugZilla", 657 | "-1721140132": "MSNSwitch", 658 | "1722224755": "000webhost", 659 | "1722331405": "Simian", 660 | "-1722446604": "Nodeworx", 661 | "-1723752240": "Microhard Systems", 662 | "-1723806538": "Binom", 663 | "1726027799": "IBM Server", 664 | "-1727542795": "Honeywell", 665 | "1729596692": "CloudFlow", 666 | "-1730094997": "Yahoo!", 667 | "1732786188": "Apache", 668 | "-1734508635": "U-Mail", 669 | "-1734573358": "TC-Group", 670 | "1734609466": "JustHost", 671 | "1735248917": "Ansible", 672 | "1735289686": "Whatsapp", 673 | "-173691695": "Infinitum", 674 | "-1738184811": "cacaoweb", 675 | "-1738727418": "KeepItSafe Management Console", 676 | "1740006758": "LiveZilla", 677 | "-1740432731": "Cloud9", 678 | "-1743260071": "Ghost", 679 | "174377944": "PerlDancer", 680 | "1745085988": "Terraform", 681 | "-1745552996": "Arbor Networks", 682 | "1747323616": "Linux", 683 | "-1748763891": "INSTAR Full-HD IP-Camera", 684 | "1749354953": "Vantara Pentaho Business Analytics Server", 685 | "-175177211": "VMware vCenter Converter Standalone", 686 | "175178334": "Nas4free", 687 | "1752776796": "OpenAI", 688 | "-175283071": "Dell", 689 | "1756605828": "WebCTRL", 690 | "1757638479": "Bossgoo", 691 | "-1758263820": "Verizon", 692 | "1761743076": "Comtime Router", 693 | "-1763210479": "Redstor", 694 | "-1763285821": "Vadacom", 695 | "1763297019": "Debian", 696 | "176427349": "UniBox", 697 | "-1765447687": "WatchNet", 698 | "1766699363": "Apache ActiveMQ", 699 | "1768726119": "Outlook Web Application", 700 | "-1768736691": "Flat UI", 701 | "1770799630": "bintec elmeg", 702 | "1772087922": "ASP.net", 703 | "1772648560": "FileCloud", 704 | "-1774771662": "OpenEDX", 705 | "-1775553655": "Unified Management Console (Polycom)", 706 | "1776643422": "VASCO Data Security", 707 | "-1776962843": "SolarWinds", 708 | "1777351344": "SOYAL", 709 | "1778371611": "LimeSurvey", 710 | "-1779611449": "Alienvault", 711 | "1781653957": "LimeSurvey", 712 | "1782271534": "truVision NVR (interlogix)", 713 | "-1785167104": "AccessNetworks", 714 | "1786554776": "Jupyter", 715 | "1786752597": "wdCP cloud host management system", 716 | "-178685903": "Yasni", 717 | "-1788112745": "PowerMTA monitoring", 718 | "1789284724": "Jonas Club Software", 719 | "1792417660": "Oracle Database Cloud Service", 720 | "-1797138069": "Cacti", 721 | "-1799495374": "OpenHAB", 722 | "1802374283": "LiquidPixels", 723 | "-1802629932": "Securifi", 724 | "1804194887": "Winet Voicetec Solutions", 725 | "1807116994": "Algorab", 726 | "-1807411396": "Skype", 727 | "-1808902844": "FactoryTalk ViewPoint", 728 | "-1810847295": "Sangfor", 729 | "-1814564704": "Hyperledger Explorer", 730 | "-181463215": "FireBrick", 731 | "1814833573": "Sonarr", 732 | "-1814887000": "Docker", 733 | "-1815453503": "Hexnode", 734 | "-1817434995": "WeChat", 735 | "1818828262": "TP-Link", 736 | "1821549811": "(Blank) iSpy", 737 | "1821570264": "SaDPe Online", 738 | "1822002133": "AMH", 739 | "-1822098181": "Checkpoint (Gaia)", 740 | "-182423204": "netdata dashboard", 741 | "-1826044321": "DPTech", 742 | "-1828108081": "nanominer", 743 | "1828614783": "Dynatrace", 744 | "1828756398": "Go Anywhere Web Client", 745 | "-1829534120": "Hewlett Packard", 746 | "1830651843": "Reg.ru", 747 | "-1831547740": "Twitter", 748 | "-183163807": "Ace", 749 | "183198303": "NAKIVO Backup\u0026Replication", 750 | "-1834435530": "Ubuntu", 751 | "1835479497": "Technicolor Gateway", 752 | "1836828108": "OpenProject", 753 | "1838417872": "Freebox OS", 754 | "-1839807129": "Motorola", 755 | "1841044852": "WX", 756 | "1842351293": "TP-Link (Network Device)", 757 | "1843534472": "CC Online", 758 | "-1844173284": "Sohu", 759 | "-1844393179": "Nessus", 760 | "-1845730184": "ResWare", 761 | "-1847069521": "LILIN", 762 | "184809389": "Arvixe", 763 | "-1848649480": "OATI", 764 | "1848946384": "GitHub", 765 | "1849654430": "Teldat", 766 | "-1850681776": "Gargoyle Router Management Utility", 767 | "-1851491385": "Angular", 768 | "1853406396": "JUCI", 769 | "-1853769969": "MicroFocus Filr", 770 | "1858779064": "Amped Wireless", 771 | "1858943950": "ProcessMaker", 772 | "1859187867": "SMA Solar Technology", 773 | "1859950336": "GassAutomat", 774 | "1862132268": "Gargoyle Router Management Utility", 775 | "-1863663974": "Airwatch", 776 | "-1865603240": "HTML Sitemap", 777 | "1866559839": "Guardicore", 778 | "-1868605258": "IBM TRIRIGA", 779 | "-186961397": "Apache Kylin", 780 | "-1872029577": "Cardinal Health", 781 | "-1874556000": "Nuxt.js + Vue", 782 | "-1876148433": "ePages", 783 | "1876585825": "ALIBI NVR", 784 | "1877797890": "Eltex (Router)", 785 | "1878555718": "oVirt Engine", 786 | "-1878841207": "audiocodes", 787 | "-1883619133": "LoopBack", 788 | "-1884368121": "Konica Minolta", 789 | "1884840369": "Avaya", 790 | "-1886993228": "Zope", 791 | "-1889500183": "qBittorrent Web UI", 792 | "1891804387": "Nokia", 793 | "1895360511": "VMware Horizon", 794 | "1895809524": "Web Help Desk", 795 | "1896727737": "Endgame", 796 | "-1897829998": "D-Link (camera)", 797 | "-1898583197": "OpenVZ", 798 | "1901388980": "ZyXEL", 799 | "-1907337290": "Priority ERP", 800 | "1907525032": "Piwik", 801 | "1908194265": "Pakedge", 802 | "1910316737": "Apache HTTP Server Test Page", 803 | "1911253822": "UPC Ceska Republica (Network)", 804 | "-1911513273": "Dovado Router", 805 | "1912067085": "Vas Hosting", 806 | "-1912577989": "Hewlett Packard", 807 | "1913538826": "Material Dashboard", 808 | "1914658187": "CloudFlare", 809 | "191654058": "Wordpress Under Construction Icon", 810 | "1917028407": "Vue.js", 811 | "1917437143": "ClearSwift", 812 | "1922032523": "NEC WebPro", 813 | "-1922044295": "Mitel Networks (MiCollab End User Portal)", 814 | "1922730879": "UpSource", 815 | "-1923037106": "Looker", 816 | "1923124308": "Magento", 817 | "192500777": "rediff", 818 | "-1926484046": "Sangfor", 819 | "1926757774": "TRENDnet", 820 | "-1929384416": "FileCloud", 821 | "-1929912510": "NETASQ - Secure / Stormshield", 822 | "-1930062189": "GoFlex Home Home Server", 823 | "1931791000": "SpiderOak", 824 | "-1932631093": "Tasitech", 825 | "1932966618": "Parsoid", 826 | "1933407199": "Moodle", 827 | "-1933493443": "Residential Gateway", 828 | "1933971431": "Passbolt", 829 | "-1935525788": "SmarterMail", 830 | "-1936286083": "Manhattan Active", 831 | "-1936961900": "Spacewalk", 832 | "1937209448": "Docker", 833 | "1937353549": "MSP N-central Remote Monitoring", 834 | "1938350499": "Domotz", 835 | "-1939892142": "SABnzbd", 836 | "-1940372141": "Mitel Networks", 837 | "-1940628871": "X-point", 838 | "1940967059": "ClarkConnect Enterprise Edition", 839 | "1941381095": "openWRT Luci", 840 | "1941681276": "Amazon", 841 | "-1944119648": "TeamCity", 842 | "-194439630": "Avtech IP Surveillance (Camera)", 843 | "-1944920072": "Network Optix", 844 | "1947845994": "CTFd", 845 | "-194791768": "AfterLogic Webmail", 846 | "-1949588835": "gov.uk", 847 | "-1950415971": "Joomla", 848 | "1953726032": "Metabase", 849 | "1954075067": "Centaur", 850 | "1954835352": "Vesta Hosting Control Panel", 851 | "-195508437": "iPECS", 852 | "-1955111623": "Moodys Analytics", 853 | "-1955339917": "Workday", 854 | "1956710267": "ABUS", 855 | "-1961046099": "Dgraph Ratel", 856 | "-1961104913": "SOGo", 857 | "-1962284560": "Adobe Connect", 858 | "-1964089279": "BARIX", 859 | "-1964821744": "mdex.de", 860 | "1966075700": "Kayako", 861 | "1966198264": "OpenERP (now known as Odoo)", 862 | "-1966432092": "Nessus", 863 | "1968236071": "Medidata Rave", 864 | "1969934080": "ShowDoc", 865 | "1969970750": "Gitea", 866 | "-1970367401": "VidyoDesktop", 867 | "-1973343228": "ComAp", 868 | "1973665246": "Entrolink", 869 | "1973799754": "IONOS", 870 | "1975413433": "Sunny WebBox", 871 | "-1975779926": "Ombi", 872 | "-1976018368": "Barracuda SSL VPN", 873 | "1976912833": "DHIS2", 874 | "-1979589988": "Teradek Admin Console", 875 | "-198481018": "Device42", 876 | "1985721423": "WorldClient for Mdaemon", 877 | "-1986297913": "antMan", 878 | "-1987026093": "Mobotix webcam", 879 | "-1987515689": "Nuxt.js web Framework", 880 | "-1987532097": "MatrixCare EHR (electronic healthcare record)", 881 | "1987639534": "MerlinOne Digital Asset company", 882 | "1991136554": "Instagram", 883 | "1991562061": "Niagara Web Server / Tridium", 884 | "-1991844902": "NextGen.Net", 885 | "1993518473": "cPanel Login", 886 | "-1996576874": "IgniteNet", 887 | "199682422": "Thulium", 888 | "-1998633262": "infobox.ru", 889 | "1999746265": "ispCP Omega Virtual Hosting Control System", 890 | "2004732863": "Datto, Inc.", 891 | "2004848782": "Urchin 5", 892 | "-2006308185": "OTRS (Open Ticket Request System)", 893 | "2006716043": "Intelbras SA", 894 | "2006735094": "Axigen", 895 | "2007650109": "Gofrugal", 896 | "-2009722838": "React", 897 | "-2010570651": "Giam sat", 898 | "-2012355198": "SonicWALL", 899 | "-2013156129": "Debian", 900 | "2016727121": "Huginn web agents console", 901 | "2017541283": "Proxmox Login Page", 902 | "-2017596142": "NocoDB", 903 | "2018290563": "SEX5性屋娱乐 Servers", 904 | "2019488876": "Dahua Storm (IP Camera)", 905 | "2021342287": "Futura Exchange", 906 | "-2023266783": "Matomo", 907 | "-2024949122": "Liferay", 908 | "2027028811": "Mantis", 909 | "2029529270": "Pentaho", 910 | "-2031183903": "D-Link (Network)", 911 | "-2032163853": "Jorani", 912 | "2032487957": "McMyAdmin", 913 | "-2032679519": "UserTesting Recorder", 914 | "2033037722": "AVIWEST - StreamHub", 915 | "203612613": "Request Tracker - Login", 916 | "2038454909": "Open Data Kit 2.0 Server", 917 | "-2039579287": "Oracle Secure Global Desktop", 918 | "2041528389": "CP Plus Orange", 919 | "-2042679530": "Alibaba", 920 | "-2042821498": "Player Analytics", 921 | "-2044079375": "Sun Java System Web Server", 922 | "2045611526": "Nuxt.js", 923 | "2047138954": "Hikvision Web Client", 924 | "2047156994": "Linksys", 925 | "-2048981507": "RStudio", 926 | "-2049046500": "SWF850 WEB", 927 | "2049082371": "LG Network Storage", 928 | "-2051649833": "Inmotion Hosting", 929 | "-2052468252": "FreeRDP WebConnect", 930 | "2053280074": "Open WebMail", 931 | "-2054889066": "Sentora", 932 | "2055322029": "Realtek", 933 | "2056442365": "Kanboard", 934 | "-2056503929": "iomega NAS", 935 | "2057414495": "Plex Export", 936 | "-2057558656": "Microsoft", 937 | "-2057590733": "TYPO3", 938 | "2058391758": "Debian/Ubuntu Portal", 939 | "2059618623": "HP iLO", 940 | "2059893391": "Green-Computing", 941 | "2061303838": "Xibo Digital Signage", 942 | "2061800448": "Mitel", 943 | "-2062525755": "CUPS", 944 | "-2062596654": "VeloCloud", 945 | "-2063036701": "Linksys Smart Wi-Fi", 946 | "2063428236": "Sentry", 947 | "-2065461083": "ZesleCP", 948 | "2065589381": "Virtualizor", 949 | "-2065594952": "Tuleap", 950 | "2066412882": "PingFederate", 951 | "2067267180": "OpenProject", 952 | "-2067519629": "TPlus", 953 | "2068154487": "Digium (Switchvox)", 954 | "2068657956": "OutSystems", 955 | "2068826621": "PostgreSQL", 956 | "-2069014068": "IBM Security Access manager for Web", 957 | "-2069844696": "Ruckus Wireless", 958 | "2071993228": "Nomadix Access Gateway", 959 | "2072198544": "Ferozo Panel", 960 | "-2076244488": "Vigor Login", 961 | "-2083667632": "RAP", 962 | "-2084578694": "FatPipe", 963 | "-2084151106": "PHPIPAM", 964 | "2086228042": "MobileIron", 965 | "2086820847": "MailPlug", 966 | "2087256469": "IPCAM", 967 | "-2088877437": "IMail Web Client", 968 | "2091258163": "Microsoft Lync", 969 | "2096818813": "Ghost CMS", 970 | "-2098066288": "GenieACS", 971 | "2098602123": "tn4 Gateway", 972 | "2099342476": "PKP (OpenJournalSystems) Public Knowledge Project", 973 | "2109473187": "Huawei - Claro", 974 | "2113497004": "WiJungle", 975 | "-2116540786": "bet365", 976 | "-2117390767": "Spiceworks (panel)", 977 | "2119159060": "GMail", 978 | "2121539357": "FireEye", 979 | "2124459909": "HFS (HTTP File Server)", 980 | "-2125083197": "Windows Azure", 981 | "2127152956": "MailWizz", 982 | "2128230701": "Chainpoint", 983 | "213144638": "Proxmox Virtual Environment", 984 | "-2133341160": "WordPress Org", 985 | "2134367771": "TimeKeeper", 986 | "-2138018199": "Secure Data Transfer by Maytech", 987 | "-2138771289": "Technicolor", 988 | "-2140379067": "RoundCube Webmail", 989 | "2141724739": "Juniper Device Manager", 990 | "-2144363468": "HP Printer / Server", 991 | "2144485375": "IceWarp", 992 | "-2145085239": "Tenda Web Master", 993 | "2146763496": "Mailcow", 994 | "-219752612": "FRITZ!Box", 995 | "-222497010": "JoyRun", 996 | "224536051": "Shenzhen coship electronics co.", 997 | "225632504": "Rocket Chat", 998 | "-22659015": "HP Device Status", 999 | "229300816": "ArcGIS", 1000 | "-231109625": "DVWA - Damn Vulnerable Web Application", 1001 | "-232968088": "Azure Devops Server", 1002 | "234963778": "Match Networks", 1003 | "-235701012": "Cnservers LLC", 1004 | "239966418": "Microsoft Outlook", 1005 | "240136437": "Seagate Technology (NAS)", 1006 | "240606739": "FireEye", 1007 | "-244067125": "CONTEC", 1008 | "245977566": "POLYEDRO", 1009 | "246145559": "Parse", 1010 | "248673607": "Concentrator", 1011 | "250294225": "IPCorder", 1012 | "250762888": "BigBlueButton", 1013 | "251106693": "GPON Home Gateway", 1014 | "252728887": "DD WRT (DD-WRT milli_httpd)", 1015 | "253035985": "infor", 1016 | "-25418041": "Milestone XProtect Web Client", 1017 | "-254193850": "React", 1018 | "255892555": "wdCP cloud host management system", 1019 | "-25625631": "Nasuni Filer", 1020 | "-256828986": "iDirect Canada (Network Management)", 1021 | "260894120": "Webmail", 1022 | "-262766611": "LS2 PAC", 1023 | "264161619": "Vitek", 1024 | "-266008933": "SAP Netweaver", 1025 | "-267431135": "Kibana", 1026 | "-268676052": "CAE", 1027 | "270320124": "Lyris ListManager", 1028 | "-271448102": "iKuai Networks", 1029 | "-271968289": "TP-Link", 1030 | "-273775086": "Prancer", 1031 | "27529899": "ThecusOS", 1032 | "-276311150": "CerberusFTP", 1033 | "-276759139": "Chef Automate", 1034 | "-277464596": "AEM Screens", 1035 | "-278788671": "tilgin", 1036 | "281559989": "Huawei", 1037 | "283740897": "Intelbras SA", 1038 | "-286018424": "TitanHQ", 1039 | "-288432578": "LingFeng", 1040 | "-288432582": "Node-RED", 1041 | "29056450": "Geneko", 1042 | "-291579889": "WS server test page", 1043 | "296518274": "Ecolane", 1044 | "-297069493": "Apache Tomcat", 1045 | "-297076130": "AudioCodes", 1046 | "-297780858": "Plunet BusinessManager", 1047 | "298891748": "Parallels Conflixx", 1048 | "-299287097": "Cisco Router", 1049 | "-299324825": "Lupus Electronics XT", 1050 | "-299342343": "Organizr V2", 1051 | "304392005": "Vodien Internet Solutions", 1052 | "-305179312": "Atlassian - Confluence", 1053 | "305412257": "Eventum", 1054 | "-305424081": "Graylog", 1055 | "-305613147": "ABB Optimax", 1056 | "309020573": "PayPal", 1057 | "314969666": "Amazon AWS", 1058 | "-318947884": "Palo Alto Networks", 1059 | "-318968846": "ngX-Rocket", 1060 | "31972968": "Dlink Webcam", 1061 | "321591353": "Node-RED", 1062 | "321909464": "Airwatch", 1063 | "322531336": "iomega NAS", 1064 | "-325082670": "LANCOM Systems", 1065 | "-329747115": "C-Lodop", 1066 | "-329992939": "SmartServer 2.2", 1067 | "331870709": "iomega NAS", 1068 | "-332324409": "STARFACE VoIP Software", 1069 | "-333791179": "Adobe Campaign Classic", 1070 | "-335153896": "Traccar GPS tracking", 1071 | "-335242539": "F5 Big-IP", 1072 | "-336242473": "Siemens OZW772", 1073 | "-342262483": "Combivox", 1074 | "-35107086": "WorldClient for Mdaemon", 1075 | "-355305208": "D-Link (camera)", 1076 | "-359621743": "Intelbras Wireless", 1077 | "-360566773": "ARRIS (Network)", 1078 | "362091310": "MobileIron", 1079 | "363324987": "Dell SonicWALL", 1080 | "-365065924": "Milesight", 1081 | "366524387": "Joomla", 1082 | "-368490461": "Entronix Energy Management Platform", 1083 | "-373674173": "Digital Keystone (DK)", 1084 | "-374133142": "Flower", 1085 | "-374235895": "Ossia (Provision SR) | Webcam/IP Camera", 1086 | "-375623619": "bintec elmeg", 1087 | "381100274": "Moxapass ioLogik Remote Ethernet I/O Server", 1088 | "-38580010": "Magento", 1089 | "-386189083": "aaPanel", 1090 | "-38705358": "Reolink", 1091 | "-393788031": "Flussonic (Video Streaming)", 1092 | "396533629": "OpenVPN", 1093 | "-398568076": "Wikipedia", 1094 | "-399298961": "IBM Maximo", 1095 | "-401934945": "iomega NAS", 1096 | "40617830": "Frontier Communications", 1097 | "419828698": "Monstra CMS", 1098 | "420473080": "Exostar - Managed Access Gateway", 1099 | "-421986013": "Homegrown Website Hosting", 1100 | "-429287806": "Ebay", 1101 | "430582574": "SmartPing", 1102 | "-43161126": "Slack", 1103 | "432733105": "Pi Star", 1104 | "-434501501": "bit.ly", 1105 | "-435817905": "Cambium Networks", 1106 | "-438482901": "Moodle", 1107 | "440258421": "Dolibarr", 1108 | "-440644339": "Zyxel ZyWALL", 1109 | "442749392": "Microsoft OWA", 1110 | "443944613": "WAMPSERVER", 1111 | "-449283196": "Gogs", 1112 | "-450254253": "idera", 1113 | "-459291760": "Workday", 1114 | "459900502": "ZTE Corporation (Gateway/Appliance)", 1115 | "462223993": "Jeedom (home automation)", 1116 | "-466504476": "Kerio Control Firewall", 1117 | "475145467": "Zimbra", 1118 | "475379699": "Axcient Replibit Management Server", 1119 | "476213314": "Exacq", 1120 | "-476231906": "phpMyAdmin", 1121 | "-476299640": "Hestia", 1122 | "-47932290": "Craft CMS", 1123 | "479413330": "Webmin", 1124 | "483383992": "ISPConfig", 1125 | "-484708885": "Zyxel ZyWALL", 1126 | "489340156": "Smart/OS", 1127 | "494866796": "Aplikasi", 1128 | "-50306417": "Kyocera (Printer)", 1129 | "-505448917": "Discuz!", 1130 | "509789953": "Farming Simulator Dedicated Server", 1131 | "-510925599": "Windows (Microsoft Corp)", 1132 | "512590457": "Trendnet IP camera", 1133 | "516963061": "Gitlab", 1134 | "517158172": "D-Link (router/network)", 1135 | "-519765377": "Parallels Plesk Panel", 1136 | "-520888198": "Blue Iris (Webcam)", 1137 | "-525583313": "OpenAI", 1138 | "-532394952": "CX", 1139 | "538323054": "NethServer Enterprise", 1140 | "538585915": "Lenel", 1141 | "540706145": "Piwigo", 1142 | "541087742": "LiquidFiles", 1143 | "545827989": "MobileIron", 1144 | "-547019147": "Fedora Server", 1145 | "547025948": "Grafana", 1146 | "5471989": "Netcom Technology", 1147 | "547282364": "Keenetic", 1148 | "547474373": "TOTOLINK (network)", 1149 | "552592949": "ASUS AiCloud", 1150 | "552597979": "Sails", 1151 | "552727997": "Atlassian - JIRA", 1152 | "5542029": "NetComWireless (Network)", 1153 | "-560297467": "DVR (Korean)", 1154 | "56079838": "Okta", 1155 | "-560962771": "Facebook", 1156 | "-566516473": "Meriva Security", 1157 | "-569941107": "Fireware Watchguard", 1158 | "575613323": "Canvas LMS (Learning Management)", 1159 | "577446824": "Bluehost", 1160 | "579239725": "Metasploit", 1161 | "-582931176": "NexusPHP", 1162 | "586998417": "Nginx", 1163 | "-587741716": "ADB Broadband (Network)", 1164 | "-590892202": "Surfilter SSL VPN Portal", 1165 | "593396886": "StackOverflow", 1166 | "-594256627": "Netis (network devices)", 1167 | "-600508822": "iomega NAS", 1168 | "602431586": "Palo Alto Login Portal", 1169 | "603314": "Redmine", 1170 | "607846949": "Hitron Technologies", 1171 | "-609520537": "OpenGeo Suite", 1172 | "-613216179": "iomega NAS", 1173 | "-614457039": "Plesk", 1174 | "-617743584": "Odoo", 1175 | "-624805968": "Cloudinary", 1176 | "-625364318": "OkoFEN Pellematic", 1177 | "628535358": "Atlassian", 1178 | "-629047854": "Jetty 404", 1179 | "-630493013": "DokuWiki", 1180 | "-631002664": "Kerio Control Firewall", 1181 | "631108382": "SonicWALL", 1182 | "-632070065": "Apache Haus", 1183 | "-632583950": "Shoutcast Server", 1184 | "-644617577": "SmartLAN/G", 1185 | "648382619": "Drupal", 1186 | "-649378830": "WHM", 1187 | "-652508439": "Parallels Plesk Panel", 1188 | "-655683626": "PRTG Network Monitor", 1189 | "-656811182": "Jboss", 1190 | "656868270": "iomega NAS", 1191 | "657337228": "Harbor", 1192 | "661332347": "MOBOTIX Camera", 1193 | "669847331": "Unify", 1194 | "671221099": "innovaphone", 1195 | "674449329": "Adserver", 1196 | "-675839242": "openWRT Luci", 1197 | "-676077969": "Niagara Web Server", 1198 | "-677167908": "Kerio Connect (Webmail)", 1199 | "679065580": "Loxone Web Interface", 1200 | "-687783882": "ClaimTime (Ramsell Public Health \u0026 Safety)", 1201 | "688609340": "Cockpit Project", 1202 | "-689902428": "iomega NAS", 1203 | "-692947551": "Ruijie Networks (Login)", 1204 | "-693082538": "openmediavault (NAS)", 1205 | "693122507": "WordPress", 1206 | "-694426121": "Twonky", 1207 | "-696586294": "LinkedIn", 1208 | "-697231354": "Ubiquiti - AirOS", 1209 | "-697407367": "Console WPServeur", 1210 | "698624197": "Redash", 1211 | "-702384832": "TCN", 1212 | "705143395": "Atlassian", 1213 | "706602230": "VisualSVN Server", 1214 | "708578229": "Google", 1215 | "711742418": "Hitron Technologies Inc.", 1216 | "716989053": "Amazon AWS", 1217 | "72005642": "RemObjects SDK / Remoting SDK for .NET HTTP Server Microsoft", 1218 | "-723685921": "Oracle Cloud", 1219 | "726817668": "KeyHelp (Keyweb AG)", 1220 | "727253975": "Paradox IP Module", 1221 | "-727481036": "GigaHost", 1222 | "728788645": "IBM Notes", 1223 | "-72996541": "ONESOURCE", 1224 | "731374291": "HFS (HTTP File Server)", 1225 | "-732601837": "Linksys Smart Wi-Fi", 1226 | "-736276076": "MyASP", 1227 | "-740211187": "Bing", 1228 | "743365239": "Atlassian", 1229 | "74935566": "WindRiver-WebServer", 1230 | "75230260": "Kibana", 1231 | "758890177": "Tumblr", 1232 | "-759108386": "Tongda", 1233 | "-759754862": "Kibana", 1234 | "760540646": "Xtream UI", 1235 | "762074255": "qdPM", 1236 | "76658403": "TheTradeDesk", 1237 | "-766957661": "MDaemon Webmail", 1238 | "768231242": "JAWS Web Server (IP Camera)", 1239 | "768816037": "UniFi Video Controller (airVision)", 1240 | "77044418": "Polycom", 1241 | "-771764544": "Parallels Plesk Panel", 1242 | "774252049": "FastPanel Hosting", 1243 | "77699822": "pyLoad Interface web", 1244 | "-778412836": "BookStack", 1245 | "-778949486": "SugarCRM", 1246 | "780351152": "Microweber", 1247 | "-784265586": "FreeNAS", 1248 | "784872924": "Lucee!", 1249 | "786476039": "AppsFlyer", 1250 | "786533217": "OpenStack", 1251 | "788771792": "Airwatch", 1252 | "794809961": "CheckPoint", 1253 | "804949239": "Cisco Meraki Dashboard", 1254 | "807156787": "Gigapod", 1255 | "-808437027": "Nginx", 1256 | "812385209": "Solarwinds Serv-U FTP Server", 1257 | "81586312": "Jenkins", 1258 | "816588900": "Apache ShardingSphere", 1259 | "-816821232": "GitLab", 1260 | "829321644": "BOMGAR Support Portal", 1261 | "-831826827": "NOS Router", 1262 | "833190513": "Dahua Storm (IP Camera)", 1263 | "-835596734": "poste.io", 1264 | "-839455805": "HillStone Networks", 1265 | "-842192932": "FireEye", 1266 | "-848408438": "i-MSCP - Multi Server Control Panel", 1267 | "-850502287": "Buddy", 1268 | "855273746": "JIRA", 1269 | "-85666451": "DOX - Document Exchange Service", 1270 | "86919334": "ServiceNow", 1271 | "-873627015": "HeroSpeed Digital Technology Co. (NVR/IPC/XVR)", 1272 | "876876147": "Virtua Cobranca", 1273 | "878647854": "BIG-IP", 1274 | "-878891718": "Twonky Server (Media Streaming)", 1275 | "882208493": "Lantronix (Spider)", 1276 | "-882760066": "ZyXEL (Network)", 1277 | "-884776764": "Huawei (Network)", 1278 | "889579989": "Zultys", 1279 | "889652940": "Archibus", 1280 | "-890342445": "Kaco Web", 1281 | "-890810109": "BioTime", 1282 | "-890913700": "OneDoor", 1283 | "-892542227": "iMIS", 1284 | "892542951": "Zabbix", 1285 | "89321398": "Askey Cable Modem", 1286 | "-895890586": "PLEX Server", 1287 | "-895963602": "Jupyter Notebook", 1288 | "896082112": "Koha", 1289 | "896412703": "IW", 1290 | "899301681": "Splynx", 1291 | "899457975": "Cisco", 1292 | "90066852": "JAWS Web Server (IP Camera)", 1293 | "902521196": "Netflix", 1294 | "-902890504": "Universal Media Server", 1295 | "903086190": "Honeywell", 1296 | "904434662": "Loxone (Automation)", 1297 | "905744673": "HP Printer / Server", 1298 | "905796143": "Medallia", 1299 | "90680708": "Domoticz", 1300 | "-907924012": "Postian Email System", 1301 | "914622066": "ServiceNow", 1302 | "-915768386": "TwonkyMedia", 1303 | "916642917": "Multilaser", 1304 | "917966895": "Gogs", 1305 | "919189549": "Rundeck", 1306 | "-919788577": "Vault", 1307 | "920326019": "Roundcube Webmail", 1308 | "920338972": "Linode", 1309 | "-923088984": "OpenStack", 1310 | "-923693877": "motionEye (camera)", 1311 | "-926374507": "Rakuten", 1312 | "926501571": "Handle Proxy", 1313 | "929825723": "WAMPSERVER", 1314 | "932345713": "Promtail", 1315 | "936297245": "Twitch", 1316 | "937999361": "JBoss Application Server 7", 1317 | "938616453": "Mersive Solstice", 1318 | "943925975": "ZyXEL", 1319 | "944969688": "Deluge", 1320 | "945408572": "Fortinet - Forticlient", 1321 | "95271369": "FireEye", 1322 | "955369722": "Sitecore", 1323 | "-956471263": "Web Client Pro", 1324 | "966563415": "WordPress Org", 1325 | "967636089": "MobileIron", 1326 | "970132176": "3CX Phone System", 1327 | "-972810761": "HostMonster - Web hosting", 1328 | "97604680": "Tandberg", 1329 | "-976235259": "Roundcube Webmail", 1330 | "-978656757": "NETIASPOT (Network)", 1331 | "-979181278": "KeyTalk WEB", 1332 | "979634648": "StruxureWare (Schneider Electric)", 1333 | "980692677": "Cake PHP", 1334 | "-981606721": "Plesk", 1335 | "981867722": "Atlassian - JIRA", 1336 | "-982373272": "Nieznana domena", 1337 | "-982946776": "MT-Link", 1338 | "983734701": "Password Management Client", 1339 | "984358620": "Blynk Administration", 1340 | "-986201618": "Duo Security", 1341 | "-986328191": "NetWin", 1342 | "986596052": "SuccessMaker", 1343 | "-986678507": "ISP Manager", 1344 | "-986816620": "OpenRG", 1345 | "987967490": "Huawei (Network)", 1346 | "988422585": "CapRover", 1347 | "989289239": "MoveIT", 1348 | "-991123252": "VMware Horizon", 1349 | "99395752": "Slack", 1350 | "99432374": "MDaemon Remote Administration", 1351 | "-995224160": "Freenom", 1352 | "-996264874": "Elsys Cloud", 1353 | "-996836732": "openmediavault web", 1354 | "998138196": "iomega NAS", 1355 | "-998320869": "F-Secure Policy Manager Server", 1356 | "998588252": "Clirik", 1357 | "999357577": "Hikvision camera" 1358 | } -------------------------------------------------------------------------------- /pkg/favirecon/favirecon.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon 8 | 9 | import ( 10 | "bufio" 11 | "errors" 12 | "fmt" 13 | "os" 14 | "sync" 15 | 16 | "github.com/edoardottt/favirecon/pkg/input" 17 | "github.com/edoardottt/favirecon/pkg/output" 18 | "github.com/edoardottt/golazy" 19 | "github.com/projectdiscovery/gologger" 20 | fileutil "github.com/projectdiscovery/utils/file" 21 | ) 22 | 23 | type Runner struct { 24 | Input chan string 25 | Output chan output.Found 26 | Result output.Result 27 | UserAgent string 28 | InWg *sync.WaitGroup 29 | OutWg *sync.WaitGroup 30 | Options input.Options 31 | OutMutex *sync.Mutex 32 | } 33 | 34 | // New takes as input the options and returns 35 | // a new runner. 36 | func New(options *input.Options) Runner { 37 | if options.FileOutput != "" { 38 | _, err := os.Create(options.FileOutput) 39 | if err != nil { 40 | gologger.Error().Msgf("%s", err) 41 | } 42 | } 43 | 44 | return Runner{ 45 | Input: make(chan string, options.Concurrency), 46 | Output: make(chan output.Found, options.Concurrency), 47 | Result: output.New(), 48 | UserAgent: golazy.GenerateRandomUserAgent(), 49 | InWg: &sync.WaitGroup{}, 50 | OutWg: &sync.WaitGroup{}, 51 | Options: *options, 52 | OutMutex: &sync.Mutex{}, 53 | } 54 | } 55 | 56 | // Run takes the input and executes all the tasks 57 | // specified in the options. 58 | func (r *Runner) Run() { 59 | r.InWg.Add(1) 60 | 61 | go pushInput(r) 62 | r.InWg.Add(1) 63 | 64 | go execute(r) 65 | r.OutWg.Add(1) 66 | 67 | go pullOutput(r) 68 | r.InWg.Wait() 69 | 70 | close(r.Output) 71 | r.OutWg.Wait() 72 | } 73 | 74 | func pushInput(r *Runner) { 75 | defer r.InWg.Done() 76 | 77 | if fileutil.HasStdin() { 78 | scanner := bufio.NewScanner(os.Stdin) 79 | for scanner.Scan() { 80 | if r.Options.Cidr { 81 | ips, err := handleCidrInput(scanner.Text()) 82 | if err != nil { 83 | gologger.Error().Msg(err.Error()) 84 | } else { 85 | for _, ip := range ips { 86 | r.Input <- ip 87 | } 88 | } 89 | } else { 90 | r.Input <- scanner.Text() 91 | } 92 | } 93 | } 94 | 95 | if r.Options.FileInput != "" { 96 | for _, line := range golazy.RemoveDuplicateValues(golazy.ReadFileLineByLine(r.Options.FileInput)) { 97 | if r.Options.Cidr { 98 | ips, err := handleCidrInput(line) 99 | if err != nil { 100 | gologger.Error().Msg(err.Error()) 101 | } else { 102 | for _, ip := range ips { 103 | r.Input <- ip 104 | } 105 | } 106 | } else { 107 | r.Input <- line 108 | } 109 | } 110 | } 111 | 112 | if r.Options.Input != "" { 113 | if r.Options.Cidr { 114 | ips, err := handleCidrInput(r.Options.Input) 115 | if err != nil { 116 | gologger.Error().Msg(err.Error()) 117 | } else { 118 | for _, ip := range ips { 119 | r.Input <- ip 120 | } 121 | } 122 | } else { 123 | r.Input <- r.Options.Input 124 | } 125 | } 126 | 127 | close(r.Input) 128 | } 129 | 130 | /* 131 | Try /favicon.ico first. Most common and lightweight check. 132 | Accept it only if: 133 | - Status is 200. 134 | - Content-Type is an image. 135 | - Body length is > 0 (some sites return 200 but empty). 136 | If valid, hash and lookup. ✅ Done. 137 | 138 | Fallback to parsing in the HTML : 139 | - Fetch original input URL (not with /favicon.ico appended). 140 | - Parse the HTML. 141 | - Extract: rel=icon, rel=shortcut icon, rel=apple-touch-icon 142 | If href is: 143 | - A relative path → resolve against base URL. 144 | - A full URL → use as-is. 145 | - Data URL → decode and hash directly. 146 | */ 147 | func execute(r *Runner) { 148 | defer r.InWg.Done() 149 | 150 | rl := rateLimiter(r) 151 | 152 | for i := 0; i < r.Options.Concurrency; i++ { 153 | r.InWg.Add(1) 154 | 155 | go func() { 156 | defer r.InWg.Done() 157 | 158 | client, err := customClient(&r.Options) 159 | if err != nil { 160 | gologger.Error().Msgf("%s", err) 161 | 162 | return 163 | } 164 | 165 | for value := range r.Input { 166 | faviconURL, err := PrepareURL(value) 167 | if err != nil { 168 | gologger.Error().Msgf("%s", err) 169 | 170 | continue 171 | } 172 | 173 | rl.Take() 174 | 175 | found, result, err := getFavicon(faviconURL, r.UserAgent, client) 176 | if err != nil { 177 | if errors.Is(err, ErrFaviconNotFound) { 178 | gologger.Debug().Msgf("%s for url %s", err.Error(), value) 179 | } else { 180 | gologger.Error().Msgf("%s", err) 181 | } 182 | } 183 | 184 | if !found { 185 | gologger.Debug().Msgf("Fallback to HTML parsing for %s", value) 186 | 187 | faviconURL, result, err = extractFaviconFromHTML(value, r.UserAgent, client) 188 | if err != nil { 189 | gologger.Debug().Msgf("Favicon not found for %s: %s", value, err) 190 | continue 191 | } 192 | } 193 | 194 | foundDB, err := CheckFavicon(result, r.Options.Hash, faviconURL) 195 | if err != nil { 196 | if r.Options.Verbose { 197 | gologger.Error().Msgf("%s", err) 198 | } 199 | 200 | continue 201 | } 202 | 203 | r.Output <- output.Found{URL: value, Name: foundDB, Hash: result} 204 | } 205 | }() 206 | } 207 | } 208 | 209 | func pullOutput(r *Runner) { 210 | defer r.OutWg.Done() 211 | 212 | for o := range r.Output { 213 | if !r.Result.Printed(o.URL) { 214 | r.OutWg.Add(1) 215 | 216 | go writeOutput(r.OutWg, r.OutMutex, &r.Options, o) 217 | } 218 | } 219 | } 220 | 221 | func writeOutput(wg *sync.WaitGroup, m *sync.Mutex, options *input.Options, o output.Found) { 222 | defer wg.Done() 223 | 224 | if options.FileOutput != "" && options.Output == nil { 225 | file, err := os.OpenFile(options.FileOutput, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644) 226 | if err != nil { 227 | gologger.Fatal().Msg(err.Error()) 228 | } 229 | 230 | options.Output = file 231 | } 232 | 233 | m.Lock() 234 | 235 | out := o.Format() 236 | 237 | if options.JSON { 238 | outJSON, err := o.FormatJSON() 239 | if err != nil { 240 | gologger.Fatal().Msg(err.Error()) 241 | } 242 | 243 | out = string(outJSON) 244 | } 245 | 246 | if options.Output != nil { 247 | if _, err := options.Output.Write([]byte(out + "\n")); err != nil && options.Verbose { 248 | gologger.Fatal().Msg(err.Error()) 249 | } 250 | } 251 | 252 | m.Unlock() 253 | 254 | fmt.Println(out) 255 | } 256 | -------------------------------------------------------------------------------- /pkg/favirecon/favirecon_test.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon_test 8 | 9 | import ( 10 | "testing" 11 | 12 | "github.com/edoardottt/favirecon/pkg/favirecon" 13 | "github.com/stretchr/testify/require" 14 | ) 15 | 16 | func TestGetFaviconHash(t *testing.T) { 17 | tests := []struct { 18 | name string 19 | input []byte 20 | want string 21 | }{ 22 | { 23 | name: "Test #1", 24 | input: []byte("test"), 25 | want: "-1541278541", 26 | }, 27 | { 28 | name: "Test #2", 29 | input: []byte("wiytl8q2yvb58q2y58i34yv38l4yo853ybtv853y4vv38y4ov38y8oyv4348yoylo4"), 30 | want: "1897381022", 31 | }, 32 | } 33 | for _, tt := range tests { 34 | t.Run(tt.name, func(t *testing.T) { 35 | got := favirecon.GetFaviconHash(tt.input) 36 | require.Equal(t, tt.want, got) 37 | }) 38 | } 39 | } 40 | 41 | func TestPrepareURL(t *testing.T) { 42 | tests := []struct { 43 | name string 44 | input string 45 | want string 46 | err error 47 | }{ 48 | { 49 | name: "empty input", 50 | input: "", 51 | want: "", 52 | err: favirecon.ErrMalformedURL, 53 | }, 54 | { 55 | name: "too short input URL", 56 | input: "a.b", 57 | want: "", 58 | err: favirecon.ErrMalformedURL, 59 | }, 60 | { 61 | name: "URL without protocol without path", 62 | input: "edoardottt.com", 63 | want: "http://edoardottt.com/favicon.ico", 64 | err: nil, 65 | }, 66 | { 67 | name: "URL without protocol with path", 68 | input: "edoardottt.com/", 69 | want: "http://edoardottt.com/favicon.ico", 70 | err: nil, 71 | }, 72 | { 73 | name: "URL with protocol without path", 74 | input: "http://edoardottt.com", 75 | want: "http://edoardottt.com/favicon.ico", 76 | err: nil, 77 | }, 78 | { 79 | name: "URL with protocol and path (no final slash)", 80 | input: "http://edoardottt.com/test", 81 | want: "http://edoardottt.com/test/favicon.ico", 82 | err: nil, 83 | }, 84 | { 85 | name: "URL with protocol and path (final slash)", 86 | input: "http://edoardottt.com/test/", 87 | want: "http://edoardottt.com/test/favicon.ico", 88 | err: nil, 89 | }, 90 | { 91 | name: "URL without protocol and path (final slash) with icon", 92 | input: "edoardottt.com/test/favicon.ico", 93 | want: "http://edoardottt.com/test/favicon.ico", 94 | err: nil, 95 | }, 96 | { 97 | name: "URL with protocol and path (final slash) with icon", 98 | input: "http://edoardottt.com/test/favicon.ico", 99 | want: "http://edoardottt.com/test/favicon.ico", 100 | err: nil, 101 | }, 102 | } 103 | for _, tt := range tests { 104 | t.Run(tt.name, func(t *testing.T) { 105 | got, err := favirecon.PrepareURL(tt.input) 106 | require.Equal(t, tt.err, err) 107 | require.Equal(t, tt.want, got) 108 | }) 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /pkg/favirecon/html.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon 8 | 9 | import ( 10 | "encoding/base64" 11 | "errors" 12 | "net/http" 13 | "strings" 14 | 15 | "github.com/PuerkitoBio/goquery" 16 | ) 17 | 18 | var ( 19 | ErrFaviconNotFound = errors.New("favicon not found") 20 | ErrFaviconLinkTagNotFound = errors.New("no favicon link tag found") 21 | ErrHTMLNotFetched = errors.New("failed to fetch HTML") 22 | ErrInvalidDataURI = errors.New("invalid data URI") 23 | ) 24 | 25 | func extractFaviconFromHTML(pageURL, ua string, client *http.Client) (string, string, error) { 26 | req, err := http.NewRequest(http.MethodGet, pageURL, nil) 27 | if err != nil { 28 | return "", "", err 29 | } 30 | 31 | req.Header.Add("User-Agent", ua) 32 | 33 | resp, err := client.Do(req) 34 | if err != nil { 35 | return "", "", err 36 | } 37 | defer resp.Body.Close() 38 | 39 | if resp.StatusCode != http.StatusOK { 40 | return "", "", ErrHTMLNotFetched 41 | } 42 | 43 | doc, err := goquery.NewDocumentFromReader(resp.Body) 44 | if err != nil { 45 | return "", "", err 46 | } 47 | 48 | var faviconHref string 49 | 50 | doc.Find("link").EachWithBreak(func(i int, s *goquery.Selection) bool { 51 | rel, _ := s.Attr("rel") 52 | href, ok := s.Attr("href") 53 | 54 | if ok && strings.Contains(strings.ToLower(rel), "icon") { 55 | faviconHref = href 56 | return false // break loop 57 | } 58 | 59 | return true 60 | }) 61 | 62 | if faviconHref == "" { 63 | return "", "", ErrFaviconLinkTagNotFound 64 | } 65 | 66 | // handle base64 data 67 | if strings.HasPrefix(faviconHref, "data:image") { 68 | base64Data := strings.SplitN(faviconHref, ",", 2) 69 | if len(base64Data) != 2 { 70 | return "", "", ErrInvalidDataURI 71 | } 72 | 73 | decoded, err := base64.StdEncoding.DecodeString(base64Data[1]) 74 | if err != nil { 75 | return "", "", err 76 | } 77 | 78 | return faviconHref, GetFaviconHash(decoded), nil 79 | } 80 | 81 | faviconURL := resolveURL(pageURL, faviconHref) 82 | 83 | found, favicon, err := getFavicon(faviconURL, ua, client) 84 | if err != nil { 85 | return faviconURL, "", err 86 | } 87 | 88 | if !found { 89 | return "", "", ErrFaviconNotFound 90 | } 91 | 92 | return faviconURL, favicon, nil 93 | } 94 | -------------------------------------------------------------------------------- /pkg/favirecon/http.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon 8 | 9 | import ( 10 | "crypto/tls" 11 | "io" 12 | "net" 13 | "net/http" 14 | "net/url" 15 | "time" 16 | 17 | "github.com/edoardottt/favirecon/pkg/input" 18 | "github.com/projectdiscovery/gologger" 19 | ) 20 | 21 | const ( 22 | TLSHandshakeTimeout = 10 23 | KeepAlive = 30 24 | MaxIdleConns = 100 25 | MaxIdleConnsPerHost = 10 26 | IdleConnTimeout = 90 27 | ) 28 | 29 | func customClient(options *input.Options) (*http.Client, error) { 30 | transport := http.Transport{ 31 | TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, 32 | Proxy: http.ProxyFromEnvironment, 33 | DialContext: (&net.Dialer{ 34 | Timeout: time.Duration(options.Timeout) * time.Second, 35 | KeepAlive: KeepAlive * time.Second, 36 | }).DialContext, 37 | TLSHandshakeTimeout: TLSHandshakeTimeout * time.Second, 38 | MaxIdleConns: MaxIdleConns, 39 | MaxIdleConnsPerHost: MaxIdleConnsPerHost, 40 | IdleConnTimeout: IdleConnTimeout * time.Second, 41 | } 42 | 43 | if options.Proxy != "" { 44 | u, err := url.Parse(options.Proxy) 45 | if err != nil { 46 | return nil, err 47 | } 48 | 49 | transport.Proxy = http.ProxyURL(u) 50 | 51 | if options.Verbose { 52 | gologger.Debug().Msgf("Using Proxy %s", options.Proxy) 53 | } 54 | } 55 | 56 | client := http.Client{ 57 | Transport: &transport, 58 | Timeout: time.Duration(options.Timeout) * time.Second, 59 | } 60 | 61 | return &client, nil 62 | } 63 | 64 | func getFavicon(url, ua string, client *http.Client) (bool, string, error) { 65 | req, err := http.NewRequest(http.MethodGet, url, nil) 66 | if err != nil { 67 | return false, "", err 68 | } 69 | 70 | gologger.Debug().Msgf("Checking favicon for %s", url) 71 | 72 | req.Header.Add("User-Agent", ua) 73 | 74 | resp, err := client.Do(req) 75 | if err != nil { 76 | return false, "", err 77 | } 78 | 79 | defer resp.Body.Close() 80 | 81 | if resp.StatusCode != http.StatusOK { 82 | return false, "", ErrFaviconNotFound 83 | } 84 | 85 | body, err := io.ReadAll(resp.Body) 86 | if err != nil { 87 | return false, "", err 88 | } 89 | 90 | if len(body) == 0 { 91 | return false, "", ErrEmptyBody 92 | } 93 | 94 | return true, GetFaviconHash(body), nil 95 | } 96 | -------------------------------------------------------------------------------- /pkg/favirecon/ratelimit.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon 8 | 9 | import "go.uber.org/ratelimit" 10 | 11 | func rateLimiter(r *Runner) ratelimit.Limiter { 12 | var ratelimiter ratelimit.Limiter 13 | if r.Options.RateLimit > 0 { 14 | ratelimiter = ratelimit.New(r.Options.RateLimit) 15 | } else { 16 | ratelimiter = ratelimit.NewUnlimited() 17 | } 18 | 19 | return ratelimiter 20 | } 21 | -------------------------------------------------------------------------------- /pkg/favirecon/url.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon 8 | 9 | import ( 10 | "errors" 11 | "net/url" 12 | "strings" 13 | ) 14 | 15 | const ( 16 | MinURLLength = 4 17 | ) 18 | 19 | var ( 20 | ErrMalformedURL = errors.New("malformed input URL") 21 | ) 22 | 23 | func resolveURL(baseURL, ref string) string { 24 | base, err := url.Parse(baseURL) 25 | if err != nil { 26 | return ref // fallback 27 | } 28 | 29 | u, err := url.Parse(ref) 30 | if err != nil { 31 | return ref 32 | } 33 | 34 | return base.ResolveReference(u).String() 35 | } 36 | 37 | // PrepareURL takes as input a string and prepares 38 | // the input URL in order to get the favicon icon. 39 | func PrepareURL(input string) (string, error) { 40 | if len(input) < MinURLLength { 41 | return "", ErrMalformedURL 42 | } 43 | 44 | if !strings.Contains(input, "://") { 45 | input = "http://" + input 46 | } 47 | 48 | u, err := url.Parse(input) 49 | if err != nil { 50 | return "", err 51 | } 52 | 53 | if !strings.HasSuffix(u.Path, ".ico") { 54 | if !strings.HasSuffix(u.Path, "/") { 55 | u.Path += "/" 56 | } 57 | 58 | u.Path += "favicon.ico" 59 | } 60 | 61 | return u.Scheme + "://" + u.Host + u.Path, nil 62 | } 63 | -------------------------------------------------------------------------------- /pkg/favirecon/utils.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package favirecon 8 | 9 | import ( 10 | "bytes" 11 | "encoding/base64" 12 | "errors" 13 | "fmt" 14 | "net" 15 | 16 | "github.com/projectdiscovery/mapcidr" 17 | "github.com/twmb/murmur3" 18 | ) 19 | 20 | var ( 21 | ErrCidrBadFormat = errors.New("malformed input CIDR") 22 | ErrEmptyBody = errors.New("empty body") 23 | ) 24 | 25 | func contains(s []string, e string) bool { 26 | for _, a := range s { 27 | if a == e { 28 | return true 29 | } 30 | } 31 | 32 | return false 33 | } 34 | 35 | // base64Content : RFC2045. 36 | func base64Content(input []byte) []byte { 37 | inputEncoded := base64.StdEncoding.EncodeToString(input) 38 | buffer := bytes.Buffer{} 39 | 40 | for i := 0; i < len(inputEncoded); i++ { 41 | ch := inputEncoded[i] 42 | buffer.WriteByte(ch) 43 | 44 | if (i+1)%76 == 0 { // 76 bytes. 45 | buffer.WriteByte('\n') 46 | } 47 | } 48 | 49 | buffer.WriteByte('\n') 50 | 51 | return buffer.Bytes() 52 | } 53 | 54 | // GetFaviconHash computes the murmur3 hash. 55 | func GetFaviconHash(input []byte) string { 56 | b64 := base64Content(input) 57 | return fmt.Sprint(int32(murmur3.Sum32(b64))) 58 | } 59 | 60 | func handleCidrInput(inputCidr string) ([]string, error) { 61 | if !isCidr(inputCidr) { 62 | return nil, ErrCidrBadFormat 63 | } 64 | 65 | ips, err := mapcidr.IPAddresses(inputCidr) 66 | if err != nil { 67 | return nil, err 68 | } 69 | 70 | return ips, nil 71 | } 72 | 73 | // isCidr determines if the given ip is a cidr range. 74 | func isCidr(inputCidr string) bool { 75 | _, _, err := net.ParseCIDR(inputCidr) 76 | return err == nil 77 | } 78 | -------------------------------------------------------------------------------- /pkg/input/check.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package input 8 | 9 | import ( 10 | "errors" 11 | "fmt" 12 | "net/url" 13 | 14 | fileutil "github.com/projectdiscovery/utils/file" 15 | ) 16 | 17 | var ( 18 | ErrMutexFlags = errors.New("incompatible flags specified") 19 | ErrNoInput = errors.New("no input specified") 20 | ErrNegativeValue = errors.New("must be positive") 21 | ) 22 | 23 | func (options *Options) validateOptions() error { 24 | if options.Silent && options.Verbose { 25 | return fmt.Errorf("%w: %s and %s", ErrMutexFlags, "silent", "verbose") 26 | } 27 | 28 | if options.Input == "" && options.FileInput == "" && !fileutil.HasStdin() { 29 | return fmt.Errorf("%w", ErrNoInput) 30 | } 31 | 32 | if options.Concurrency <= 0 { 33 | return fmt.Errorf("concurrency: %w", ErrNegativeValue) 34 | } 35 | 36 | if options.RateLimit != 0 && options.RateLimit <= 0 { 37 | return fmt.Errorf("rate limit: %w", ErrNegativeValue) 38 | } 39 | 40 | if options.Proxy != "" && !checkProxy(options.Proxy) { 41 | _, err := url.Parse(options.Proxy) 42 | return fmt.Errorf("proxy URL: %w", err) 43 | } 44 | 45 | return nil 46 | } 47 | 48 | func checkProxy(proxy string) bool { 49 | if len(proxy) == 0 { 50 | return false 51 | } 52 | 53 | _, err := url.Parse(proxy) 54 | 55 | return err == nil 56 | } 57 | -------------------------------------------------------------------------------- /pkg/input/flags.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package input 8 | 9 | import ( 10 | "io" 11 | "os" 12 | "strings" 13 | 14 | "github.com/edoardottt/favirecon/pkg/output" 15 | "github.com/projectdiscovery/goflags" 16 | "github.com/projectdiscovery/gologger" 17 | "github.com/projectdiscovery/gologger/levels" 18 | ) 19 | 20 | const ( 21 | DefaultTimeout = 10 22 | DefaultConcurrency = 50 23 | DefaultRateLimit = 0 24 | ) 25 | 26 | // Options struct specifies how the tool 27 | // will behave. 28 | type Options struct { 29 | Input string 30 | FileInput string 31 | FileOutput string 32 | Hash goflags.StringSlice 33 | Verbose bool 34 | Output io.Writer 35 | Silent bool 36 | Concurrency int 37 | Timeout int 38 | Cidr bool 39 | RateLimit int 40 | Proxy string 41 | JSON bool 42 | } 43 | 44 | // configureOutput configures the output on the screen. 45 | func (options *Options) configureOutput() { 46 | if options.Silent { 47 | gologger.DefaultLogger.SetMaxLevel(levels.LevelSilent) 48 | } else if options.Verbose { 49 | gologger.DefaultLogger.SetMaxLevel(levels.LevelVerbose) 50 | } 51 | } 52 | 53 | // ParseOptions parses the command line options for application. 54 | func ParseOptions() *Options { 55 | options := &Options{} 56 | 57 | flagSet := goflags.NewFlagSet() 58 | flagSet.SetDescription(`Discover new target domains using Content Security Policy.`) 59 | 60 | // Input 61 | flagSet.CreateGroup("input", "Input", 62 | flagSet.StringVarP(&options.Input, "url", "u", "", `Input domain`), 63 | flagSet.StringVarP(&options.FileInput, "list", "l", "", `File containing input domains`), 64 | flagSet.BoolVar(&options.Cidr, "cidr", false, `Interpret input as CIDR`), 65 | ) 66 | 67 | flagSet.CreateGroup("configs", "Configurations", 68 | flagSet.StringSliceVarP(&options.Hash, "hash", "", nil, `Filter results having these favicon hashes (comma separated)`, goflags.CommaSeparatedStringSliceOptions), 69 | flagSet.IntVarP(&options.Concurrency, "concurrency", "c", DefaultConcurrency, `Concurrency level`), 70 | flagSet.IntVarP(&options.Timeout, "timeout", "t", DefaultTimeout, `Connection timeout in seconds`), 71 | flagSet.IntVarP(&options.RateLimit, "rate-limit", "rl", DefaultRateLimit, `Set a rate limit (per second)`), 72 | flagSet.StringVarP(&options.Proxy, "proxy", "px", "", `Set a proxy server (URL)`), 73 | ) 74 | 75 | // Output 76 | flagSet.CreateGroup("output", "Output", 77 | flagSet.StringVarP(&options.FileOutput, "output", "o", "", `File to write output results`), 78 | flagSet.BoolVarP(&options.Verbose, "verbose", "v", false, `Verbose output`), 79 | flagSet.BoolVarP(&options.Silent, "silent", "s", false, `Silent output. Print only results`), 80 | flagSet.BoolVarP(&options.JSON, "json", "j", false, `JSON output`), 81 | ) 82 | 83 | if help() || noArgs() { 84 | output.ShowBanner() 85 | } 86 | 87 | if err := flagSet.Parse(); err != nil { 88 | output.ShowBanner() 89 | gologger.Fatal().Msgf("%s\n", err) 90 | } 91 | 92 | // Read the inputs and configure the logging. 93 | options.configureOutput() 94 | 95 | if err := options.validateOptions(); err != nil { 96 | output.ShowBanner() 97 | gologger.Fatal().Msgf("%s\n", err) 98 | } 99 | 100 | output.ShowBanner() 101 | 102 | return options 103 | } 104 | 105 | func help() bool { 106 | // help usage asked by user. 107 | for _, arg := range os.Args { 108 | argStripped := strings.Trim(arg, "-") 109 | if argStripped == "h" || argStripped == "help" { 110 | return true 111 | } 112 | } 113 | 114 | return false 115 | } 116 | 117 | func noArgs() bool { 118 | // User passed no flag. 119 | return len(os.Args) < 2 120 | } 121 | -------------------------------------------------------------------------------- /pkg/output/banner.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package output 8 | 9 | import "github.com/projectdiscovery/gologger" 10 | 11 | // nolint: gochecknoglobals 12 | var printed = false 13 | 14 | const ( 15 | Version = "v1.0.0" 16 | banner = ` ____ _ 17 | / __/___ __ __(_)_______ _________ ____ 18 | / /_/ __ ` + `\/ | / / / ___/ _ \/ ___/ __ \/ __ \ 19 | / __/ /_/ /| |/ / / / / __/ /__/ /_/ / / / / 20 | /_/ \__,_/ |___/_/_/ \___/\___/\____/_/ /_/ 21 | ` 22 | ) 23 | 24 | func ShowBanner() { 25 | if !printed { 26 | gologger.Print().Msgf("%s%s\n\n", banner, Version) 27 | gologger.Print().Msgf("\t\t@edoardottt, https://edoardottt.com/\n") 28 | gologger.Print().Msgf("\t\t https://github.com/edoardottt/\n\n") 29 | 30 | printed = true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /pkg/output/output.go: -------------------------------------------------------------------------------- 1 | /* 2 | favirecon - Use favicon.ico to improve your target recon phase. Quickly detect technologies, WAF, exposed panels, known services. 3 | 4 | This repository is under MIT License https://github.com/edoardottt/favirecon/blob/main/LICENSE 5 | */ 6 | 7 | package output 8 | 9 | import ( 10 | "encoding/json" 11 | "fmt" 12 | "sync" 13 | ) 14 | 15 | type Found struct { 16 | URL string `json:"URL,omitempty"` 17 | Hash string `json:"Hash,omitempty"` 18 | Name string `json:"Name,omitempty"` 19 | } 20 | 21 | type Result struct { 22 | Map map[string]struct{} 23 | Mutex *sync.RWMutex 24 | } 25 | 26 | // New returns a new Result struct. 27 | func New() Result { 28 | return Result{ 29 | Map: map[string]struct{}{}, 30 | Mutex: &sync.RWMutex{}, 31 | } 32 | } 33 | 34 | // Printed checks if a string has been previously printed. 35 | func (o *Result) Printed(found string) bool { 36 | o.Mutex.RLock() 37 | if _, ok := o.Map[found]; !ok { 38 | o.Mutex.RUnlock() 39 | o.Mutex.Lock() 40 | o.Map[found] = struct{}{} 41 | o.Mutex.Unlock() 42 | 43 | return false 44 | } else { 45 | o.Mutex.RUnlock() 46 | } 47 | 48 | return true 49 | } 50 | 51 | // Format returns a string ready to be printed. 52 | func (f *Found) Format() string { 53 | return fmt.Sprintf("[%s] [%s] %s", f.Hash, f.Name, f.URL) 54 | } 55 | 56 | // FormatJSON returns the input as JSON string. 57 | func (f *Found) FormatJSON() ([]byte, error) { 58 | jsonOutput, err := json.Marshal(f) 59 | if err != nil { 60 | return nil, err 61 | } 62 | 63 | return jsonOutput, nil 64 | } 65 | -------------------------------------------------------------------------------- /scripts/check-dups.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # https://github.com/edoardottt/favirecon 4 | # 5 | # This script checks if there are duplicate entries in the db.json file. 6 | # 7 | 8 | file="pkg/favirecon/db.json" 9 | 10 | dups=$(cat $file | sort | uniq -d) 11 | 12 | if [[ -n $dups ]]; then 13 | echo "[ ERR ] DUPLICATE ENTRIES FOUND!" 14 | echo "$dups" 15 | exit 1 16 | else 17 | echo "[ OK! ] NO DUPLICATES FOUND." 18 | fi -------------------------------------------------------------------------------- /scripts/check-favicon-ok.sh: -------------------------------------------------------------------------------- 1 | cat test.in | httpx -path "/favicon.ico" -status-code -fr -nc -mc 200 -o favicon.out -------------------------------------------------------------------------------- /scripts/favicon-to-add.txt: -------------------------------------------------------------------------------- 1 | https://shodan.io/search?query=http.favicon.hash%3A-1298131932 2 | https://shodan.io/search?query=http.favicon.hash%3A-1324930554 3 | https://shodan.io/search?query=http.favicon.hash%3A1328449667 4 | https://shodan.io/search?query=http.favicon.hash%3A1330269434 5 | https://shodan.io/search?query=http.favicon.hash%3A1337147129 6 | https://shodan.io/search?query=http.favicon.hash%3A-1343712810 7 | https://shodan.io/search?query=http.favicon.hash%3A1354079303 8 | https://shodan.io/search?query=http.favicon.hash%3A-1373456171 9 | https://shodan.io/search?query=http.favicon.hash%3A-1478287554 10 | https://shodan.io/search?query=http.favicon.hash%3A151132309 11 | https://shodan.io/search?query=http.favicon.hash%3A-1529860313 12 | https://shodan.io/search?query=http.favicon.hash%3A-1548359600 13 | https://shodan.io/search?query=http.favicon.hash%3A1550906681 14 | https://shodan.io/search?query=http.favicon.hash%3A1552322396 15 | https://shodan.io/search?query=http.favicon.hash%3A-1575154882 16 | https://shodan.io/search?query=http.favicon.hash%3A-1595726841 17 | https://shodan.io/search?query=http.favicon.hash%3A-1663319756 18 | https://shodan.io/search?query=http.favicon.hash%3A1691956220 19 | https://shodan.io/search?query=http.favicon.hash%3A-1706783005 20 | https://shodan.io/search?query=http.favicon.hash%3A-1889244460 21 | https://shodan.io/search?query=http.favicon.hash%3A-1893514038 22 | https://shodan.io/search?query=http.favicon.hash%3A-1909533337 23 | https://shodan.io/search?query=http.favicon.hash%3A1949005079 24 | https://shodan.io/search?query=http.favicon.hash%3A-1961736892 25 | https://shodan.io/search?query=http.favicon.hash%3A-2000384200 26 | https://shodan.io/search?query=http.favicon.hash%3A2012805438 27 | https://shodan.io/search?query=http.favicon.hash%3A-2017604252 28 | https://shodan.io/search?query=http.favicon.hash%3A-2022766869 29 | https://shodan.io/search?query=http.favicon.hash%3A2023619029 30 | https://shodan.io/search?query=http.favicon.hash%3A-2024806776 31 | https://shodan.io/search?query=http.favicon.hash%3A-2041778663 32 | https://shodan.io/search?query=http.favicon.hash%3A2062026853 33 | https://shodan.io/search?query=http.favicon.hash%3A-206623908 34 | https://shodan.io/search?query=http.favicon.hash%3A-2070193368 35 | https://shodan.io/search?query=http.favicon.hash%3A-2070905245 36 | https://shodan.io/search?query=http.favicon.hash%3A-2073045449 37 | https://shodan.io/search?query=http.favicon.hash%3A2073492066 38 | https://shodan.io/search?query=http.favicon.hash%3A-2073748627 39 | https://shodan.io/search?query=http.favicon.hash%3A2074122204 40 | https://shodan.io/search?query=http.favicon.hash%3A-2075066158 41 | https://shodan.io/search?query=http.favicon.hash%3A2075812071 42 | https://shodan.io/search?query=http.favicon.hash%3A2076082716 43 | https://shodan.io/search?query=http.favicon.hash%3A-2078200982 44 | https://shodan.io/search?query=http.favicon.hash%3A-2078818753 45 | https://shodan.io/search?query=http.favicon.hash%3A-2078953379 46 | https://shodan.io/search?query=http.favicon.hash%3A2078977144 47 | https://shodan.io/search?query=http.favicon.hash%3A-2079561533 48 | https://shodan.io/search?query=http.favicon.hash%3A-2080238551 49 | https://shodan.io/search?query=http.favicon.hash%3A2080306224 50 | https://shodan.io/search?query=http.favicon.hash%3A-2080659646 51 | https://shodan.io/search?query=http.favicon.hash%3A2080675353 52 | https://shodan.io/search?query=http.favicon.hash%3A2081346853 53 | https://shodan.io/search?query=http.favicon.hash%3A-2083189573 54 | https://shodan.io/search?query=http.favicon.hash%3A2083451581 55 | https://shodan.io/search?query=http.favicon.hash%3A-2085024693 56 | https://shodan.io/search?query=http.favicon.hash%3A-2086072349 57 | https://shodan.io/search?query=http.favicon.hash%3A2088312167 58 | https://shodan.io/search?query=http.favicon.hash%3A208896738 59 | https://shodan.io/search?query=http.favicon.hash%3A-2090859872 60 | https://shodan.io/search?query=http.favicon.hash%3A2094243370 61 | https://shodan.io/search?query=http.favicon.hash%3A2094301709 62 | https://shodan.io/search?query=http.favicon.hash%3A-209795661 63 | https://shodan.io/search?query=http.favicon.hash%3A2098126187 64 | https://shodan.io/search?query=http.favicon.hash%3A-2098621284 65 | https://shodan.io/search?query=http.favicon.hash%3A2099024175 66 | https://shodan.io/search?query=http.favicon.hash%3A-2099340503 67 | https://shodan.io/search?query=http.favicon.hash%3A-2099646360 68 | https://shodan.io/search?query=http.favicon.hash%3A2101029458 69 | https://shodan.io/search?query=http.favicon.hash%3A-2101700158 70 | https://shodan.io/search?query=http.favicon.hash%3A2103205025 71 | https://shodan.io/search?query=http.favicon.hash%3A2104481645 72 | https://shodan.io/search?query=http.favicon.hash%3A-2104765658 73 | https://shodan.io/search?query=http.favicon.hash%3A2104916232 74 | https://shodan.io/search?query=http.favicon.hash%3A-2105230175 75 | https://shodan.io/search?query=http.favicon.hash%3A2107072793 76 | https://shodan.io/search?query=http.favicon.hash%3A2107313883 77 | https://shodan.io/search?query=http.favicon.hash%3A2107438913 78 | https://shodan.io/search?query=http.favicon.hash%3A2108194629 79 | https://shodan.io/search?query=http.favicon.hash%3A-210839484 80 | https://shodan.io/search?query=http.favicon.hash%3A-210925837 81 | https://shodan.io/search?query=http.favicon.hash%3A2110728266 82 | https://shodan.io/search?query=http.favicon.hash%3A-2112402030 83 | https://shodan.io/search?query=http.favicon.hash%3A-2114561030 84 | https://shodan.io/search?query=http.favicon.hash%3A-2115208104 85 | https://shodan.io/search?query=http.favicon.hash%3A2115697643 86 | https://shodan.io/search?query=http.favicon.hash%3A-2116896471 87 | https://shodan.io/search?query=http.favicon.hash%3A-2120634731 88 | https://shodan.io/search?query=http.favicon.hash%3A-2121390088 89 | https://shodan.io/search?query=http.favicon.hash%3A-2122483003 90 | https://shodan.io/search?query=http.favicon.hash%3A-2123709161 91 | https://shodan.io/search?query=http.favicon.hash%3A-2124642965 92 | https://shodan.io/search?query=http.favicon.hash%3A-2124726932 93 | https://shodan.io/search?query=http.favicon.hash%3A-2126618664 94 | https://shodan.io/search?query=http.favicon.hash%3A2126845402 95 | https://shodan.io/search?query=http.favicon.hash%3A-212761746 96 | https://shodan.io/search?query=http.favicon.hash%3A-2128734439 97 | https://shodan.io/search?query=http.favicon.hash%3A2129066320 98 | https://shodan.io/search?query=http.favicon.hash%3A-2129723555 99 | https://shodan.io/search?query=http.favicon.hash%3A2129876281 100 | https://shodan.io/search?query=http.favicon.hash%3A2131529367 101 | https://shodan.io/search?query=http.favicon.hash%3A-2131921099 102 | https://shodan.io/search?query=http.favicon.hash%3A2134100527 103 | https://shodan.io/search?query=http.favicon.hash%3A-2135383206 104 | https://shodan.io/search?query=http.favicon.hash%3A2136934273 105 | https://shodan.io/search?query=http.favicon.hash%3A-2137634004 106 | https://shodan.io/search?query=http.favicon.hash%3A-2139528113 107 | https://shodan.io/search?query=http.favicon.hash%3A-2140414765 108 | https://shodan.io/search?query=http.favicon.hash%3A-2141110802 109 | https://shodan.io/search?query=http.favicon.hash%3A-2142367897 110 | https://shodan.io/search?query=http.favicon.hash%3A2142422427 111 | https://shodan.io/search?query=http.favicon.hash%3A-2142991177 112 | https://shodan.io/search?query=http.favicon.hash%3A-2144075010 113 | https://shodan.io/search?query=http.favicon.hash%3A-2144699833 114 | https://shodan.io/search?query=http.favicon.hash%3A-2145623235 115 | https://shodan.io/search?query=http.favicon.hash%3A2146678949 116 | https://shodan.io/search?query=http.favicon.hash%3A-2146887260 117 | https://shodan.io/search?query=http.favicon.hash%3A214952113 118 | https://shodan.io/search?query=http.favicon.hash%3A217119619 119 | https://shodan.io/search?query=http.favicon.hash%3A222371126 120 | https://shodan.io/search?query=http.favicon.hash%3A222541292 121 | https://shodan.io/search?query=http.favicon.hash%3A-222597173 122 | https://shodan.io/search?query=http.favicon.hash%3A222772767 123 | https://shodan.io/search?query=http.favicon.hash%3A22360715 124 | https://shodan.io/search?query=http.favicon.hash%3A224075790 125 | https://shodan.io/search?query=http.favicon.hash%3A-226473314 126 | https://shodan.io/search?query=http.favicon.hash%3A229811056 127 | https://shodan.io/search?query=http.favicon.hash%3A-230257671 128 | https://shodan.io/search?query=http.favicon.hash%3A-231091547 129 | https://shodan.io/search?query=http.favicon.hash%3A-231492804 130 | https://shodan.io/search?query=http.favicon.hash%3A232459843 131 | https://shodan.io/search?query=http.favicon.hash%3A234100130 132 | https://shodan.io/search?query=http.favicon.hash%3A234406 133 | https://shodan.io/search?query=http.favicon.hash%3A-234896770 134 | https://shodan.io/search?query=http.favicon.hash%3A-23539877 135 | https://shodan.io/search?query=http.favicon.hash%3A235842803 136 | https://shodan.io/search?query=http.favicon.hash%3A-236961933 137 | https://shodan.io/search?query=http.favicon.hash%3A-238580991 138 | https://shodan.io/search?query=http.favicon.hash%3A-238593524 139 | https://shodan.io/search?query=http.favicon.hash%3A-238742715 140 | https://shodan.io/search?query=http.favicon.hash%3A23874752 141 | https://shodan.io/search?query=http.favicon.hash%3A238946113 142 | https://shodan.io/search?query=http.favicon.hash%3A-240338506 143 | https://shodan.io/search?query=http.favicon.hash%3A-241559259 144 | https://shodan.io/search?query=http.favicon.hash%3A241962909 145 | https://shodan.io/search?query=http.favicon.hash%3A-249310900 146 | https://shodan.io/search?query=http.favicon.hash%3A274690922 147 | https://shodan.io/search?query=http.favicon.hash%3A282667281 148 | https://shodan.io/search?query=http.favicon.hash%3A-285677846 149 | https://shodan.io/search?query=http.favicon.hash%3A-301106353 150 | https://shodan.io/search?query=http.favicon.hash%3A306836681 151 | https://shodan.io/search?query=http.favicon.hash%3A-307509435 152 | https://shodan.io/search?query=http.favicon.hash%3A-307913898 153 | https://shodan.io/search?query=http.favicon.hash%3A311575799 154 | https://shodan.io/search?query=http.favicon.hash%3A311886536 155 | https://shodan.io/search?query=http.favicon.hash%3A313009239 156 | https://shodan.io/search?query=http.favicon.hash%3A-313348474 157 | https://shodan.io/search?query=http.favicon.hash%3A-315044068 158 | https://shodan.io/search?query=http.favicon.hash%3A315167558 159 | https://shodan.io/search?query=http.favicon.hash%3A-315395264 160 | https://shodan.io/search?query=http.favicon.hash%3A-31542723 161 | https://shodan.io/search?query=http.favicon.hash%3A-315727620 162 | https://shodan.io/search?query=http.favicon.hash%3A316025764 163 | https://shodan.io/search?query=http.favicon.hash%3A-316785925 164 | https://shodan.io/search?query=http.favicon.hash%3A317645231 165 | https://shodan.io/search?query=http.favicon.hash%3A-317734159 166 | https://shodan.io/search?query=http.favicon.hash%3A318238424 167 | https://shodan.io/search?query=http.favicon.hash%3A318242559 168 | https://shodan.io/search?query=http.favicon.hash%3A-319589191 169 | https://shodan.io/search?query=http.favicon.hash%3A-320040756 170 | https://shodan.io/search?query=http.favicon.hash%3A-321382934 171 | https://shodan.io/search?query=http.favicon.hash%3A-322157796 172 | https://shodan.io/search?query=http.favicon.hash%3A322451881 173 | https://shodan.io/search?query=http.favicon.hash%3A-323147747 174 | https://shodan.io/search?query=http.favicon.hash%3A-323383440 175 | https://shodan.io/search?query=http.favicon.hash%3A-323569867 176 | https://shodan.io/search?query=http.favicon.hash%3A323952944 177 | https://shodan.io/search?query=http.favicon.hash%3A-324206735 178 | https://shodan.io/search?query=http.favicon.hash%3A32565741 179 | https://shodan.io/search?query=http.favicon.hash%3A327481006 180 | https://shodan.io/search?query=http.favicon.hash%3A-328420081 181 | https://shodan.io/search?query=http.favicon.hash%3A-33130387 182 | https://shodan.io/search?query=http.favicon.hash%3A332458425 183 | https://shodan.io/search?query=http.favicon.hash%3A334124034 184 | https://shodan.io/search?query=http.favicon.hash%3A-334310348 185 | https://shodan.io/search?query=http.favicon.hash%3A334811193 186 | https://shodan.io/search?query=http.favicon.hash%3A-336578314 187 | https://shodan.io/search?query=http.favicon.hash%3A337372914 188 | https://shodan.io/search?query=http.favicon.hash%3A33742783 189 | https://shodan.io/search?query=http.favicon.hash%3A-337520637 190 | https://shodan.io/search?query=http.favicon.hash%3A338518278 191 | https://shodan.io/search?query=http.favicon.hash%3A339283450 192 | https://shodan.io/search?query=http.favicon.hash%3A341223702 193 | https://shodan.io/search?query=http.favicon.hash%3A-341358013 194 | https://shodan.io/search?query=http.favicon.hash%3A343129423 195 | https://shodan.io/search?query=http.favicon.hash%3A-344215728 196 | https://shodan.io/search?query=http.favicon.hash%3A346062468 197 | https://shodan.io/search?query=http.favicon.hash%3A346906916 198 | https://shodan.io/search?query=http.favicon.hash%3A-347188002 199 | https://shodan.io/search?query=http.favicon.hash%3A-3476924 200 | https://shodan.io/search?query=http.favicon.hash%3A349194243 201 | https://shodan.io/search?query=http.favicon.hash%3A349959347 202 | https://shodan.io/search?query=http.favicon.hash%3A350618352 203 | https://shodan.io/search?query=http.favicon.hash%3A-350784271 204 | https://shodan.io/search?query=http.favicon.hash%3A-351164789 205 | https://shodan.io/search?query=http.favicon.hash%3A-351279329 206 | https://shodan.io/search?query=http.favicon.hash%3A-352436704 207 | https://shodan.io/search?query=http.favicon.hash%3A-353506001 208 | https://shodan.io/search?query=http.favicon.hash%3A354564839 209 | https://shodan.io/search?query=http.favicon.hash%3A-357468442 210 | https://shodan.io/search?query=http.favicon.hash%3A358099584 211 | https://shodan.io/search?query=http.favicon.hash%3A361114446 212 | https://shodan.io/search?query=http.favicon.hash%3A-362413667 213 | https://shodan.io/search?query=http.favicon.hash%3A-364082680 214 | https://shodan.io/search?query=http.favicon.hash%3A-364225497 215 | https://shodan.io/search?query=http.favicon.hash%3A-364707506 216 | https://shodan.io/search?query=http.favicon.hash%3A366138570 217 | https://shodan.io/search?query=http.favicon.hash%3A-367339145 218 | https://shodan.io/search?query=http.favicon.hash%3A367556711 219 | https://shodan.io/search?query=http.favicon.hash%3A-367992378 220 | https://shodan.io/search?query=http.favicon.hash%3A368161366 221 | https://shodan.io/search?query=http.favicon.hash%3A-368391568 222 | https://shodan.io/search?query=http.favicon.hash%3A-368512251 223 | https://shodan.io/search?query=http.favicon.hash%3A-36899337 224 | https://shodan.io/search?query=http.favicon.hash%3A-369163395 225 | https://shodan.io/search?query=http.favicon.hash%3A-369438809 226 | https://shodan.io/search?query=http.favicon.hash%3A370419604 227 | https://shodan.io/search?query=http.favicon.hash%3A-372092869 228 | https://shodan.io/search?query=http.favicon.hash%3A372890367 229 | https://shodan.io/search?query=http.favicon.hash%3A-373583638 230 | https://shodan.io/search?query=http.favicon.hash%3A375199015 231 | https://shodan.io/search?query=http.favicon.hash%3A375561642 232 | https://shodan.io/search?query=http.favicon.hash%3A377617568 233 | https://shodan.io/search?query=http.favicon.hash%3A-379000493 234 | https://shodan.io/search?query=http.favicon.hash%3A-379154636 235 | https://shodan.io/search?query=http.favicon.hash%3A380299868 236 | https://shodan.io/search?query=http.favicon.hash%3A-380686728 237 | https://shodan.io/search?query=http.favicon.hash%3A-381579829 238 | https://shodan.io/search?query=http.favicon.hash%3A-38198018 239 | https://shodan.io/search?query=http.favicon.hash%3A-385909173 240 | https://shodan.io/search?query=http.favicon.hash%3A386205167 241 | https://shodan.io/search?query=http.favicon.hash%3A388333910 242 | https://shodan.io/search?query=http.favicon.hash%3A-389615170 243 | https://shodan.io/search?query=http.favicon.hash%3A-391577146 244 | https://shodan.io/search?query=http.favicon.hash%3A-391883312 245 | https://shodan.io/search?query=http.favicon.hash%3A-393050529 246 | https://shodan.io/search?query=http.favicon.hash%3A-393552038 247 | https://shodan.io/search?query=http.favicon.hash%3A-395369635 248 | https://shodan.io/search?query=http.favicon.hash%3A-39579912 249 | https://shodan.io/search?query=http.favicon.hash%3A-396388118 250 | https://shodan.io/search?query=http.favicon.hash%3A-398071738 251 | https://shodan.io/search?query=http.favicon.hash%3A-398134515 252 | https://shodan.io/search?query=http.favicon.hash%3A398967662 253 | https://shodan.io/search?query=http.favicon.hash%3A399165424 254 | https://shodan.io/search?query=http.favicon.hash%3A-39928739 255 | https://shodan.io/search?query=http.favicon.hash%3A400100893 256 | https://shodan.io/search?query=http.favicon.hash%3A401528358 257 | https://shodan.io/search?query=http.favicon.hash%3A-402346053 258 | https://shodan.io/search?query=http.favicon.hash%3A-402376780 259 | https://shodan.io/search?query=http.favicon.hash%3A-402390638 260 | https://shodan.io/search?query=http.favicon.hash%3A-403356440 261 | https://shodan.io/search?query=http.favicon.hash%3A403376554 262 | https://shodan.io/search?query=http.favicon.hash%3A403739186 263 | https://shodan.io/search?query=http.favicon.hash%3A404213448 264 | https://shodan.io/search?query=http.favicon.hash%3A-404338986 265 | https://shodan.io/search?query=http.favicon.hash%3A405216878 266 | https://shodan.io/search?query=http.favicon.hash%3A405460413 267 | https://shodan.io/search?query=http.favicon.hash%3A405490845 268 | https://shodan.io/search?query=http.favicon.hash%3A-405780529 269 | https://shodan.io/search?query=http.favicon.hash%3A407286339 270 | https://shodan.io/search?query=http.favicon.hash%3A408959079 271 | https://shodan.io/search?query=http.favicon.hash%3A-409277045 272 | https://shodan.io/search?query=http.favicon.hash%3A409870064 273 | https://shodan.io/search?query=http.favicon.hash%3A-409988098 274 | https://shodan.io/search?query=http.favicon.hash%3A411052691 275 | https://shodan.io/search?query=http.favicon.hash%3A41203359 276 | https://shodan.io/search?query=http.favicon.hash%3A41404159 277 | https://shodan.io/search?query=http.favicon.hash%3A419128668 278 | https://shodan.io/search?query=http.favicon.hash%3A-421309877 279 | https://shodan.io/search?query=http.favicon.hash%3A-422142140 280 | https://shodan.io/search?query=http.favicon.hash%3A-424415022 281 | https://shodan.io/search?query=http.favicon.hash%3A-424915113 282 | https://shodan.io/search?query=http.favicon.hash%3A-425273705 283 | https://shodan.io/search?query=http.favicon.hash%3A425315413 284 | https://shodan.io/search?query=http.favicon.hash%3A-426082882 285 | https://shodan.io/search?query=http.favicon.hash%3A-427105888 286 | https://shodan.io/search?query=http.favicon.hash%3A-427178009 287 | https://shodan.io/search?query=http.favicon.hash%3A-427691990 288 | https://shodan.io/search?query=http.favicon.hash%3A428198134 289 | https://shodan.io/search?query=http.favicon.hash%3A-429138979 290 | https://shodan.io/search?query=http.favicon.hash%3A-431071659 291 | https://shodan.io/search?query=http.favicon.hash%3A431511705 292 | https://shodan.io/search?query=http.favicon.hash%3A431627549 293 | https://shodan.io/search?query=http.favicon.hash%3A431796802 294 | https://shodan.io/search?query=http.favicon.hash%3A432557223 295 | https://shodan.io/search?query=http.favicon.hash%3A434126151 296 | https://shodan.io/search?query=http.favicon.hash%3A-435423382 297 | https://shodan.io/search?query=http.favicon.hash%3A-436141080 298 | https://shodan.io/search?query=http.favicon.hash%3A-437002918 299 | https://shodan.io/search?query=http.favicon.hash%3A-437529978 300 | https://shodan.io/search?query=http.favicon.hash%3A437753936 301 | https://shodan.io/search?query=http.favicon.hash%3A438040507 302 | https://shodan.io/search?query=http.favicon.hash%3A440908388 303 | https://shodan.io/search?query=http.favicon.hash%3A441475721 304 | https://shodan.io/search?query=http.favicon.hash%3A-444227112 305 | https://shodan.io/search?query=http.favicon.hash%3A-4444501 306 | https://shodan.io/search?query=http.favicon.hash%3A-445788743 307 | https://shodan.io/search?query=http.favicon.hash%3A446090541 308 | https://shodan.io/search?query=http.favicon.hash%3A-447883503 309 | https://shodan.io/search?query=http.favicon.hash%3A-448869046 310 | https://shodan.io/search?query=http.favicon.hash%3A-450405230 311 | https://shodan.io/search?query=http.favicon.hash%3A450627372 312 | https://shodan.io/search?query=http.favicon.hash%3A-450773806 313 | https://shodan.io/search?query=http.favicon.hash%3A450899026 314 | https://shodan.io/search?query=http.favicon.hash%3A-45145145 315 | https://shodan.io/search?query=http.favicon.hash%3A-454450853 316 | https://shodan.io/search?query=http.favicon.hash%3A45833769 317 | https://shodan.io/search?query=http.favicon.hash%3A-459758212 318 | https://shodan.io/search?query=http.favicon.hash%3A-463147949 319 | https://shodan.io/search?query=http.favicon.hash%3A-463230636 320 | https://shodan.io/search?query=http.favicon.hash%3A-464207645 321 | https://shodan.io/search?query=http.favicon.hash%3A464587962 322 | https://shodan.io/search?query=http.favicon.hash%3A-464777783 323 | https://shodan.io/search?query=http.favicon.hash%3A-465578319 324 | https://shodan.io/search?query=http.favicon.hash%3A465772514 325 | https://shodan.io/search?query=http.favicon.hash%3A-466507653 326 | https://shodan.io/search?query=http.favicon.hash%3A46673403 327 | https://shodan.io/search?query=http.favicon.hash%3A-467479835 328 | https://shodan.io/search?query=http.favicon.hash%3A469645062 329 | https://shodan.io/search?query=http.favicon.hash%3A469970949 330 | https://shodan.io/search?query=http.favicon.hash%3A-470899530 331 | https://shodan.io/search?query=http.favicon.hash%3A-472523225 332 | https://shodan.io/search?query=http.favicon.hash%3A473132242 333 | https://shodan.io/search?query=http.favicon.hash%3A-474215877 334 | https://shodan.io/search?query=http.favicon.hash%3A-475147317 335 | https://shodan.io/search?query=http.favicon.hash%3A-47597126 336 | https://shodan.io/search?query=http.favicon.hash%3A-477438301 337 | https://shodan.io/search?query=http.favicon.hash%3A-479356993 338 | https://shodan.io/search?query=http.favicon.hash%3A479448153 339 | https://shodan.io/search?query=http.favicon.hash%3A-481862135 340 | https://shodan.io/search?query=http.favicon.hash%3A-484688988 341 | https://shodan.io/search?query=http.favicon.hash%3A-485227999 342 | https://shodan.io/search?query=http.favicon.hash%3A-485259099 343 | https://shodan.io/search?query=http.favicon.hash%3A-487331759 344 | https://shodan.io/search?query=http.favicon.hash%3A487597720 345 | https://shodan.io/search?query=http.favicon.hash%3A492290497 346 | https://shodan.io/search?query=http.favicon.hash%3A492674343 347 | https://shodan.io/search?query=http.favicon.hash%3A-495975421 348 | https://shodan.io/search?query=http.favicon.hash%3A497282684 349 | https://shodan.io/search?query=http.favicon.hash%3A-497356161 350 | https://shodan.io/search?query=http.favicon.hash%3A497527120 351 | https://shodan.io/search?query=http.favicon.hash%3A498675945 352 | https://shodan.io/search?query=http.favicon.hash%3A-498882777 353 | https://shodan.io/search?query=http.favicon.hash%3A499417227 354 | https://shodan.io/search?query=http.favicon.hash%3A503408859 355 | https://shodan.io/search?query=http.favicon.hash%3A504559734 356 | https://shodan.io/search?query=http.favicon.hash%3A-505149447 357 | https://shodan.io/search?query=http.favicon.hash%3A505756801 358 | https://shodan.io/search?query=http.favicon.hash%3A-505982372 359 | https://shodan.io/search?query=http.favicon.hash%3A506886426 360 | https://shodan.io/search?query=http.favicon.hash%3A-508148113 361 | https://shodan.io/search?query=http.favicon.hash%3A-50934878 362 | https://shodan.io/search?query=http.favicon.hash%3A509445635 363 | https://shodan.io/search?query=http.favicon.hash%3A-512133740 364 | https://shodan.io/search?query=http.favicon.hash%3A51230130 365 | https://shodan.io/search?query=http.favicon.hash%3A514651551 366 | https://shodan.io/search?query=http.favicon.hash%3A515197025 367 | https://shodan.io/search?query=http.favicon.hash%3A-515970596 368 | https://shodan.io/search?query=http.favicon.hash%3A517285179 369 | https://shodan.io/search?query=http.favicon.hash%3A-519066447 370 | https://shodan.io/search?query=http.favicon.hash%3A520334668 371 | https://shodan.io/search?query=http.favicon.hash%3A-521535441 372 | https://shodan.io/search?query=http.favicon.hash%3A-522232469 373 | https://shodan.io/search?query=http.favicon.hash%3A523068925 374 | https://shodan.io/search?query=http.favicon.hash%3A52314865 375 | https://shodan.io/search?query=http.favicon.hash%3A-52438825 376 | https://shodan.io/search?query=http.favicon.hash%3A-524664233 377 | https://shodan.io/search?query=http.favicon.hash%3A525512585 378 | https://shodan.io/search?query=http.favicon.hash%3A-526552280 379 | https://shodan.io/search?query=http.favicon.hash%3A-526829527 380 | https://shodan.io/search?query=http.favicon.hash%3A527370269 381 | https://shodan.io/search?query=http.favicon.hash%3A-528732929 382 | https://shodan.io/search?query=http.favicon.hash%3A528987824 383 | https://shodan.io/search?query=http.favicon.hash%3A-529532554 384 | https://shodan.io/search?query=http.favicon.hash%3A-530331679 385 | https://shodan.io/search?query=http.favicon.hash%3A-530874707 386 | https://shodan.io/search?query=http.favicon.hash%3A-531001989 387 | https://shodan.io/search?query=http.favicon.hash%3A531366971 388 | https://shodan.io/search?query=http.favicon.hash%3A-531795361 389 | https://shodan.io/search?query=http.favicon.hash%3A53284862 390 | https://shodan.io/search?query=http.favicon.hash%3A-533305438 391 | https://shodan.io/search?query=http.favicon.hash%3A533530131 392 | https://shodan.io/search?query=http.favicon.hash%3A535710329 393 | https://shodan.io/search?query=http.favicon.hash%3A-536161348 394 | https://shodan.io/search?query=http.favicon.hash%3A-538365454 395 | https://shodan.io/search?query=http.favicon.hash%3A538583492 396 | https://shodan.io/search?query=http.favicon.hash%3A541881780 397 | https://shodan.io/search?query=http.favicon.hash%3A541942600 398 | https://shodan.io/search?query=http.favicon.hash%3A-543733905 399 | https://shodan.io/search?query=http.favicon.hash%3A-544521154 400 | https://shodan.io/search?query=http.favicon.hash%3A546042804 401 | https://shodan.io/search?query=http.favicon.hash%3A546820467 402 | https://shodan.io/search?query=http.favicon.hash%3A547941326 403 | https://shodan.io/search?query=http.favicon.hash%3A54806800 404 | https://shodan.io/search?query=http.favicon.hash%3A-548430668 405 | https://shodan.io/search?query=http.favicon.hash%3A549931488 406 | https://shodan.io/search?query=http.favicon.hash%3A550351389 407 | https://shodan.io/search?query=http.favicon.hash%3A552110063 408 | https://shodan.io/search?query=http.favicon.hash%3A-552918165 409 | https://shodan.io/search?query=http.favicon.hash%3A-554365658 410 | https://shodan.io/search?query=http.favicon.hash%3A555209454 411 | https://shodan.io/search?query=http.favicon.hash%3A556010595 412 | https://shodan.io/search?query=http.favicon.hash%3A557327884 413 | https://shodan.io/search?query=http.favicon.hash%3A-557630715 414 | https://shodan.io/search?query=http.favicon.hash%3A559808209 415 | https://shodan.io/search?query=http.favicon.hash%3A560205550 416 | https://shodan.io/search?query=http.favicon.hash%3A561563906 417 | https://shodan.io/search?query=http.favicon.hash%3A562390994 418 | https://shodan.io/search?query=http.favicon.hash%3A562675003 419 | https://shodan.io/search?query=http.favicon.hash%3A56304694 420 | https://shodan.io/search?query=http.favicon.hash%3A563090033 421 | https://shodan.io/search?query=http.favicon.hash%3A-563167993 422 | https://shodan.io/search?query=http.favicon.hash%3A-563462974 423 | https://shodan.io/search?query=http.favicon.hash%3A564030960 424 | https://shodan.io/search?query=http.favicon.hash%3A-564943353 425 | https://shodan.io/search?query=http.favicon.hash%3A56494662 426 | https://shodan.io/search?query=http.favicon.hash%3A-565614645 427 | https://shodan.io/search?query=http.favicon.hash%3A-569996242 428 | https://shodan.io/search?query=http.favicon.hash%3A570688454 429 | https://shodan.io/search?query=http.favicon.hash%3A570881630 430 | https://shodan.io/search?query=http.favicon.hash%3A571936719 431 | https://shodan.io/search?query=http.favicon.hash%3A572074752 432 | https://shodan.io/search?query=http.favicon.hash%3A-572189585 433 | https://shodan.io/search?query=http.favicon.hash%3A573433267 434 | https://shodan.io/search?query=http.favicon.hash%3A575481421 435 | https://shodan.io/search?query=http.favicon.hash%3A575491265 436 | https://shodan.io/search?query=http.favicon.hash%3A-575790689 437 | https://shodan.io/search?query=http.favicon.hash%3A-57801810 438 | https://shodan.io/search?query=http.favicon.hash%3A-578216669 439 | https://shodan.io/search?query=http.favicon.hash%3A-578567091 440 | https://shodan.io/search?query=http.favicon.hash%3A580559524 441 | https://shodan.io/search?query=http.favicon.hash%3A-584977611 442 | https://shodan.io/search?query=http.favicon.hash%3A586564255 443 | https://shodan.io/search?query=http.favicon.hash%3A-58657200 444 | https://shodan.io/search?query=http.favicon.hash%3A587330928 445 | https://shodan.io/search?query=http.favicon.hash%3A588554046 446 | https://shodan.io/search?query=http.favicon.hash%3A592092448 447 | https://shodan.io/search?query=http.favicon.hash%3A-593703736 448 | https://shodan.io/search?query=http.favicon.hash%3A594890578 449 | https://shodan.io/search?query=http.favicon.hash%3A596216411 450 | https://shodan.io/search?query=http.favicon.hash%3A597230358 451 | https://shodan.io/search?query=http.favicon.hash%3A598296063 452 | https://shodan.io/search?query=http.favicon.hash%3A598364992 453 | https://shodan.io/search?query=http.favicon.hash%3A-600407441 454 | https://shodan.io/search?query=http.favicon.hash%3A-601188306 455 | https://shodan.io/search?query=http.favicon.hash%3A601502865 456 | https://shodan.io/search?query=http.favicon.hash%3A-601665621 457 | https://shodan.io/search?query=http.favicon.hash%3A-601917817 458 | https://shodan.io/search?query=http.favicon.hash%3A603014660 459 | https://shodan.io/search?query=http.favicon.hash%3A60503573 460 | https://shodan.io/search?query=http.favicon.hash%3A-605181559 461 | https://shodan.io/search?query=http.favicon.hash%3A605834916 462 | https://shodan.io/search?query=http.favicon.hash%3A606008215 463 | https://shodan.io/search?query=http.favicon.hash%3A-610522624 464 | https://shodan.io/search?query=http.favicon.hash%3A-61082115 465 | https://shodan.io/search?query=http.favicon.hash%3A611241354 466 | https://shodan.io/search?query=http.favicon.hash%3A-612986905 467 | https://shodan.io/search?query=http.favicon.hash%3A-614003677 468 | https://shodan.io/search?query=http.favicon.hash%3A614187882 469 | https://shodan.io/search?query=http.favicon.hash%3A-614262549 470 | https://shodan.io/search?query=http.favicon.hash%3A614996591 471 | https://shodan.io/search?query=http.favicon.hash%3A615065391 472 | https://shodan.io/search?query=http.favicon.hash%3A-615519782 473 | https://shodan.io/search?query=http.favicon.hash%3A-620471079 474 | https://shodan.io/search?query=http.favicon.hash%3A-620512397 475 | https://shodan.io/search?query=http.favicon.hash%3A-620980906 476 | https://shodan.io/search?query=http.favicon.hash%3A-621434476 477 | https://shodan.io/search?query=http.favicon.hash%3A621952877 478 | https://shodan.io/search?query=http.favicon.hash%3A-622171090 479 | https://shodan.io/search?query=http.favicon.hash%3A622478992 480 | https://shodan.io/search?query=http.favicon.hash%3A62334336 481 | https://shodan.io/search?query=http.favicon.hash%3A623744943 482 | https://shodan.io/search?query=http.favicon.hash%3A-624226099 483 | https://shodan.io/search?query=http.favicon.hash%3A-626462482 484 | https://shodan.io/search?query=http.favicon.hash%3A62700279 485 | https://shodan.io/search?query=http.favicon.hash%3A627563844 486 | https://shodan.io/search?query=http.favicon.hash%3A-627711718 487 | https://shodan.io/search?query=http.favicon.hash%3A-629968763 488 | https://shodan.io/search?query=http.favicon.hash%3A632424401 489 | https://shodan.io/search?query=http.favicon.hash%3A-632962789 490 | https://shodan.io/search?query=http.favicon.hash%3A633089150 491 | https://shodan.io/search?query=http.favicon.hash%3A-633108100 492 | https://shodan.io/search?query=http.favicon.hash%3A-633512412 493 | https://shodan.io/search?query=http.favicon.hash%3A-638292089 494 | https://shodan.io/search?query=http.favicon.hash%3A-640111867 495 | https://shodan.io/search?query=http.favicon.hash%3A-640277519 496 | https://shodan.io/search?query=http.favicon.hash%3A640917090 497 | https://shodan.io/search?query=http.favicon.hash%3A642450915 498 | https://shodan.io/search?query=http.favicon.hash%3A643975116 499 | https://shodan.io/search?query=http.favicon.hash%3A-644699444 500 | https://shodan.io/search?query=http.favicon.hash%3A-645923843 501 | https://shodan.io/search?query=http.favicon.hash%3A646127201 502 | https://shodan.io/search?query=http.favicon.hash%3A-646302454 503 | https://shodan.io/search?query=http.favicon.hash%3A-646322113 504 | https://shodan.io/search?query=http.favicon.hash%3A-647318973 505 | https://shodan.io/search?query=http.favicon.hash%3A649861262 506 | https://shodan.io/search?query=http.favicon.hash%3A-650958502 507 | https://shodan.io/search?query=http.favicon.hash%3A-651488739 508 | https://shodan.io/search?query=http.favicon.hash%3A-653169646 509 | https://shodan.io/search?query=http.favicon.hash%3A-653196288 510 | https://shodan.io/search?query=http.favicon.hash%3A653458610 511 | https://shodan.io/search?query=http.favicon.hash%3A-65559863 512 | https://shodan.io/search?query=http.favicon.hash%3A-658146104 513 | https://shodan.io/search?query=http.favicon.hash%3A658325731 514 | https://shodan.io/search?query=http.favicon.hash%3A-659216626 515 | https://shodan.io/search?query=http.favicon.hash%3A659384822 516 | https://shodan.io/search?query=http.favicon.hash%3A659865489 517 | https://shodan.io/search?query=http.favicon.hash%3A659946772 518 | https://shodan.io/search?query=http.favicon.hash%3A-660009047 519 | https://shodan.io/search?query=http.favicon.hash%3A-660306023 520 | https://shodan.io/search?query=http.favicon.hash%3A-660781282 521 | https://shodan.io/search?query=http.favicon.hash%3A-661538815 522 | https://shodan.io/search?query=http.favicon.hash%3A661787921 523 | https://shodan.io/search?query=http.favicon.hash%3A-662184115 524 | https://shodan.io/search?query=http.favicon.hash%3A662709064 525 | https://shodan.io/search?query=http.favicon.hash%3A-664937498 526 | https://shodan.io/search?query=http.favicon.hash%3A665594259 527 | https://shodan.io/search?query=http.favicon.hash%3A-666651264 528 | https://shodan.io/search?query=http.favicon.hash%3A667017222 529 | https://shodan.io/search?query=http.favicon.hash%3A667426507 530 | https://shodan.io/search?query=http.favicon.hash%3A-667466865 531 | https://shodan.io/search?query=http.favicon.hash%3A668633720 532 | https://shodan.io/search?query=http.favicon.hash%3A-668779488 533 | https://shodan.io/search?query=http.favicon.hash%3A-669452529 534 | https://shodan.io/search?query=http.favicon.hash%3A-670682754 535 | https://shodan.io/search?query=http.favicon.hash%3A-672420066 536 | https://shodan.io/search?query=http.favicon.hash%3A673251674 537 | https://shodan.io/search?query=http.favicon.hash%3A-674532093 538 | https://shodan.io/search?query=http.favicon.hash%3A676252820 539 | https://shodan.io/search?query=http.favicon.hash%3A676321865 540 | https://shodan.io/search?query=http.favicon.hash%3A676532651 541 | https://shodan.io/search?query=http.favicon.hash%3A-676623818 542 | https://shodan.io/search?query=http.favicon.hash%3A-676639128 543 | https://shodan.io/search?query=http.favicon.hash%3A-676801484 544 | https://shodan.io/search?query=http.favicon.hash%3A677261371 545 | https://shodan.io/search?query=http.favicon.hash%3A68089769 546 | https://shodan.io/search?query=http.favicon.hash%3A-681127392 547 | https://shodan.io/search?query=http.favicon.hash%3A681906119 548 | https://shodan.io/search?query=http.favicon.hash%3A-682445886 549 | https://shodan.io/search?query=http.favicon.hash%3A683178151 550 | https://shodan.io/search?query=http.favicon.hash%3A683628939 551 | https://shodan.io/search?query=http.favicon.hash%3A684878625 552 | https://shodan.io/search?query=http.favicon.hash%3A686638618 553 | https://shodan.io/search?query=http.favicon.hash%3A689534064 554 | https://shodan.io/search?query=http.favicon.hash%3A68965530 555 | https://shodan.io/search?query=http.favicon.hash%3A689997596 556 | https://shodan.io/search?query=http.favicon.hash%3A-692512453 557 | https://shodan.io/search?query=http.favicon.hash%3A694761972 558 | https://shodan.io/search?query=http.favicon.hash%3A695518217 559 | https://shodan.io/search?query=http.favicon.hash%3A696766540 560 | https://shodan.io/search?query=http.favicon.hash%3A-699604539 561 | https://shodan.io/search?query=http.favicon.hash%3A700042356 562 | https://shodan.io/search?query=http.favicon.hash%3A70447700 563 | https://shodan.io/search?query=http.favicon.hash%3A70633825 564 | https://shodan.io/search?query=http.favicon.hash%3A706734148 565 | https://shodan.io/search?query=http.favicon.hash%3A707325024 566 | https://shodan.io/search?query=http.favicon.hash%3A707472956 567 | https://shodan.io/search?query=http.favicon.hash%3A708473992 568 | https://shodan.io/search?query=http.favicon.hash%3A-709611873 569 | https://shodan.io/search?query=http.favicon.hash%3A711491567 570 | https://shodan.io/search?query=http.favicon.hash%3A712557619 571 | https://shodan.io/search?query=http.favicon.hash%3A-715468141 572 | https://shodan.io/search?query=http.favicon.hash%3A715635529 573 | https://shodan.io/search?query=http.favicon.hash%3A717962889 574 | https://shodan.io/search?query=http.favicon.hash%3A-720320459 575 | https://shodan.io/search?query=http.favicon.hash%3A-721470435 576 | https://shodan.io/search?query=http.favicon.hash%3A-721527986 577 | https://shodan.io/search?query=http.favicon.hash%3A-722702546 578 | https://shodan.io/search?query=http.favicon.hash%3A724438296 579 | https://shodan.io/search?query=http.favicon.hash%3A-725636930 580 | https://shodan.io/search?query=http.favicon.hash%3A-725768471 581 | https://shodan.io/search?query=http.favicon.hash%3A726992328 582 | https://shodan.io/search?query=http.favicon.hash%3A-727382319 583 | https://shodan.io/search?query=http.favicon.hash%3A-727619699 584 | https://shodan.io/search?query=http.favicon.hash%3A728685175 585 | https://shodan.io/search?query=http.favicon.hash%3A728775631 586 | https://shodan.io/search?query=http.favicon.hash%3A-734144237 587 | https://shodan.io/search?query=http.favicon.hash%3A734213573 588 | https://shodan.io/search?query=http.favicon.hash%3A734262293 589 | https://shodan.io/search?query=http.favicon.hash%3A-734781815 590 | https://shodan.io/search?query=http.favicon.hash%3A735081481 591 | https://shodan.io/search?query=http.favicon.hash%3A73555878 592 | https://shodan.io/search?query=http.favicon.hash%3A-736199086 593 | https://shodan.io/search?query=http.favicon.hash%3A-736804094 594 | https://shodan.io/search?query=http.favicon.hash%3A-737429616 595 | https://shodan.io/search?query=http.favicon.hash%3A-737834088 596 | https://shodan.io/search?query=http.favicon.hash%3A-73901357 597 | https://shodan.io/search?query=http.favicon.hash%3A739801466 598 | https://shodan.io/search?query=http.favicon.hash%3A-741058468 599 | https://shodan.io/search?query=http.favicon.hash%3A-741491222 600 | https://shodan.io/search?query=http.favicon.hash%3A743764488 601 | https://shodan.io/search?query=http.favicon.hash%3A-744567865 602 | https://shodan.io/search?query=http.favicon.hash%3A746882768 603 | https://shodan.io/search?query=http.favicon.hash%3A747413665 604 | https://shodan.io/search?query=http.favicon.hash%3A748267247 605 | https://shodan.io/search?query=http.favicon.hash%3A-748267266 606 | https://shodan.io/search?query=http.favicon.hash%3A-749942143 607 | https://shodan.io/search?query=http.favicon.hash%3A750332698 608 | https://shodan.io/search?query=http.favicon.hash%3A75392360 609 | https://shodan.io/search?query=http.favicon.hash%3A758760684 610 | https://shodan.io/search?query=http.favicon.hash%3A-759738305 611 | https://shodan.io/search?query=http.favicon.hash%3A-76498246 612 | https://shodan.io/search?query=http.favicon.hash%3A766268546 613 | https://shodan.io/search?query=http.favicon.hash%3A-766696303 614 | https://shodan.io/search?query=http.favicon.hash%3A768326388 615 | https://shodan.io/search?query=http.favicon.hash%3A769178943 616 | https://shodan.io/search?query=http.favicon.hash%3A-7700528 617 | https://shodan.io/search?query=http.favicon.hash%3A772273815 618 | https://shodan.io/search?query=http.favicon.hash%3A-777317900 619 | https://shodan.io/search?query=http.favicon.hash%3A778274090 620 | https://shodan.io/search?query=http.favicon.hash%3A7789801 621 | https://shodan.io/search?query=http.favicon.hash%3A779007919 622 | https://shodan.io/search?query=http.favicon.hash%3A780217805 623 | https://shodan.io/search?query=http.favicon.hash%3A780476387 624 | https://shodan.io/search?query=http.favicon.hash%3A-781711730 625 | https://shodan.io/search?query=http.favicon.hash%3A781922099 626 | https://shodan.io/search?query=http.favicon.hash%3A-782495286 627 | https://shodan.io/search?query=http.favicon.hash%3A783813256 628 | https://shodan.io/search?query=http.favicon.hash%3A-784701567 629 | https://shodan.io/search?query=http.favicon.hash%3A-78510704 630 | https://shodan.io/search?query=http.favicon.hash%3A-785381255 631 | https://shodan.io/search?query=http.favicon.hash%3A785481277 632 | https://shodan.io/search?query=http.favicon.hash%3A785689986 633 | https://shodan.io/search?query=http.favicon.hash%3A785826433 634 | https://shodan.io/search?query=http.favicon.hash%3A788525476 635 | https://shodan.io/search?query=http.favicon.hash%3A79209533 636 | https://shodan.io/search?query=http.favicon.hash%3A794145994 637 | https://shodan.io/search?query=http.favicon.hash%3A-794505895 638 | https://shodan.io/search?query=http.favicon.hash%3A797587958 639 | https://shodan.io/search?query=http.favicon.hash%3A-798679714 640 | https://shodan.io/search?query=http.favicon.hash%3A-799972952 641 | https://shodan.io/search?query=http.favicon.hash%3A-800060828 642 | https://shodan.io/search?query=http.favicon.hash%3A-801497839 643 | https://shodan.io/search?query=http.favicon.hash%3A801748283 644 | https://shodan.io/search?query=http.favicon.hash%3A-802964362 645 | https://shodan.io/search?query=http.favicon.hash%3A804567818 646 | https://shodan.io/search?query=http.favicon.hash%3A805988264 647 | https://shodan.io/search?query=http.favicon.hash%3A809250535 648 | https://shodan.io/search?query=http.favicon.hash%3A809512686 649 | https://shodan.io/search?query=http.favicon.hash%3A811185164 650 | https://shodan.io/search?query=http.favicon.hash%3A-811303201 651 | https://shodan.io/search?query=http.favicon.hash%3A811868221 652 | https://shodan.io/search?query=http.favicon.hash%3A811950545 653 | https://shodan.io/search?query=http.favicon.hash%3A-812207762 654 | https://shodan.io/search?query=http.favicon.hash%3A81316656 655 | https://shodan.io/search?query=http.favicon.hash%3A-814971863 656 | https://shodan.io/search?query=http.favicon.hash%3A815049873 657 | https://shodan.io/search?query=http.favicon.hash%3A-81573405 658 | https://shodan.io/search?query=http.favicon.hash%3A819061176 659 | https://shodan.io/search?query=http.favicon.hash%3A820812202 660 | https://shodan.io/search?query=http.favicon.hash%3A-821871504 661 | https://shodan.io/search?query=http.favicon.hash%3A-823586955 662 | https://shodan.io/search?query=http.favicon.hash%3A-824418064 663 | https://shodan.io/search?query=http.favicon.hash%3A824580113 664 | https://shodan.io/search?query=http.favicon.hash%3A824795781 665 | https://shodan.io/search?query=http.favicon.hash%3A824976804 666 | https://shodan.io/search?query=http.favicon.hash%3A825767714 667 | https://shodan.io/search?query=http.favicon.hash%3A826951121 668 | https://shodan.io/search?query=http.favicon.hash%3A-827143180 669 | https://shodan.io/search?query=http.favicon.hash%3A827830640 670 | https://shodan.io/search?query=http.favicon.hash%3A828423215 671 | https://shodan.io/search?query=http.favicon.hash%3A-830586692 672 | https://shodan.io/search?query=http.favicon.hash%3A831854882 673 | https://shodan.io/search?query=http.favicon.hash%3A833104563 674 | https://shodan.io/search?query=http.favicon.hash%3A834091382 675 | https://shodan.io/search?query=http.favicon.hash%3A839662529 676 | https://shodan.io/search?query=http.favicon.hash%3A842015223 677 | https://shodan.io/search?query=http.favicon.hash%3A-842852785 678 | https://shodan.io/search?query=http.favicon.hash%3A843082316 679 | https://shodan.io/search?query=http.favicon.hash%3A843498786 680 | https://shodan.io/search?query=http.favicon.hash%3A-843664867 681 | https://shodan.io/search?query=http.favicon.hash%3A-847336917 682 | https://shodan.io/search?query=http.favicon.hash%3A-853391985 683 | https://shodan.io/search?query=http.favicon.hash%3A854283218 684 | https://shodan.io/search?query=http.favicon.hash%3A-855706839 685 | https://shodan.io/search?query=http.favicon.hash%3A856038736 686 | https://shodan.io/search?query=http.favicon.hash%3A856048515 687 | https://shodan.io/search?query=http.favicon.hash%3A857371519 688 | https://shodan.io/search?query=http.favicon.hash%3A-857956556 689 | https://shodan.io/search?query=http.favicon.hash%3A86060788 690 | https://shodan.io/search?query=http.favicon.hash%3A-862246819 691 | https://shodan.io/search?query=http.favicon.hash%3A865837966 692 | https://shodan.io/search?query=http.favicon.hash%3A-866527051 693 | https://shodan.io/search?query=http.favicon.hash%3A868509217 694 | https://shodan.io/search?query=http.favicon.hash%3A869377142 695 | https://shodan.io/search?query=http.favicon.hash%3A-870706442 696 | https://shodan.io/search?query=http.favicon.hash%3A-871136382 697 | https://shodan.io/search?query=http.favicon.hash%3A871686328 698 | https://shodan.io/search?query=http.favicon.hash%3A-872342057 699 | https://shodan.io/search?query=http.favicon.hash%3A-87272846 700 | https://shodan.io/search?query=http.favicon.hash%3A873455574 701 | https://shodan.io/search?query=http.favicon.hash%3A-874050015 702 | https://shodan.io/search?query=http.favicon.hash%3A-87451947 703 | https://shodan.io/search?query=http.favicon.hash%3A874829332 704 | https://shodan.io/search?query=http.favicon.hash%3A-878316862 705 | https://shodan.io/search?query=http.favicon.hash%3A-879846992 706 | https://shodan.io/search?query=http.favicon.hash%3A-880319982 707 | https://shodan.io/search?query=http.favicon.hash%3A880591404 708 | https://shodan.io/search?query=http.favicon.hash%3A-882369391 709 | https://shodan.io/search?query=http.favicon.hash%3A-883090611 710 | https://shodan.io/search?query=http.favicon.hash%3A884318586 711 | https://shodan.io/search?query=http.favicon.hash%3A-884428650 712 | https://shodan.io/search?query=http.favicon.hash%3A889464688 713 | https://shodan.io/search?query=http.favicon.hash%3A-889480488 714 | https://shodan.io/search?query=http.favicon.hash%3A-894432457 715 | https://shodan.io/search?query=http.favicon.hash%3A89931604 716 | https://shodan.io/search?query=http.favicon.hash%3A899320116 717 | https://shodan.io/search?query=http.favicon.hash%3A-905580600 718 | https://shodan.io/search?query=http.favicon.hash%3A-907297847 719 | https://shodan.io/search?query=http.favicon.hash%3A908188511 720 | https://shodan.io/search?query=http.favicon.hash%3A-908445132 721 | https://shodan.io/search?query=http.favicon.hash%3A908810411 722 | https://shodan.io/search?query=http.favicon.hash%3A909536006 723 | https://shodan.io/search?query=http.favicon.hash%3A-910306576 724 | https://shodan.io/search?query=http.favicon.hash%3A-911494769 725 | https://shodan.io/search?query=http.favicon.hash%3A-912597042 726 | https://shodan.io/search?query=http.favicon.hash%3A913203420 727 | https://shodan.io/search?query=http.favicon.hash%3A913947100 728 | https://shodan.io/search?query=http.favicon.hash%3A917023356 729 | https://shodan.io/search?query=http.favicon.hash%3A917039750 730 | https://shodan.io/search?query=http.favicon.hash%3A918078750 731 | https://shodan.io/search?query=http.favicon.hash%3A926745382 732 | https://shodan.io/search?query=http.favicon.hash%3A926939606 733 | https://shodan.io/search?query=http.favicon.hash%3A-92723156 734 | https://shodan.io/search?query=http.favicon.hash%3A-927923449 735 | https://shodan.io/search?query=http.favicon.hash%3A930969993 736 | https://shodan.io/search?query=http.favicon.hash%3A-933245036 737 | https://shodan.io/search?query=http.favicon.hash%3A933976300 738 | https://shodan.io/search?query=http.favicon.hash%3A93664432 739 | https://shodan.io/search?query=http.favicon.hash%3A93750077 740 | https://shodan.io/search?query=http.favicon.hash%3A-937706392 741 | https://shodan.io/search?query=http.favicon.hash%3A-937763738 742 | https://shodan.io/search?query=http.favicon.hash%3A940098669 743 | https://shodan.io/search?query=http.favicon.hash%3A940899682 744 | https://shodan.io/search?query=http.favicon.hash%3A944466895 745 | https://shodan.io/search?query=http.favicon.hash%3A945536415 746 | https://shodan.io/search?query=http.favicon.hash%3A948054189 747 | https://shodan.io/search?query=http.favicon.hash%3A948684587 748 | https://shodan.io/search?query=http.favicon.hash%3A949485285 749 | https://shodan.io/search?query=http.favicon.hash%3A949619819 750 | https://shodan.io/search?query=http.favicon.hash%3A95020227 751 | https://shodan.io/search?query=http.favicon.hash%3A-950408099 752 | https://shodan.io/search?query=http.favicon.hash%3A-950790147 753 | https://shodan.io/search?query=http.favicon.hash%3A-951636338 754 | https://shodan.io/search?query=http.favicon.hash%3A-951710301 755 | https://shodan.io/search?query=http.favicon.hash%3A952114270 756 | https://shodan.io/search?query=http.favicon.hash%3A952729794 757 | https://shodan.io/search?query=http.favicon.hash%3A952908305 758 | https://shodan.io/search?query=http.favicon.hash%3A-953655780 759 | https://shodan.io/search?query=http.favicon.hash%3A-954617359 760 | https://shodan.io/search?query=http.favicon.hash%3A-954752075 761 | https://shodan.io/search?query=http.favicon.hash%3A-954931144 762 | https://shodan.io/search?query=http.favicon.hash%3A-955536579 763 | https://shodan.io/search?query=http.favicon.hash%3A955542407 764 | https://shodan.io/search?query=http.favicon.hash%3A-955804297 765 | https://shodan.io/search?query=http.favicon.hash%3A956507895 766 | https://shodan.io/search?query=http.favicon.hash%3A-956861224 767 | https://shodan.io/search?query=http.favicon.hash%3A957255151 768 | https://shodan.io/search?query=http.favicon.hash%3A958636481 769 | https://shodan.io/search?query=http.favicon.hash%3A-958801415 770 | https://shodan.io/search?query=http.favicon.hash%3A960250052 771 | https://shodan.io/search?query=http.favicon.hash%3A-961170017 772 | https://shodan.io/search?query=http.favicon.hash%3A-962257523 773 | https://shodan.io/search?query=http.favicon.hash%3A962409295 774 | https://shodan.io/search?query=http.favicon.hash%3A963309512 775 | https://shodan.io/search?query=http.favicon.hash%3A-964906040 776 | https://shodan.io/search?query=http.favicon.hash%3A96529132 777 | https://shodan.io/search?query=http.favicon.hash%3A965982073 778 | https://shodan.io/search?query=http.favicon.hash%3A96676581 779 | https://shodan.io/search?query=http.favicon.hash%3A967237228 780 | https://shodan.io/search?query=http.favicon.hash%3A96780829 781 | https://shodan.io/search?query=http.favicon.hash%3A969044289 782 | https://shodan.io/search?query=http.favicon.hash%3A-969164580 783 | https://shodan.io/search?query=http.favicon.hash%3A-969356772 784 | https://shodan.io/search?query=http.favicon.hash%3A969374472 785 | https://shodan.io/search?query=http.favicon.hash%3A97040601 786 | https://shodan.io/search?query=http.favicon.hash%3A970842691 787 | https://shodan.io/search?query=http.favicon.hash%3A973393032 788 | https://shodan.io/search?query=http.favicon.hash%3A-973686952 789 | https://shodan.io/search?query=http.favicon.hash%3A973962626 790 | https://shodan.io/search?query=http.favicon.hash%3A-973967843 791 | https://shodan.io/search?query=http.favicon.hash%3A-975055504 792 | https://shodan.io/search?query=http.favicon.hash%3A975625564 793 | https://shodan.io/search?query=http.favicon.hash%3A-976840749 794 | https://shodan.io/search?query=http.favicon.hash%3A-976987789 795 | https://shodan.io/search?query=http.favicon.hash%3A-977323269 796 | https://shodan.io/search?query=http.favicon.hash%3A977726833 797 | https://shodan.io/search?query=http.favicon.hash%3A-978455095 798 | https://shodan.io/search?query=http.favicon.hash%3A978514697 799 | https://shodan.io/search?query=http.favicon.hash%3A-980411143 800 | https://shodan.io/search?query=http.favicon.hash%3A-982116487 801 | https://shodan.io/search?query=http.favicon.hash%3A983455647 802 | https://shodan.io/search?query=http.favicon.hash%3A984279902 803 | https://shodan.io/search?query=http.favicon.hash%3A991466774 804 | https://shodan.io/search?query=http.favicon.hash%3A99184871 805 | https://shodan.io/search?query=http.favicon.hash%3A-993213697 806 | https://shodan.io/search?query=http.favicon.hash%3A-994374986 -------------------------------------------------------------------------------- /scripts/nuclei-templates-favicon.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # 3 | # https://github.com/edoardottt/favirecon 4 | # 5 | # This script collects favicon hashes from the 6 | # ProjectDiscovery/nuclei-templates GitHub repository. 7 | # 8 | 9 | import os 10 | import yaml 11 | 12 | 13 | # ----- retreive all nuclei templates ----- 14 | nuclei_templates_path = os.getenv("HOME") + "/nuclei-templates" 15 | 16 | templates = [ 17 | os.path.join(dp, f) 18 | for dp, dn, filenames in os.walk(nuclei_templates_path) 19 | for f in filenames 20 | if os.path.splitext(f)[1] == ".yaml" 21 | ] 22 | 23 | 24 | # ----- scan all nuclei templates ----- 25 | for template in templates: 26 | with open(template, "r") as f: 27 | content = yaml.safe_load(f) 28 | if "metadata" in content["info"]: 29 | if "shodan-query" in content["info"]["metadata"]: 30 | if "favicon.hash" in content["info"]["metadata"]["shodan-query"]: 31 | shodan_query = content["info"]["metadata"]["shodan-query"] 32 | parts = shodan_query.split(":") 33 | for part in parts: 34 | if part.isnumeric() or part[0] == "-": 35 | if "product" in content["info"]["metadata"]: 36 | print( 37 | part + " " + content["info"]["metadata"]["product"] 38 | ) 39 | else: 40 | print( 41 | "https://www.shodan.io/search?query=http.favicon.hash%3A" 42 | + part 43 | ) 44 | -------------------------------------------------------------------------------- /snapcraft.yaml: -------------------------------------------------------------------------------- 1 | name: favirecon 2 | summary: Use favicon.ico to improve your target recon phase 3 | description: | 4 | Use favicon.ico to improve your target recon phase. 5 | Quickly detect technologies, WAF, exposed panels, known services. 6 | version: 1.0.0 7 | grade: stable 8 | base: core20 9 | 10 | confinement: strict 11 | 12 | apps: 13 | favirecon: 14 | command: bin/favirecon 15 | plugs: 16 | - home 17 | - network 18 | 19 | parts: 20 | favirecon: 21 | plugin: go 22 | source-type: git 23 | source: https://github.com/edoardottt/favirecon 24 | --------------------------------------------------------------------------------