user-scanner 1.0.8.1__tar.gz → 1.1.0.2__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.
Files changed (115) hide show
  1. user_scanner-1.1.0.2/PKG-INFO +237 -0
  2. user_scanner-1.1.0.2/README.md +222 -0
  3. {user_scanner-1.0.8.1 → user_scanner-1.1.0.2}/pyproject.toml +10 -4
  4. user_scanner-1.1.0.2/user_scanner/__main__.py +293 -0
  5. user_scanner-1.1.0.2/user_scanner/cli/banner.py +24 -0
  6. user_scanner-1.1.0.2/user_scanner/config.json +1 -0
  7. user_scanner-1.1.0.2/user_scanner/core/email_orchestrator.py +78 -0
  8. user_scanner-1.1.0.2/user_scanner/core/formatter.py +27 -0
  9. user_scanner-1.1.0.2/user_scanner/core/helpers.py +201 -0
  10. user_scanner-1.1.0.2/user_scanner/core/orchestrator.py +130 -0
  11. user_scanner-1.1.0.2/user_scanner/core/result.py +166 -0
  12. {user_scanner-1.0.8.1/user_scanner/utils → user_scanner-1.1.0.2/user_scanner/core}/version.py +12 -3
  13. user_scanner-1.1.0.2/user_scanner/email_scan/adult/pornhub.py +62 -0
  14. user_scanner-1.1.0.2/user_scanner/email_scan/adult/sexvid.py +43 -0
  15. user_scanner-1.1.0.2/user_scanner/email_scan/adult/xnxx.py +46 -0
  16. user_scanner-1.1.0.2/user_scanner/email_scan/adult/xvideos.py +50 -0
  17. user_scanner-1.1.0.2/user_scanner/email_scan/community/stackoverflow.py +40 -0
  18. user_scanner-1.1.0.2/user_scanner/email_scan/creator/gumroad.py +82 -0
  19. user_scanner-1.1.0.2/user_scanner/email_scan/creator/patreon.py +58 -0
  20. user_scanner-1.1.0.2/user_scanner/email_scan/dev/__init__.py +1 -0
  21. user_scanner-1.1.0.2/user_scanner/email_scan/dev/bitbucket.py +33 -0
  22. user_scanner-1.1.0.2/user_scanner/email_scan/dev/github.py +72 -0
  23. user_scanner-1.1.0.2/user_scanner/email_scan/dev/huggingface.py +37 -0
  24. user_scanner-1.1.0.2/user_scanner/email_scan/dev/replit.py +51 -0
  25. user_scanner-1.1.0.2/user_scanner/email_scan/entertainment/.ruff_cache/.gitignore +2 -0
  26. user_scanner-1.1.0.2/user_scanner/email_scan/entertainment/.ruff_cache/0.14.10/14677874048998292530 +0 -0
  27. user_scanner-1.1.0.2/user_scanner/email_scan/entertainment/.ruff_cache/CACHEDIR.TAG +1 -0
  28. user_scanner-1.1.0.2/user_scanner/email_scan/entertainment/__init__.py +0 -0
  29. user_scanner-1.1.0.2/user_scanner/email_scan/entertainment/spotify.py +87 -0
  30. user_scanner-1.1.0.2/user_scanner/email_scan/gaming/__init__.py +0 -0
  31. user_scanner-1.1.0.2/user_scanner/email_scan/gaming/chess_com.py +47 -0
  32. user_scanner-1.1.0.2/user_scanner/email_scan/shopping/__init__.py +0 -0
  33. user_scanner-1.1.0.2/user_scanner/email_scan/shopping/flipkart.py +52 -0
  34. user_scanner-1.1.0.2/user_scanner/email_scan/social/__init__.py +0 -0
  35. user_scanner-1.1.0.2/user_scanner/email_scan/social/facebook.py +96 -0
  36. user_scanner-1.1.0.2/user_scanner/email_scan/social/instagram.py +48 -0
  37. user_scanner-1.1.0.2/user_scanner/email_scan/social/mastodon.py +59 -0
  38. user_scanner-1.1.0.2/user_scanner/email_scan/social/x.py +41 -0
  39. user_scanner-1.1.0.2/user_scanner/user_scan/community/hackernews.py +33 -0
  40. user_scanner-1.1.0.2/user_scanner/user_scan/community/lemmy.py +30 -0
  41. user_scanner-1.1.0.2/user_scanner/user_scan/creator/__init__.py +0 -0
  42. user_scanner-1.1.0.2/user_scanner/user_scan/creator/gumroad.py +22 -0
  43. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/creator/hashnode.py +3 -7
  44. user_scanner-1.1.0.2/user_scanner/user_scan/creator/itch_io.py +30 -0
  45. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/creator/medium.py +14 -3
  46. user_scanner-1.1.0.2/user_scanner/user_scan/creator/producthunt.py +34 -0
  47. user_scanner-1.1.0.2/user_scanner/user_scan/creator/substack.py +36 -0
  48. user_scanner-1.1.0.2/user_scanner/user_scan/creator/twitch.py +83 -0
  49. user_scanner-1.1.0.2/user_scanner/user_scan/dev/bitbucket.py +34 -0
  50. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/github.py +1 -1
  51. user_scanner-1.1.0.2/user_scanner/user_scan/dev/leetcode.py +35 -0
  52. user_scanner-1.1.0.2/user_scanner/user_scan/dev/sourceforge.py +30 -0
  53. user_scanner-1.1.0.2/user_scanner/user_scan/donation/__init__.py +0 -0
  54. user_scanner-1.1.0.2/user_scanner/user_scan/gaming/__init__.py +0 -0
  55. user_scanner-1.1.0.2/user_scanner/user_scan/gaming/lichess.py +40 -0
  56. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/gaming/monkeytype.py +15 -4
  57. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/gaming/roblox.py +15 -5
  58. user_scanner-1.1.0.2/user_scanner/user_scan/shopping/__init__.py +0 -0
  59. user_scanner-1.1.0.2/user_scanner/user_scan/shopping/vinted.py +42 -0
  60. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/discord.py +4 -5
  61. user_scanner-1.1.0.2/user_scanner/user_scan/social/mastodon.py +30 -0
  62. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/soundcloud.py +1 -6
  63. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/telegram.py +2 -2
  64. user_scanner-1.1.0.2/user_scanner/user_scan/social/tiktok.py +50 -0
  65. user_scanner-1.1.0.2/user_scanner/utils/__init__.py +0 -0
  66. user_scanner-1.1.0.2/user_scanner/utils/update.py +34 -0
  67. user_scanner-1.1.0.2/user_scanner/utils/updater_logic.py +83 -0
  68. {user_scanner-1.0.8.1 → user_scanner-1.1.0.2}/user_scanner/version.json +1 -1
  69. user_scanner-1.0.8.1/PKG-INFO +0 -148
  70. user_scanner-1.0.8.1/README.md +0 -134
  71. user_scanner-1.0.8.1/user_scanner/__main__.py +0 -134
  72. user_scanner-1.0.8.1/user_scanner/cli/banner.py +0 -34
  73. user_scanner-1.0.8.1/user_scanner/core/orchestrator.py +0 -181
  74. user_scanner-1.0.8.1/user_scanner/core/result.py +0 -79
  75. user_scanner-1.0.8.1/user_scanner/creator/itch_io.py +0 -19
  76. user_scanner-1.0.8.1/user_scanner/creator/producthunt.py +0 -47
  77. user_scanner-1.0.8.1/user_scanner/social/mastodon.py +0 -19
  78. {user_scanner-1.0.8.1 → user_scanner-1.1.0.2}/LICENSE +0 -0
  79. {user_scanner-1.0.8.1 → user_scanner-1.1.0.2}/user_scanner/__init__.py +0 -0
  80. {user_scanner-1.0.8.1 → user_scanner-1.1.0.2}/user_scanner/cli/__init__.py +0 -0
  81. {user_scanner-1.0.8.1 → user_scanner-1.1.0.2}/user_scanner/core/__init__.py +0 -0
  82. {user_scanner-1.0.8.1/user_scanner/creator → user_scanner-1.1.0.2/user_scanner/email_scan}/__init__.py +0 -0
  83. {user_scanner-1.0.8.1/user_scanner/donation → user_scanner-1.1.0.2/user_scanner/email_scan/adult}/__init__.py +0 -0
  84. {user_scanner-1.0.8.1/user_scanner/gaming → user_scanner-1.1.0.2/user_scanner/email_scan/community}/__init__.py +0 -0
  85. /user_scanner-1.0.8.1/user_scanner/utils/update.py → /user_scanner-1.1.0.2/user_scanner/email_scan/creator/__init__.py +0 -0
  86. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/community/__init__.py +0 -0
  87. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/community/coderlegion.py +0 -0
  88. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/community/stackoverflow.py +0 -0
  89. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/creator/devto.py +0 -0
  90. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/creator/kaggle.py +0 -0
  91. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/creator/patreon.py +0 -0
  92. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/__init__.py +0 -0
  93. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/codeberg.py +0 -0
  94. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/cratesio.py +0 -0
  95. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/dockerhub.py +0 -0
  96. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/gitlab.py +0 -0
  97. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/huggingface.py +0 -0
  98. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/launchpad.py +0 -0
  99. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/npmjs.py +0 -0
  100. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/dev/replit.py +0 -0
  101. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/donation/buymeacoffee.py +0 -0
  102. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/donation/liberapay.py +0 -0
  103. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/gaming/chess_com.py +0 -0
  104. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/gaming/minecraft.py +0 -0
  105. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/gaming/osu.py +0 -0
  106. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/gaming/steam.py +0 -0
  107. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/__init__.py +0 -0
  108. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/bluesky.py +0 -0
  109. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/instagram.py +0 -0
  110. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/pinterest.py +0 -0
  111. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/reddit.py +0 -0
  112. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/snapchat.py +0 -0
  113. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/threads.py +0 -0
  114. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/x.py +0 -0
  115. {user_scanner-1.0.8.1/user_scanner → user_scanner-1.1.0.2/user_scanner/user_scan}/social/youtube.py +0 -0
