user-scanner 1.0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- user_scanner-1.0.7.0/LICENSE +21 -0
- user_scanner-1.0.7.0/PKG-INFO +142 -0
- user_scanner-1.0.7.0/README.md +128 -0
- user_scanner-1.0.7.0/pyproject.toml +29 -0
- user_scanner-1.0.7.0/user_scanner/__init__.py +0 -0
- user_scanner-1.0.7.0/user_scanner/__main__.py +134 -0
- user_scanner-1.0.7.0/user_scanner/cli/__init__.py +0 -0
- user_scanner-1.0.7.0/user_scanner/cli/banner.py +34 -0
- user_scanner-1.0.7.0/user_scanner/community/__init__.py +0 -0
- user_scanner-1.0.7.0/user_scanner/community/coderlegion.py +19 -0
- user_scanner-1.0.7.0/user_scanner/core/__init__.py +0 -0
- user_scanner-1.0.7.0/user_scanner/core/orchestrator.py +178 -0
- user_scanner-1.0.7.0/user_scanner/creator/__init__.py +0 -0
- user_scanner-1.0.7.0/user_scanner/creator/devto.py +19 -0
- user_scanner-1.0.7.0/user_scanner/creator/hashnode.py +56 -0
- user_scanner-1.0.7.0/user_scanner/creator/itch_io.py +24 -0
- user_scanner-1.0.7.0/user_scanner/creator/kaggle.py +19 -0
- user_scanner-1.0.7.0/user_scanner/creator/medium.py +42 -0
- user_scanner-1.0.7.0/user_scanner/creator/patreon.py +25 -0
- user_scanner-1.0.7.0/user_scanner/creator/producthunt.py +42 -0
- user_scanner-1.0.7.0/user_scanner/dev/__init__.py +1 -0
- user_scanner-1.0.7.0/user_scanner/dev/codeberg.py +19 -0
- user_scanner-1.0.7.0/user_scanner/dev/cratesio.py +26 -0
- user_scanner-1.0.7.0/user_scanner/dev/dockerhub.py +24 -0
- user_scanner-1.0.7.0/user_scanner/dev/github.py +33 -0
- user_scanner-1.0.7.0/user_scanner/dev/gitlab.py +39 -0
- user_scanner-1.0.7.0/user_scanner/dev/launchpad.py +26 -0
- user_scanner-1.0.7.0/user_scanner/dev/npmjs.py +43 -0
- user_scanner-1.0.7.0/user_scanner/dev/replit.py +19 -0
- user_scanner-1.0.7.0/user_scanner/donation/__init__.py +0 -0
- user_scanner-1.0.7.0/user_scanner/donation/buymeacoffee.py +22 -0
- user_scanner-1.0.7.0/user_scanner/donation/liberapay.py +36 -0
- user_scanner-1.0.7.0/user_scanner/gaming/__init__.py +0 -0
- user_scanner-1.0.7.0/user_scanner/gaming/chess_com.py +43 -0
- user_scanner-1.0.7.0/user_scanner/gaming/minecraft.py +24 -0
- user_scanner-1.0.7.0/user_scanner/gaming/monkeytype.py +51 -0
- user_scanner-1.0.7.0/user_scanner/gaming/osu.py +24 -0
- user_scanner-1.0.7.0/user_scanner/gaming/roblox.py +38 -0
- user_scanner-1.0.7.0/user_scanner/gaming/steam.py +32 -0
- user_scanner-1.0.7.0/user_scanner/social/__init__.py +1 -0
- user_scanner-1.0.7.0/user_scanner/social/bluesky.py +60 -0
- user_scanner-1.0.7.0/user_scanner/social/discord.py +43 -0
- user_scanner-1.0.7.0/user_scanner/social/instagram.py +29 -0
- user_scanner-1.0.7.0/user_scanner/social/mastodon.py +25 -0
- user_scanner-1.0.7.0/user_scanner/social/pinterest.py +28 -0
- user_scanner-1.0.7.0/user_scanner/social/reddit.py +28 -0
- user_scanner-1.0.7.0/user_scanner/social/snapchat.py +35 -0
- user_scanner-1.0.7.0/user_scanner/social/telegram.py +29 -0
- user_scanner-1.0.7.0/user_scanner/social/threads.py +29 -0
- user_scanner-1.0.7.0/user_scanner/social/x.py +56 -0
- user_scanner-1.0.7.0/user_scanner/social/youtube.py +59 -0
- user_scanner-1.0.7.0/user_scanner/utils/update.py +0 -0
- user_scanner-1.0.7.0/user_scanner/utils/version.py +22 -0
- user_scanner-1.0.7.0/user_scanner/version.json +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Kaif
|
|
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.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: user-scanner
|
|
3
|
+
Version: 1.0.7.0
|
|
4
|
+
Summary: Check username availability across multiple popular platforms
|
|
5
|
+
Keywords: username,checker,availability,social,tech,python,user-scanner
|
|
6
|
+
Author-email: Kaif <kafcodec@gmail.com>
|
|
7
|
+
Requires-Python: >=3.7
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: httpx
|
|
11
|
+
Requires-Dist: colorama
|
|
12
|
+
Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
|
|
13
|
+
|
|
14
|
+
# User Scanner
|
|
15
|
+
|
|
16
|
+

