dsherlock 1.0.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.
- dsherlock-1.0.0/PKG-INFO +9 -0
- dsherlock-1.0.0/dark_sl_cli.py +156 -0
- dsherlock-1.0.0/dsherlock.egg-info/PKG-INFO +9 -0
- dsherlock-1.0.0/dsherlock.egg-info/SOURCES.txt +8 -0
- dsherlock-1.0.0/dsherlock.egg-info/dependency_links.txt +1 -0
- dsherlock-1.0.0/dsherlock.egg-info/entry_points.txt +2 -0
- dsherlock-1.0.0/dsherlock.egg-info/requires.txt +1 -0
- dsherlock-1.0.0/dsherlock.egg-info/top_level.txt +1 -0
- dsherlock-1.0.0/pyproject.toml +25 -0
- dsherlock-1.0.0/setup.cfg +4 -0
dsherlock-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dsherlock
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Dark Sherlock - Username CSINT Tool : Find Usernames Across Dark web
|
|
5
|
+
Author: ovax
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/banaxou/dark-sherlock
|
|
8
|
+
Requires-Python: >=3.8
|
|
9
|
+
Requires-Dist: requests>=2.28.0
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# code by ovax | dark sherlock argparse 1.0
|
|
2
|
+
|
|
3
|
+
import requests
|
|
4
|
+
import argparse
|
|
5
|
+
import json
|
|
6
|
+
import sys
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
|
|
9
|
+
WHITE = "\033[1;97m"
|
|
10
|
+
RED = "\033[1;91m"
|
|
11
|
+
RESET = "\033[0m"
|
|
12
|
+
|
|
13
|
+
def parsey():
|
|
14
|
+
parser = argparse.ArgumentParser(
|
|
15
|
+
prog="dark-sl",
|
|
16
|
+
description="Dark Sherlock - Username CSINT Tool : Find Usernames Across Dark web ;) v1.0",
|
|
17
|
+
usage="%(prog)s [username] [-u USERNAME] [--json] [--txt]",
|
|
18
|
+
formatter_class=argparse.RawDescriptionHelpFormatter
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
parser.add_argument(
|
|
22
|
+
"usernames",
|
|
23
|
+
nargs="*",
|
|
24
|
+
help="Username to check"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
parser.add_argument(
|
|
28
|
+
"-u", "--user",
|
|
29
|
+
dest="users",
|
|
30
|
+
nargs="+",
|
|
31
|
+
help="Username target | Double username target"
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
parser.add_argument(
|
|
35
|
+
"--json",
|
|
36
|
+
action="store_true",
|
|
37
|
+
help="Save results in JSON file + display normal output"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
parser.add_argument(
|
|
41
|
+
"--txt",
|
|
42
|
+
action="store_true",
|
|
43
|
+
help="Save results in TXT file"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
return parser.parse_args()
|
|
47
|
+
|
|
48
|
+
def dsherlock(user, jsonx=False, txt=False):
|
|
49
|
+
if not jsonx:
|
|
50
|
+
print(f"\n[{RED}*{RESET}] {WHITE}Checking username {user} on:{RESET}\n")
|
|
51
|
+
|
|
52
|
+
results_data = {
|
|
53
|
+
"tool": "[dark-sherlock]",
|
|
54
|
+
"username": user,
|
|
55
|
+
"platforms": [],
|
|
56
|
+
"total": 0
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
try:
|
|
60
|
+
req = requests.get(f"https://threatactorusernames.com/api/search?q={user}", timeout=10)
|
|
61
|
+
data = req.json()
|
|
62
|
+
results = data.get("results", [])
|
|
63
|
+
|
|
64
|
+
req_x = requests.get(f"https://x.com/{user}", timeout=10)
|
|
65
|
+
status_x = req_x.status_code
|
|
66
|
+
x = status_x == 200
|
|
67
|
+
|
|
68
|
+
req_github = requests.get(f"https://api.github.com/users/{user}", timeout=10)
|
|
69
|
+
s = req_github.status_code
|
|
70
|
+
g = s == 200
|
|
71
|
+
|
|
72
|
+
allx = len(results) + (1 if x else 0) + (1 if g else 0)
|
|
73
|
+
results_data["total"] = allx
|
|
74
|
+
|
|
75
|
+
if not jsonx:
|
|
76
|
+
print(f"[{RED}+{RESET}] {WHITE}Results: {allx}{RESET}\n")
|
|
77
|
+
|
|
78
|
+
if not results and not x and not g:
|
|
79
|
+
if not jsonx:
|
|
80
|
+
print(f"[{RED}-{RESET}] No results found")
|
|
81
|
+
else:
|
|
82
|
+
for item in results:
|
|
83
|
+
source = item.get("forum", item.get("source", "Unknown"))
|
|
84
|
+
results_data["platforms"].append({
|
|
85
|
+
"platform": source,
|
|
86
|
+
"username": user,
|
|
87
|
+
"found_by": "[dark-sherlock]"
|
|
88
|
+
})
|
|
89
|
+
if not jsonx:
|
|
90
|
+
print(f"[{RED}+{RESET}] {WHITE}{source}: {user}{RESET}")
|
|
91
|
+
|
|
92
|
+
if x:
|
|
93
|
+
results_data["platforms"].append({
|
|
94
|
+
"platform": "x | twitter",
|
|
95
|
+
"username": user,
|
|
96
|
+
"found_by": "[dark-sherlock]"
|
|
97
|
+
})
|
|
98
|
+
if not jsonx:
|
|
99
|
+
print(f"[{RED}+{RESET}] {WHITE}x | twitter: {user}{RESET}")
|
|
100
|
+
|
|
101
|
+
if g:
|
|
102
|
+
results_data["platforms"].append({
|
|
103
|
+
"platform": "github",
|
|
104
|
+
"username": user,
|
|
105
|
+
"found_by": "[dark-sherlock]"
|
|
106
|
+
})
|
|
107
|
+
if not jsonx:
|
|
108
|
+
print(f"[{RED}+{RESET}] {WHITE}github: {user}{RESET}")
|
|
109
|
+
|
|
110
|
+
if jsonx:
|
|
111
|
+
filename = f"dark-sherlock_{user}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
|
|
112
|
+
with open(filename, "w", encoding="utf-8") as f:
|
|
113
|
+
json.dump(results_data, f, indent=2, ensure_ascii=False)
|
|
114
|
+
print(f"[{RED}+{RESET}] JSON saved → {filename}")
|
|
115
|
+
|
|
116
|
+
if txt:
|
|
117
|
+
filename = f"dark-sherlock_{user}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
|
|
118
|
+
with open(filename, "w", encoding="utf-8") as f:
|
|
119
|
+
f.write(f"[dark-sherlock] Results for {user}\n")
|
|
120
|
+
f.write(f"Total: {results_data['total']}\n\n")
|
|
121
|
+
for p in results_data["platforms"]:
|
|
122
|
+
f.write(f"[+] {p['platform']}: {user}\n")
|
|
123
|
+
print(f"[{RED}+{RESET}] TXT saved → {filename}")
|
|
124
|
+
|
|
125
|
+
except requests.exceptions.RequestException as e:
|
|
126
|
+
if jsonx:
|
|
127
|
+
print(json.dumps({"error": str(e)}, indent=2))
|
|
128
|
+
else:
|
|
129
|
+
print(f"[{RED}-{RESET}] Error: {e}")
|
|
130
|
+
sys.exit(1)
|
|
131
|
+
except Exception as e:
|
|
132
|
+
if jsonx:
|
|
133
|
+
print(json.dumps({"error": str(e)}, indent=2))
|
|
134
|
+
else:
|
|
135
|
+
print(f"[{RED}-{RESET}] Unexpected error: {e}")
|
|
136
|
+
sys.exit(1)
|
|
137
|
+
|
|
138
|
+
def main():
|
|
139
|
+
args = parsey()
|
|
140
|
+
|
|
141
|
+
usernames = []
|
|
142
|
+
if args.usernames:
|
|
143
|
+
usernames.extend(args.usernames)
|
|
144
|
+
if args.users:
|
|
145
|
+
usernames.extend(args.users)
|
|
146
|
+
|
|
147
|
+
if not usernames:
|
|
148
|
+
user = input(f"{RED}╭──\n╰─>{RESET} {WHITE}enter username:{RESET} ").strip() or "ZeroBytes"
|
|
149
|
+
usernames = [user]
|
|
150
|
+
|
|
151
|
+
for user in usernames:
|
|
152
|
+
dsherlock(user, jsonx=args.json, txt=args.txt)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
if __name__ == "__main__":
|
|
156
|
+
main()
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dsherlock
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Dark Sherlock - Username CSINT Tool : Find Usernames Across Dark web
|
|
5
|
+
Author: ovax
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/banaxou/dark-sherlock
|
|
8
|
+
Requires-Python: >=3.8
|
|
9
|
+
Requires-Dist: requests>=2.28.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
requests>=2.28.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dark_sl_cli
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "dsherlock"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Dark Sherlock - Username CSINT Tool : Find Usernames Across Dark web"
|
|
9
|
+
requires-python = ">=3.8"
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
authors = [
|
|
12
|
+
{name = "ovax"}
|
|
13
|
+
]
|
|
14
|
+
dependencies = [
|
|
15
|
+
"requests>=2.28.0",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
[project.urls]
|
|
19
|
+
Repository = "https://github.com/banaxou/dark-sherlock"
|
|
20
|
+
|
|
21
|
+
[project.scripts]
|
|
22
|
+
dsherlock = "dark_sl_cli:main"
|
|
23
|
+
|
|
24
|
+
[tool.setuptools]
|
|
25
|
+
py-modules = ["dark_sl_cli"]
|