@@ -0,0 +1,237 @@
1
+ Metadata-Version: 2.4
2
+ Name: user-scanner
3
+ Version: 1.1.0.2
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.10
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: httpx[http2]>=0.27,<0.29
11
+ Requires-Dist: socksio>=1.0,<2
12
+ Requires-Dist: colorama>=0.4,<1
13
+ Project-URL: Homepage, https://github.com/kaifcodec/user-scanner
14
+
15
+ # User Scanner
16
+
17
+ ![User Scanner Logo](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)
18
+ <p align="center">
19
+ <img src="https://img.shields.io/badge/Version-1.1.0.2-blueviolet?style=for-the-badge&logo=github" />
20
+ <img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
21
+ <img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
22
+ <img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
23
+ <img src="https://img.shields.io/badge/Tested%20on-Linux-balck?style=for-the-badge&logo=Linux" />
24
+ <img src="https://img.shields.io/pepy/dt/user-scanner?style=for-the-badge" />
25
+ </p>
26
+
27
+ ---
28
+
29
+ A powerful *Email OSINT tool* that checks if a specific email is registered on various sites, combined with *username scanning* for branding or OSINT — 2-in-1 tool.
30
+
31
+ Perfect for fast, accurate and lightweight email OSINT
32
+
33
+ Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in a single command.
34
+
35
+ ## Features
36
+
37
+ - ✅ Check an email across multiple sites to see if it’s registered.
38
+ - ✅ Scan usernames across **social networks**, **developer platforms**, **creator communities**, and more.
39
+ - ✅ Can be used purely as a username tool.
40
+ - ✅ Smart auto-update system detects new releases on PyPI and prompts the user to upgrade interactively.
41
+ - ✅ Clear `Registered` and `Not Registered` for email scanning `Available` / `Taken` / `Error` output for username scans
42
+ - ✅ Robust error handling: displays the exact reason a username or email cannot be used (e.g., underscores or hyphens at the start/end).
43
+ - ✅ Fully modular: easily add new platform modules.
44
+ - ✅ Wildcard-based username permutations for automatic variation generation using a provided suffix.
45
+ - ✅ Option to select results format (**JSON**, **CSV**, console).
46
+ - ✅ Save scanning and OSINT results in the preferred format and output file (ideal for power users).
47
+ - ✅ Command-line interface ready: works immediately after `pip install`.
48
+ - ✅ Lightweight with minimal dependencies; runs on any machine.
49
+ - ✅ **Proxy support** with round-robin rotation
50
+ - ✅ **Proxy validation** to test and filter working proxies before scanning
51
+ - ✅ **Bulk username scanning** from file support for checking multiple usernames at once
52
+ - ✅ **Bulk email scanning** from file support for checking multiple emails at once
53
+ ---
54
+
55
+ ## Installation
56
+
57
+ ```bash
58
+ pip install user-scanner
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Important Flags
64
+
65
+ | Flag | Description |
66
+ |------|-------------|
67
+ | `-u, --username USERNAME` | Scan a single username across platforms |
68
+ | `-e, --email EMAIL` | Scan a single email across platforms |
69
+ | `-uf, --username-file FILE` | Scan multiple usernames from file (one per line) |
70
+ | `-ef, --email-file FILE` | Scan multiple emails from file (one per line) |
71
+ | `-c, --category CATEGORY` | Scan all platforms in a specific category |
72
+ | `-lu, --list-user` | List all available modules for username scanning |
73
+ | `-le, --list-email` | List all available modules for email scanning |
74
+ | `-m, --module MODULE` | Scan a single specific module |
75
+ | `-p, --permute PERMUTE` | Generate username permutations using a pattern/suffix |
76
+ | `-P, --proxy-file FILE` | Use proxies from file (one per line) |
77
+ | `--validate-proxies` | Validate proxies before scanning (tests against google.com) |
78
+ | `-s, --stop STOP` | Limit the number of permutations generated |
79
+ | `-d, --delay DELAY` | Delay (in seconds) between requests |
80
+ | `-f, --format {csv,json}` | Select output format |
81
+ | `-o, --output OUTPUT` | Save results to a file |
82
+
83
+ ---
84
+
85
+ ## Usage
86
+
87
+ ### Basic username/email scan
88
+
89
+ Scan a single username across **all** available modules/platforms:
90
+
91
+ ```bash
92
+ user-scanner -e john_doe@gmail.com
93
+ user-scanner --email john_doe@gmail.com # long version
94
+
95
+ user-scanner -u john_doe
96
+ user-scanner --username john_doe # long version
97
+ ```
98
+
99
+ ### Selective scanning
100
+
101
+ Scan only specific categories or single modules:
102
+
103
+ ```bash
104
+ user-scanner -u john_doe -c dev # developer platforms only
105
+ user-scanner -u john_doe -m github # only GitHub
106
+ ```
107
+
108
+ ### Bulk username scanning
109
+
110
+ Scan multiple usernames from a file (one username per line):
111
+ - Can also be combined with categories or modules using `-c` and `-m` flags
112
+
113
+ ```bash
114
+ user-scanner -uf usernames.txt
115
+ ```
116
+
117
+
118
+ ### Bulk email scanning
119
+
120
+ Scan multiple emails from a file (one email per line):
121
+ - Can also be combined with categories or modules using `-c` and `-m` flags
122
+
123
+ ```bash
124
+ user-scanner -ef emails.txt
125
+ ```
126
+
127
+ ### Username/Email variations (suffix only)
128
+
129
+ Generate & check username variations using a permutation from the given suffix:
130
+
131
+ ```bash
132
+ user-scanner -u john_ -p ab # john_a, ..., john_ab, john_ba
133
+ ```
134
+
135
+ ### Using Proxies
136
+
137
+ Route requests through proxy servers:
138
+
139
+ ```bash
140
+ user-scanner -u john_doe -P proxies.txt
141
+ ```
142
+
143
+ Validate proxies before scanning (tests each proxy against google.com):
144
+
145
+ ```bash
146
+ user-scanner -u john_doe -P proxies.txt --validate-proxies # recommended
147
+ ```
148
+
149
+ This will:
150
+ 1. Test all proxies from the file
151
+ 2. Filter out non-working proxies
152
+ 3. Save working proxies to `validated_proxies.txt`
153
+ 4. Use only validated proxies for scanning
154
+
155
+ ---
156
+
157
+ ### Update
158
+
159
+ Update the tool to the latest PyPI version:
160
+
161
+ ```bash
162
+ user-scanner -U
163
+ ```
164
+ ---
165
+
166
+ ## Screenshot:
167
+
168
+ - Note*: New modules are constantly getting added so this might have only limited, outdated output:
169
+
170
+ <img width="1072" height="848" alt="user-scanner's main usage screenshot" src="https://github.com/user-attachments/assets/34e44ca6-e314-419e-9035-d951b493b47f" />
171
+
172
+
173
+
174
+ ---
175
+
176
+ <img width="1080" height="352" alt="user-scanner's wildcard username feature" src="https://github.com/user-attachments/assets/578b248c-2a05-4917-aab3-6372a7c28045" />
177
+
178
+
179
+ ---
180
+
181
+ ## Contributing
182
+
183
+ Modules are organized under `user_scanner/`:
184
+
185
+ ```
186
+ user_scanner/
187
+ ├── email_scan/ # Currently in development
188
+ │ ├── social/ # Social email scan modules (Instagram, Mastodon, X, etc.)
189
+ | ├── adult/ # Adult sites
190
+ | ... # New sites to be added soon
191
+ ├── user_scan/
192
+ │ ├── dev/ # Developer platforms (GitHub, GitLab, npm, etc.)
193
+ │ ├── social/ # Social platforms (Twitter/X, Reddit, Instagram, Discord, etc.)
194
+ │ ├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, Patreon, etc.)
195
+ │ ├── community/ # Community platforms (forums, StackOverflow, HackerNews, etc.)
196
+ │ ├── gaming/ # Gaming sites (chess.com, Lichess, Roblox, Minecraft, etc.)
197
+ │ └── donation/ # Donation platforms (BuyMeACoffee, Liberapay)
198
+ |...
199
+ ```
200
+
201
+ **Module guidelines:**
202
+ This project contains small "validator" modules that check whether a username exists on a given platform. Each validator is a single function that returns a Result object (see `core/orchestrator.py`).
203
+
204
+ Result semantics:
205
+ - Result.available() → `available`
206
+ - Result.taken() → `taken`
207
+ - Result.error(message: Optional[str]) → `error`, blocked, unknown, or request failure (include short diagnostic message when helpful)
208
+
209
+ Follow this document when adding or updating validators.
210
+
211
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
212
+
213
+ ---
214
+
215
+ ## Dependencies:
216
+ - [httpx](https://pypi.org/project/httpx/)
217
+ - [colorama](https://pypi.org/project/colorama/)
218
+
219
+ ---
220
+
221
+ ## License
222
+
223
+ This project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
224
+
225
+
226
+ ---
227
+
228
+ ## Star History
229
+
230
+ <a href="https://www.star-history.com/#kaifcodec/user-scanner&type=date&legend=top-left">
231
+ <picture>
232
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&theme=dark&legend=top-left" />
233
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
234
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
235
+ </picture>
236
+ </a>
237
+
@@ -0,0 +1,222 @@
1
+ # User Scanner
2
+
3
+ ![User Scanner Logo](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)
4
+ <p align="center">
5
+ <img src="https://img.shields.io/badge/Version-1.1.0.2-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
+ A powerful *Email OSINT tool* that checks if a specific email is registered on various sites, combined with *username scanning* for branding or OSINT — 2-in-1 tool.
16
+
17
+ Perfect for fast, accurate and lightweight email OSINT
18
+
19
+ Perfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in a single command.
20
+
21
+ ## Features
22
+
23
+ - ✅ Check an email across multiple sites to see if it’s registered.
24
+ - ✅ Scan usernames across **social networks**, **developer platforms**, **creator communities**, and more.
25
+ - ✅ Can be used purely as a username tool.
26
+ - ✅ Smart auto-update system detects new releases on PyPI and prompts the user to upgrade interactively.
27
+ - ✅ Clear `Registered` and `Not Registered` for email scanning `Available` / `Taken` / `Error` output for username scans
28
+ - ✅ Robust error handling: displays the exact reason a username or email cannot be used (e.g., underscores or hyphens at the start/end).
29
+ - ✅ Fully modular: easily add new platform modules.
30
+ - ✅ Wildcard-based username permutations for automatic variation generation using a provided suffix.
31
+ - ✅ Option to select results format (**JSON**, **CSV**, console).
32
+ - ✅ Save scanning and OSINT results in the preferred format and output file (ideal for power users).
33
+ - ✅ Command-line interface ready: works immediately after `pip install`.
34
+ - ✅ Lightweight with minimal dependencies; runs on any machine.
35
+ - ✅ **Proxy support** with round-robin rotation
36
+ - ✅ **Proxy validation** to test and filter working proxies before scanning
37
+ - ✅ **Bulk username scanning** from file support for checking multiple usernames at once
38
+ - ✅ **Bulk email scanning** from file support for checking multiple emails at once
39
+ ---
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install user-scanner
45
+ ```
46
+
47
+ ---
48
+
49
+ ## Important Flags
50
+
51
+ | Flag | Description |
52
+ |------|-------------|
53
+ | `-u, --username USERNAME` | Scan a single username across platforms |
54
+ | `-e, --email EMAIL` | Scan a single email across platforms |
55
+ | `-uf, --username-file FILE` | Scan multiple usernames from file (one per line) |
56
+ | `-ef, --email-file FILE` | Scan multiple emails from file (one per line) |
57
+ | `-c, --category CATEGORY` | Scan all platforms in a specific category |
58
+ | `-lu, --list-user` | List all available modules for username scanning |
59
+ | `-le, --list-email` | List all available modules for email scanning |
60
+ | `-m, --module MODULE` | Scan a single specific module |
61
+ | `-p, --permute PERMUTE` | Generate username permutations using a pattern/suffix |
62
+ | `-P, --proxy-file FILE` | Use proxies from file (one per line) |
63
+ | `--validate-proxies` | Validate proxies before scanning (tests against google.com) |
64
+ | `-s, --stop STOP` | Limit the number of permutations generated |
65
+ | `-d, --delay DELAY` | Delay (in seconds) between requests |
66
+ | `-f, --format {csv,json}` | Select output format |
67
+ | `-o, --output OUTPUT` | Save results to a file |
68
+
69
+ ---
70
+
71
+ ## Usage
72
+
73
+ ### Basic username/email scan
74
+
75
+ Scan a single username across **all** available modules/platforms:
76
+
77
+ ```bash
78
+ user-scanner -e john_doe@gmail.com
79
+ user-scanner --email john_doe@gmail.com # long version
80
+
81
+ user-scanner -u john_doe
82
+ user-scanner --username john_doe # long version
83
+ ```
84
+
85
+ ### Selective scanning
86
+
87
+ Scan only specific categories or single modules:
88
+
89
+ ```bash
90
+ user-scanner -u john_doe -c dev # developer platforms only
91
+ user-scanner -u john_doe -m github # only GitHub
92
+ ```
93
+
94
+ ### Bulk username scanning
95
+
96
+ Scan multiple usernames from a file (one username per line):
97
+ - Can also be combined with categories or modules using `-c` and `-m` flags
98
+
99
+ ```bash
100
+ user-scanner -uf usernames.txt
101
+ ```
102
+
103
+
104
+ ### Bulk email scanning
105
+
106
+ Scan multiple emails from a file (one email per line):
107
+ - Can also be combined with categories or modules using `-c` and `-m` flags
108
+
109
+ ```bash
110
+ user-scanner -ef emails.txt
111
+ ```
112
+
113
+ ### Username/Email variations (suffix only)
114
+
115
+ Generate & check username variations using a permutation from the given suffix:
116
+
117
+ ```bash
118
+ user-scanner -u john_ -p ab # john_a, ..., john_ab, john_ba
119
+ ```
120
+
121
+ ### Using Proxies
122
+
123
+ Route requests through proxy servers:
124
+
125
+ ```bash
126
+ user-scanner -u john_doe -P proxies.txt
127
+ ```
128
+
129
+ Validate proxies before scanning (tests each proxy against google.com):
130
+
131
+ ```bash
132
+ user-scanner -u john_doe -P proxies.txt --validate-proxies # recommended
133
+ ```
134
+
135
+ This will:
136
+ 1. Test all proxies from the file
137
+ 2. Filter out non-working proxies
138
+ 3. Save working proxies to `validated_proxies.txt`
139
+ 4. Use only validated proxies for scanning
140
+
141
+ ---
142
+
143
+ ### Update
144
+
145
+ Update the tool to the latest PyPI version:
146
+
147
+ ```bash
148
+ user-scanner -U
149
+ ```
150
+ ---
151
+
152
+ ## Screenshot:
153
+
154
+ - Note*: New modules are constantly getting added so this might have only limited, outdated output:
155
+
156
+ <img width="1072" height="848" alt="user-scanner's main usage screenshot" src="https://github.com/user-attachments/assets/34e44ca6-e314-419e-9035-d951b493b47f" />
157
+
158
+
159
+
160
+ ---
161
+
162
+ <img width="1080" height="352" alt="user-scanner's wildcard username feature" src="https://github.com/user-attachments/assets/578b248c-2a05-4917-aab3-6372a7c28045" />
163
+
164
+
165
+ ---
166
+
167
+ ## Contributing
168
+
169
+ Modules are organized under `user_scanner/`:
170
+
171
+ ```
172
+ user_scanner/
173
+ ├── email_scan/ # Currently in development
174
+ │ ├── social/ # Social email scan modules (Instagram, Mastodon, X, etc.)
175
+ | ├── adult/ # Adult sites
176
+ | ... # New sites to be added soon
177
+ ├── user_scan/
178
+ │ ├── dev/ # Developer platforms (GitHub, GitLab, npm, etc.)
179
+ │ ├── social/ # Social platforms (Twitter/X, Reddit, Instagram, Discord, etc.)
180
+ │ ├── creator/ # Creator platforms (Hashnode, Dev.to, Medium, Patreon, etc.)
181
+ │ ├── community/ # Community platforms (forums, StackOverflow, HackerNews, etc.)
182
+ │ ├── gaming/ # Gaming sites (chess.com, Lichess, Roblox, Minecraft, etc.)
183
+ │ └── donation/ # Donation platforms (BuyMeACoffee, Liberapay)
184
+ |...
185
+ ```
186
+
187
+ **Module guidelines:**
188
+ This project contains small "validator" modules that check whether a username exists on a given platform. Each validator is a single function that returns a Result object (see `core/orchestrator.py`).
189
+
190
+ Result semantics:
191
+ - Result.available() → `available`
192
+ - Result.taken() → `taken`
193
+ - Result.error(message: Optional[str]) → `error`, blocked, unknown, or request failure (include short diagnostic message when helpful)
194
+
195
+ Follow this document when adding or updating validators.
196
+
197
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for examples.
198
+
199
+ ---
200
+
201
+ ## Dependencies:
202
+ - [httpx](https://pypi.org/project/httpx/)
203
+ - [colorama](https://pypi.org/project/colorama/)
204
+
205
+ ---
206
+
207
+ ## License
208
+
209
+ This project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.
210
+
211
+
212
+ ---
213
+
214
+ ## Star History
215
+
216
+ <a href="https://www.star-history.com/#kaifcodec/user-scanner&type=date&legend=top-left">
217
+ <picture>
218
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&theme=dark&legend=top-left" />
219
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
220
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kaifcodec/user-scanner&type=date&legend=top-left" />
221
+ </picture>
222
+ </a>
@@ -4,19 +4,21 @@ build-backend = "flit_core.buildapi"
4
4
 
5
5
  [project]
6
6
  name = "user-scanner"
7
- version = "1.0.8.1"
7
+ version = "1.1.0.2"
8
8
  description = "Check username availability across multiple popular platforms"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
11
11
  authors = [
12
12
  {name = "Kaif", email = "kafcodec@gmail.com"}
13
13
  ]
14
+
14
15
  dependencies = [
15
- "httpx",
16
- "colorama"
16
+ "httpx[http2]>=0.27,<0.29",
17
+ "socksio>=1.0,<2",
18
+ "colorama>=0.4,<1"
17
19
  ]
18
20
 
19
- requires-python = ">=3.7"
21
+ requires-python = ">=3.10"
20
22
  keywords = ["username", "checker", "availability", "social", "tech", "python", "user-scanner"]
21
23
 
22
24
  [project.urls]
@@ -27,3 +29,7 @@ user-scanner = "user_scanner.__main__:main"
27
29
 
28
30
  [tool.flit.sdist]
29
31
  exclude = ["tests/", "docs/", ".github/", ".git", "rm_pycache.py", "che.py", ".gitignore"]
32
+
33
+ [tool.pytest.ini_options]
34
+ pythonpath = "."
35
+ testpaths = ["tests"]