|
|
17
|
+
<p align="center">
|
|
18
|
+
<img src="https://img.shields.io/badge/Version-1.0.7.0-blueviolet?style=for-the-badge&logo=github" />
|
|
19
|
+
<img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
|
|
20
|
+
<img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
|
|
21
|
+
<img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
|
|
22
|
+
<img src="https://img.shields.io/badge/Tested%20on-Linux-balck?style=for-the-badge&logo=Linux" />
|
|
23
|
+
<img src="https://img.shields.io/pepy/dt/user-scanner?style=for-the-badge" />
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
Scan a username across multiple social, developer, and creator platforms to see if it’s available.
|
|
29
|
+
Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in one command.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
- ✅ Check usernames across **social networks**, **developer platforms**, and **creator communities**.
|
|
35
|
+
- ✅ Clear **Available / Taken / Error** output for each platform.
|
|
36
|
+
- ✅ Fully modular: add new platform modules easily.
|
|
37
|
+
- ✅ Wildcard-based username permutations for automatic variation generation
|
|
38
|
+
- ✅ Command-line interface ready: works directly after `pip install`.
|
|
39
|
+
- ✅ Can be used as username OSINT tool.
|
|
40
|
+
- ✅ Very low and lightweight dependencies, can be run on any machine.
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
### Installation
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pip install user-scanner
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### Usage
|
|
52
|
+
|
|
53
|
+
Scan a username across all platforms:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
user-scanner -u <username>
|
|
57
|
+
```
|
|
58
|
+
Optionally, scan a specific category or single module:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
user-scanner -u <username> -c dev
|
|
62
|
+
user-scanner -l # Lists all available modules
|
|
63
|
+
user-scanner -u <username> -m github
|
|
64
|
+
user-scanner -u <username> -p <suffix>
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Generate multiple username variations by appending a suffix:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
user-scanner -u <username> -p <suffix>
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Optionally, scan a specific category or single module with limit:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
user-scanner -u <username> -p <suffix> -c dev
|
|
78
|
+
user-scanner -u <username> -p <suffix> -m github
|
|
79
|
+
user-scanner -u <username> -p <suffix> -s <number> # limit generation of usernames
|
|
80
|
+
user-scanner -u <username> -p <suffix> -d <seconds> #delay to avoid rate-limits
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
### Screenshot:
|
|
85
|
+
|
|
86
|
+
- Note*: New modules are constantly getting added so this might have only limited, outdated output:
|
|
87
|
+
|
|
88
|
+
<img width="1008" height="568" alt="1000139959" src="https://github.com/user-attachments/assets/467a4aa0-238d-4110-b9a6-d4b96c244432" />
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
### Contributing:
|
|
92
|
+
|
|
93
|
+
Modules are organized by category:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
user_scanner/
|
|
97
|
+
├── dev/ # Developer platforms (GitHub, GitLab, etc.)
|
|
98
|
+
├── social/ # Social platforms (Twitter/X, Reddit, Instagram, etc.)
|
|
99
|
+
├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, etc.)
|
|
100
|
+
├── community/ # Community platforms (forums, niche sites)
|
|
101
|
+
├── gaming/ # Gaming sites (chess.com, roblox, monkeytype etc.)
|
|
102
|
+
├── donation/ # Donation taking sites (buymeacoffe.com, similar...)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Module guidelines:**
|
|
106
|
+
- Each module must define a `validate_<site>()` function that takes a `username` and returns:
|
|
107
|
+
- `1` → Available
|
|
108
|
+
- `0` → Taken
|
|
109
|
+
- `2` → Error / Could not check
|
|
110
|
+
- Use `httpx` for requests, `colorama` for colored output.
|
|
111
|
+
- Optional: modules can define a CLI parser if they support custom arguments.
|
|
112
|
+
|
|
113
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
|
|
114
|
+
|
|
115
|
+
### 📧 Contact:
|
|
116
|
+
- [Email](kaifcodec@gmail.com)
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Dependencies:
|
|
121
|
+
- [httpx](https://pypi.org/project/httpx/)
|
|
122
|
+
- [colorama](https://pypi.org/project/colorama/)
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### License
|
|
127
|
+
|
|
128
|
+
This project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Star History
|
|
134
|
+
|
|
135
|
+
<a href="https://www.star-history.com/#kaifcodec/user-scanner&type=date&legend=top-left">
|
|
136
|
+
<picture>
|
|
137
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&theme=dark&legend=top-left" />
|
|
138
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
|
|
139
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
|
|
140
|
+
</picture>
|
|
141
|
+
</a>
|
|
142
|
+
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# User Scanner
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
<p align="center">
|
|
5
|
+
<img src="https://img.shields.io/badge/Version-1.0.7.0-blueviolet?style=for-the-badge&logo=github" />
|
|
6
|
+
<img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
|
|
7
|
+
<img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
|
|
8
|
+
<img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
|
|
9
|
+
<img src="https://img.shields.io/badge/Tested%20on-Linux-balck?style=for-the-badge&logo=Linux" />
|
|
10
|
+
<img src="https://img.shields.io/pepy/dt/user-scanner?style=for-the-badge" />
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Scan a username across multiple social, developer, and creator platforms to see if it’s available.
|
|
16
|
+
Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in one command.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
- ✅ Check usernames across **social networks**, **developer platforms**, and **creator communities**.
|
|
22
|
+
- ✅ Clear **Available / Taken / Error** output for each platform.
|
|
23
|
+
- ✅ Fully modular: add new platform modules easily.
|
|
24
|
+
- ✅ Wildcard-based username permutations for automatic variation generation
|
|
25
|
+
- ✅ Command-line interface ready: works directly after `pip install`.
|
|
26
|
+
- ✅ Can be used as username OSINT tool.
|
|
27
|
+
- ✅ Very low and lightweight dependencies, can be run on any machine.
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
### Installation
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pip install user-scanner
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### Usage
|
|
39
|
+
|
|
40
|
+
Scan a username across all platforms:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
user-scanner -u <username>
|
|
44
|
+
```
|
|
45
|
+
Optionally, scan a specific category or single module:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
user-scanner -u <username> -c dev
|
|
49
|
+
user-scanner -l # Lists all available modules
|
|
50
|
+
user-scanner -u <username> -m github
|
|
51
|
+
user-scanner -u <username> -p <suffix>
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Generate multiple username variations by appending a suffix:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
user-scanner -u <username> -p <suffix>
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Optionally, scan a specific category or single module with limit:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
user-scanner -u <username> -p <suffix> -c dev
|
|
65
|
+
user-scanner -u <username> -p <suffix> -m github
|
|
66
|
+
user-scanner -u <username> -p <suffix> -s <number> # limit generation of usernames
|
|
67
|
+
user-scanner -u <username> -p <suffix> -d <seconds> #delay to avoid rate-limits
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
### Screenshot:
|
|
72
|
+
|
|
73
|
+
- Note*: New modules are constantly getting added so this might have only limited, outdated output:
|
|
74
|
+
|
|
75
|
+
<img width="1008" height="568" alt="1000139959" src="https://github.com/user-attachments/assets/467a4aa0-238d-4110-b9a6-d4b96c244432" />
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
### Contributing:
|
|
79
|
+
|
|
80
|
+
Modules are organized by category:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
user_scanner/
|
|
84
|
+
├── dev/ # Developer platforms (GitHub, GitLab, etc.)
|
|
85
|
+
├── social/ # Social platforms (Twitter/X, Reddit, Instagram, etc.)
|
|
86
|
+
├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, etc.)
|
|
87
|
+
├── community/ # Community platforms (forums, niche sites)
|
|
88
|
+
├── gaming/ # Gaming sites (chess.com, roblox, monkeytype etc.)
|
|
89
|
+
├── donation/ # Donation taking sites (buymeacoffe.com, similar...)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Module guidelines:**
|
|
93
|
+
- Each module must define a `validate_<site>()` function that takes a `username` and returns:
|
|
94
|
+
- `1` → Available
|
|
95
|
+
- `0` → Taken
|
|
96
|
+
- `2` → Error / Could not check
|
|
97
|
+
- Use `httpx` for requests, `colorama` for colored output.
|
|
98
|
+
- Optional: modules can define a CLI parser if they support custom arguments.
|
|
99
|
+
|
|
100
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
|
|
101
|
+
|
|
102
|
+
### 📧 Contact:
|
|
103
|
+
- [Email](kaifcodec@gmail.com)
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### Dependencies:
|
|
108
|
+
- [httpx](https://pypi.org/project/httpx/)
|
|
109
|
+
- [colorama](https://pypi.org/project/colorama/)
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### License
|
|
114
|
+
|
|
115
|
+
This project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### Star History
|
|
121
|
+
|
|
122
|
+
<a href="https://www.star-history.com/#kaifcodec/user-scanner&type=date&legend=top-left">
|
|
123
|
+
<picture>
|
|
124
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&theme=dark&legend=top-left" />
|
|
125
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
|
|
126
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
|
|
127
|
+
</picture>
|
|
128
|
+
</a>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["flit_core >=3.2,<4"]
|
|
3
|
+
build-backend = "flit_core.buildapi"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "user-scanner"
|
|
7
|
+
version = "1.0.7.0"
|
|
8
|
+
description = "Check username availability across multiple popular platforms"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {file = "LICENSE"}
|
|
11
|
+
authors = [
|
|
12
|
+
{name = "Kaif", email = "kafcodec@gmail.com"}
|
|
13
|
+
]
|
|
14
|
+
dependencies = [
|
|
15
|
+
"httpx",
|
|
16
|
+
"colorama"
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
requires-python = ">=3.7"
|
|
20
|
+
keywords = ["username", "checker", "availability", "social", "tech", "python", "user-scanner"]
|
|
21
|
+
|
|
22
|
+
[project.urls]
|
|
23
|
+
Homepage = "https://github.com/kaifcodec/user-scanner"
|
|
24
|
+
|
|
25
|
+
[project.scripts]
|
|
26
|
+
user-scanner = "user_scanner.__main__:main"
|
|
27
|
+
|
|
28
|
+
[tool.flit.sdist]
|
|
29
|
+
exclude = ["tests/", "docs/", ".github/", ".git", "rm_pycache.py", "che.py", ".gitignore"]
|
|
File without changes
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import time
|
|
3
|
+
import re
|
|
4
|
+
from user_scanner.core.orchestrator import run_checks, load_modules , generate_permutations, load_categories
|
|
5
|
+
from colorama import Fore, Style
|
|
6
|
+
from .cli import banner
|
|
7
|
+
from .cli.banner import print_banner
|
|
8
|
+
|
|
9
|
+
MAX_PERMUTATIONS_LIMIT = 100 # To prevent excessive generation
|
|
10
|
+
|
|
11
|
+
def list_modules(category=None):
|
|
12
|
+
categories = load_categories()
|
|
13
|
+
categories_to_list = [category] if category else categories.keys()
|
|
14
|
+
|
|
15
|
+
for cat_name in categories_to_list:
|
|
16
|
+
path = categories[cat_name]
|
|
17
|
+
modules = load_modules(path)
|
|
18
|
+
print(Fore.MAGENTA +
|
|
19
|
+
f"\n== {cat_name.upper()} SITES =={Style.RESET_ALL}")
|
|
20
|
+
for module in modules:
|
|
21
|
+
site_name = module.__name__.split(".")[-1]
|
|
22
|
+
print(f" - {site_name}")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def main():
|
|
26
|
+
parser = argparse.ArgumentParser(
|
|
27
|
+
prog="user-scanner",
|
|
28
|
+
description="Scan usernames across multiple platforms."
|
|
29
|
+
)
|
|
30
|
+
parser.add_argument(
|
|
31
|
+
"-u", "--username", help="Username to scan across platforms"
|
|
32
|
+
)
|
|
33
|
+
parser.add_argument(
|
|
34
|
+
"-c", "--category", choices=load_categories().keys(),
|
|
35
|
+
help="Scan all platforms in a category"
|
|
36
|
+
)
|
|
37
|
+
parser.add_argument(
|
|
38
|
+
"-m", "--module", help="Scan a single specific module across all categories"
|
|
39
|
+
)
|
|
40
|
+
parser.add_argument(
|
|
41
|
+
"-l", "--list", action="store_true", help="List all available modules by category"
|
|
42
|
+
)
|
|
43
|
+
parser.add_argument(
|
|
44
|
+
"-v", "--verbose", action="store_true", help="Enable verbose output"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
parser.add_argument(
|
|
48
|
+
"-p", "--permute",type=str,help="Generate username permutations using a string pattern (e.g -p 234)"
|
|
49
|
+
)
|
|
50
|
+
parser.add_argument(
|
|
51
|
+
"-s", "--stop",type=int,default=MAX_PERMUTATIONS_LIMIT,help="Limit the number of username permutations generated"
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
parser.add_argument(
|
|
55
|
+
"-d", "--delay",type=float,default=0,help="Delay in seconds between requests (recommended: 1-2 seconds)"
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
args = parser.parse_args()
|
|
59
|
+
|
|
60
|
+
if args.list:
|
|
61
|
+
list_modules(args.category)
|
|
62
|
+
return
|
|
63
|
+
|
|
64
|
+
if not args.username:
|
|
65
|
+
parser.print_help()
|
|
66
|
+
return
|
|
67
|
+
|
|
68
|
+
# Special username checks before run
|
|
69
|
+
if (args.module == "x" or args.category == "social"):
|
|
70
|
+
if re.search(r"[^a-zA-Z0-9._-]", args.username):
|
|
71
|
+
print(
|
|
72
|
+
Fore.RED + f"[!] Username '{args.username}' contains unsupported special characters. X (Twitter) doesn't support these." + Style.RESET_ALL)
|
|
73
|
+
if (args.module == "bluesky" or args.category == "social"):
|
|
74
|
+
if re.search(r"[^a-zA-Z0-9\.-]", args.username):
|
|
75
|
+
print(
|
|
76
|
+
Fore.RED + f"[!] Username '{args.username}' contains unsupported special characters. Bluesky will throw error. (Supported: only hyphens and digits)" + Style.RESET_ALL + "\n")
|
|
77
|
+
print_banner()
|
|
78
|
+
|
|
79
|
+
if args.permute and args.delay == 0:
|
|
80
|
+
print(
|
|
81
|
+
Fore.YELLOW
|
|
82
|
+
+ "[!] Warning: You're generating multiple usernames with NO delay between requests. "
|
|
83
|
+
"This may trigger rate limits or IP bans. Use --delay 1 or higher. (Use only if the sites throw errors otherwise ignore)\n"
|
|
84
|
+
+ Style.RESET_ALL)
|
|
85
|
+
|
|
86
|
+
usernames = [args.username] # Default single username list
|
|
87
|
+
|
|
88
|
+
#Added permutation support , generate all possible permutation of given sequence.
|
|
89
|
+
if args.permute:
|
|
90
|
+
usernames = generate_permutations(args.username, args.permute , args.stop)
|
|
91
|
+
print(Fore.CYAN + f"[+] Generated {len(usernames)} username permutations" + Style.RESET_ALL)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if args.module and "." in args.module:
|
|
96
|
+
args.module = args.module.replace(".", "_")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
if args.module:
|
|
100
|
+
# Single module search across all categories
|
|
101
|
+
found = False
|
|
102
|
+
for cat_path in load_categories().values():
|
|
103
|
+
modules = load_modules(cat_path)
|
|
104
|
+
for module in modules:
|
|
105
|
+
site_name = module.__name__.split(".")[-1]
|
|
106
|
+
if site_name.lower() == args.module.lower():
|
|
107
|
+
from user_scanner.core.orchestrator import run_module_single
|
|
108
|
+
for name in usernames: # <-- permutation support here
|
|
109
|
+
run_module_single(module, name)
|
|
110
|
+
if args.delay > 0:
|
|
111
|
+
time.sleep(args.delay)
|
|
112
|
+
found = True
|
|
113
|
+
if not found:
|
|
114
|
+
print(
|
|
115
|
+
Fore.RED + f"[!] Module '{args.module}' not found in any category." + Style.RESET_ALL)
|
|
116
|
+
elif args.category:
|
|
117
|
+
# Category-wise scan
|
|
118
|
+
category_package = load_categories().get(args.category)
|
|
119
|
+
from user_scanner.core.orchestrator import run_checks_category
|
|
120
|
+
|
|
121
|
+
for name in usernames: # <-- permutation support here
|
|
122
|
+
run_checks_category(category_package, name, args.verbose)
|
|
123
|
+
if args.delay > 0:
|
|
124
|
+
time.sleep(args.delay)
|
|
125
|
+
else:
|
|
126
|
+
# Full scan
|
|
127
|
+
for name in usernames:
|
|
128
|
+
run_checks(name)
|
|
129
|
+
if args.delay > 0:
|
|
130
|
+
time.sleep(args.delay)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
if __name__ == "__main__":
|
|
134
|
+
main()
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from colorama import Fore, Style, init
|
|
3
|
+
from ..utils.version import load_local_version
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
version, version_type = load_local_version()
|
|
7
|
+
init(autoreset=True)
|
|
8
|
+
C_RED = Fore.RED + Style.BRIGHT
|
|
9
|
+
C_CYAN = Fore.CYAN + Style.BRIGHT
|
|
10
|
+
C_GREEN = Fore.GREEN + Style.BRIGHT
|
|
11
|
+
C_WHITE = Fore.WHITE + Style.BRIGHT
|
|
12
|
+
C_MAGENTA = Fore.MAGENTA + Style.BRIGHT
|
|
13
|
+
BANNER_ASCII = fr"""{C_CYAN} _ _ ___ ___ _ __ ___ ___ __ _ _ __ _ __ ___ _ __
|
|
14
|
+
| | | / __|/ _ \ '__|____/ __|/ __/ _` | '_ \| '_ \ / _ \ '__|
|
|
15
|
+
| |_| \__ \ __/ | |_____\__ \ (_| (_| | | | | | | | __/ |
|
|
16
|
+
\__,_|___/\___|_| |___/\___\__,_|_| |_|_| |_|\___|_| Version: {version}
|
|
17
|
+
{Style.RESET_ALL}""".strip()
|
|
18
|
+
|
|
19
|
+
INFO_BOX = f"""{C_MAGENTA} ╔════════════════════════════════════════╗
|
|
20
|
+
║ {C_RED}♚ {C_GREEN}Project Name{C_WHITE} : UserScanner {C_MAGENTA}║
|
|
21
|
+
║ {C_RED}♚ {C_GREEN}Author{C_WHITE} : Kaif {C_MAGENTA}║
|
|
22
|
+
║ {C_RED}♚ {C_GREEN}Github{C_WHITE} : github.com/kaifcodec {C_MAGENTA}║
|
|
23
|
+
║ {C_RED}♚ {C_GREEN}Email{C_WHITE} : kaifcodec@gmail.com {C_MAGENTA}║
|
|
24
|
+
══════════════════════════════════════════{Style.RESET_ALL}""".strip()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def print_banner():
|
|
28
|
+
print(BANNER_ASCII)
|
|
29
|
+
print(INFO_BOX)
|
|
30
|
+
print(" ")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
print_banner()
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from user_scanner.core.orchestrator import status_validate
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def validate_coderlegion(user):
|
|
5
|
+
url = f"https://coderlegion.com/user/{user}"
|
|
6
|
+
|
|
7
|
+
return status_validate(url, 404, 200, timeout=15.0)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if __name__ == "__main__":
|
|
11
|
+
user = input("Username?: ").strip()
|
|
12
|
+
result = validate_coderlegion(user)
|
|
13
|
+
|
|
14
|
+
if result == 1:
|
|
15
|
+
print("Available!")
|
|
16
|
+
elif result == 0:
|
|
17
|
+
print("Unavailable!")
|
|
18
|
+
else:
|
|
19
|
+
print("Error occured!")
|
|
File without changes
|