-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic_usage.py
More file actions
276 lines (211 loc) · 8.07 KB
/
basic_usage.py
File metadata and controls
276 lines (211 loc) · 8.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
#!/usr/bin/env python3
"""
ShadowPass - Example Usage Script
This script demonstrates various ways to use ShadowPass for
bypassing 40X HTTP errors.
WARNING: This tool is for authorized security testing only.
"""
import asyncio
import json
from shadowpass import ShadowPassClient, ShadowPassConfig
from shadowpass.evasion.headers import HeaderSpoofer
from shadowpass.evasion.techniques import EvasionEngine
from shadowpass.proxy.manager import ProxyManager
def example_basic_bypass():
"""Example: Basic bypass attempt."""
print("\n" + "="*60)
print("Example 1: Basic Bypass")
print("="*60)
# Create client with default settings
client = ShadowPassClient()
# Attempt bypass on a URL
url = "http://httpbin.org/status/403" # Returns 403 for testing
result = client.bypass(url)
print(f"URL: {result.url}")
print(f"Original Status: {result.original_status}")
print(f"Final Status: {result.final_status}")
print(f"Success: {result.success}")
print(f"Technique: {result.technique_used}")
print(f"Attempts: {result.attempts}")
print(f"Time: {result.time_taken:.2f}s")
client.close()
return result
def example_with_configuration():
"""Example: Bypass with custom configuration."""
print("\n" + "="*60)
print("Example 2: Custom Configuration")
print("="*60)
# Create custom configuration
config = ShadowPassConfig()
# Enable specific features
config.evasion.header_spoofing = True
config.evasion.method_tampering = True
config.evasion.path_fuzzing = True
config.evasion.user_agent_rotation = True
# Configure retry behavior
config.retry.max_retries = 10
config.retry.switch_technique_on_fail = True
# Configure rate limiting
config.rate_limit.enabled = True
config.rate_limit.requests_per_second = 2.0
config.rate_limit.exponential_backoff = True
# Create client with custom config
with ShadowPassClient(config) as client:
result = client.bypass(
url="http://httpbin.org/status/403",
method="GET",
headers={"Custom-Header": "test-value"}
)
print(f"Success: {result.success}")
print(f"Technique: {result.technique_used}")
# Get statistics
stats = client.get_statistics()
print(f"Total requests: {stats['total_requests']}")
print(f"Success rate: {stats['success_rate']:.1f}%")
def example_header_spoofing():
"""Example: Using header spoofer directly."""
print("\n" + "="*60)
print("Example 3: Header Spoofing")
print("="*60)
spoofer = HeaderSpoofer()
# Get a random user agent
ua = spoofer.get_random_user_agent()
print(f"Random User-Agent: {ua[:50]}...")
# Get internal IP for X-Forwarded-For
internal_ip = spoofer.get_random_internal_ip()
print(f"Internal IP for XFF: {internal_ip}")
# Generate bypass header sets
url = "http://example.com/admin"
header_sets = spoofer.get_bypass_headers_set(url)
print(f"\nGenerated {len(header_sets)} header sets for bypass")
print("\nFirst header set:")
for key, value in list(header_sets[0].items())[:5]:
print(f" {key}: {value[:50]}...")
def example_evasion_engine():
"""Example: Using the evasion engine."""
print("\n" + "="*60)
print("Example 4: Evasion Engine")
print("="*60)
engine = EvasionEngine()
url = "http://example.com/api/v1/admin"
# Generate bypass attempts
print(f"\nGenerating evasion attempts for: {url}")
print("\nFirst 10 attempts:")
for i, attempt in enumerate(engine.generate_attempts(url, max_attempts=10)):
print(f"\n Attempt {i+1}: {attempt.technique_name}")
print(f" Method: {attempt.method}")
print(f" URL: {attempt.url[:60]}...")
print(f" Description: {attempt.description}")
# Get quick bypasses (most effective techniques)
quick = engine.get_quick_bypasses(url)
print(f"\nQuick bypass techniques: {len(quick)} attempts ready")
def example_proxy_manager():
"""Example: Using the proxy manager."""
print("\n" + "="*60)
print("Example 5: Proxy Management")
print("="*60)
manager = ProxyManager()
# Add some proxies
proxies = [
"http://proxy1.example.com:8080",
"http://proxy2.example.com:8080",
"http://user:pass@proxy3.example.com:8080",
"socks5://socks.example.com:1080"
]
added = manager.add_proxies(proxies)
print(f"Added {added} proxies to pool")
# Get proxies using different strategies
print(f"\nNext proxy (rotation): {manager.get_next_proxy()}")
print(f"Random proxy: {manager.get_random_proxy()}")
# Get statistics
stats = manager.get_stats()
print(f"\nProxy pool stats:")
print(f" Total: {stats['total_proxies']}")
print(f" Active: {stats['active_proxies']}")
def example_batch_processing():
"""Example: Processing multiple URLs."""
print("\n" + "="*60)
print("Example 6: Batch Processing")
print("="*60)
urls = [
"http://httpbin.org/status/200",
"http://httpbin.org/status/403",
"http://httpbin.org/status/404",
"http://httpbin.org/status/401",
]
config = ShadowPassConfig()
config.rate_limit.requests_per_second = 1.0 # Be gentle with httpbin
with ShadowPassClient(config) as client:
results = []
for url in urls:
result = client.bypass(url)
results.append(result)
print(f"{url}: {result.original_status} -> {result.final_status} ({result.technique_used})")
# Get final statistics
stats = client.get_statistics()
print(f"\nBatch complete:")
print(f" Total: {stats['total_attempts']}")
print(f" Successful: {stats['successful_bypasses']}")
print(f" Success rate: {stats['success_rate']:.1f}%")
async def example_async_processing():
"""Example: Async batch processing."""
print("\n" + "="*60)
print("Example 7: Async Processing")
print("="*60)
urls = [
"http://httpbin.org/status/200",
"http://httpbin.org/status/403",
"http://httpbin.org/status/404",
]
with ShadowPassClient() as client:
print(f"Processing {len(urls)} URLs asynchronously...")
results = await client.bypass_async(urls, concurrency=3)
for result in results:
status = "✓" if result.success else "✗"
print(f" {status} {result.url}: {result.final_status}")
def example_save_config():
"""Example: Saving configuration."""
print("\n" + "="*60)
print("Example 8: Configuration Management")
print("="*60)
# Create a custom configuration
config = ShadowPassConfig()
# Customize settings
config.proxy.enabled = True
config.proxy.rotation_interval = 10
config.tor.enabled = False
config.evasion.header_spoofing = True
config.rate_limit.requests_per_second = 5.0
config.retry.max_retries = 5
# Save to file
config_dict = config.to_dict()
print("Configuration (as dict):")
print(json.dumps({
"proxy": config_dict["proxy"],
"evasion": config_dict["evasion"],
"rate_limit": config_dict["rate_limit"]
}, indent=2, default=str))
# Save to YAML (in production)
# config.save_yaml("my_config.yaml")
print("\nUse config.save_yaml('filename.yaml') to save configuration")
def main():
"""Run all examples."""
print("\n" + "#"*60)
print("# ShadowPass - Example Usage Script")
print("# For authorized security testing only")
print("#"*60)
# Run synchronous examples
example_basic_bypass()
example_with_configuration()
example_header_spoofing()
example_evasion_engine()
example_proxy_manager()
example_batch_processing()
example_save_config()
# Run async example
asyncio.run(example_async_processing())
print("\n" + "="*60)
print("All examples completed!")
print("="*60 + "\n")
if __name__ == "__main__":
main()