Skip to main content

High-performance Instagram password reset sender - Sync (threading) & Async (aiohttp) versions with proxy/user-agent rotation

Project description

Cevreset 🚀

Instagram password reset request sender - High-performance sync & async versions

PyPI version Python 3.8+ MIT License GitHub


⚡ Features

Sync Version (Threading)

  • ✅ Multi-threaded concurrent requests (6 threads default)
  • ✅ Thread isolation with separate session per thread
  • ✅ Per-thread CSRF token management
  • ✅ Context manager support (with statement)
  • ✅ Proxy rotating support
  • ✅ User-Agent rotation (5+ Android variants)
  • ✅ Header diversification (13+ randomized fields)
  • ✅ Logging system (DEBUG/INFO/WARNING/ERROR)
  • ✅ Ninja mode (silent operation)
  • ✅ Optimized timeout (per-request control)

Async Version (New! ⚡ 3-4x Faster!)

  • 50+ concurrent tasks (default, configurable 100+)
  • CSRF token caching (shared across all tasks)
  • Full parallel batch processing
  • ✅ aiohttp high-performance HTTP
  • ✅ asyncio event loop
  • ✅ Connection pooling optimization
  • ✅ Semaphore-based concurrency control
  • ✅ Same API as sync version (just await it!)

📊 Performance Comparison

Metric Sync (Threading) Async (aiohttp) Improvement
Single request 1-2s 0.5-1s 2x faster
Batch (6 targets) 12-15s 2-4s 4x faster
Batch (100 targets) ❌ Impossible 5-15s New Capability
Memory Baseline -50% Much Better
CPU Usage Baseline -70% Much Better
Max Concurrent 6 100+ 16x More

Bottom line: Use async version for everything! 🚀


📦 Installation

Basic (Sync version only)

pip install cevreset

With Async Support (Recommended ⭐)

pip install cevreset

aiohttp will be installed automatically. Or:

pip install cevreset aiohttp

🚀 Quick Start

Async Version (Recommended!)

import asyncio
from cevreset_async import AsyncInstagramResetClient

async def main():
    # Single request
    async with AsyncInstagramResetClient(concurrent=50) as client:
        email = await client.send_reset_request(
            "username",
            ninja=True,                # Silent mode
            extract="contact_point"    # Extract email
        )
        print(email)  # "user@gmail.com" or None
    
    # Batch - fully parallel!
    async with AsyncInstagramResetClient(concurrent=50) as client:
        results = await client.send_reset_requests(
            ["user1", "user2", "user3", ..., "user100"],
            ninja=True,
            extract="contact_point"
        )
        for username, email in results.items():
            print(f"{username}: {email}")

asyncio.run(main())

Sync Version (Threading)

from cevreset import InstagramResetClient

# Basic usage
with InstagramResetClient(threads=6) as client:
    email = client.send_reset_request(
        "username",
        ninja=True,              # Silent mode
        extract="contact_point"  # Extract email
    )
    print(email)  # "user@gmail.com" or None

📖 Common Examples

Get Email Address

import asyncio
from cevreset_async import AsyncInstagramResetClient

async def get_email():
    async with AsyncInstagramResetClient() as client:
        email = await client.send_reset_request(
            "target_username",
            extract="contact_point",  # Get the email
            ninja=True                # Silent
        )
        if email:
            print(f"Email: {email}")

asyncio.run(get_email())

Process Multiple Targets

import asyncio
from cevreset_async import AsyncInstagramResetClient

async def batch_process():
    targets = ["user1", "user2", "user3", "user4", "user5"]
    
    async with AsyncInstagramResetClient(concurrent=50) as client:
        results = await client.send_reset_requests(
            targets=targets,
            extract="contact_point",
            ninja=True,          # Silent
            verbose=False        # No progress
        )
        
        for username, email in results.items():
            if email:
                print(f"{username}: {email}")

asyncio.run(batch_process())

High-Speed Batch (100+ targets)

import asyncio
from cevreset_async import AsyncInstagramResetClient

async def high_speed():
    # 1000 targets processed concurrently!
    targets = [f"user_{i}" for i in range(1, 1001)]
    
    async with AsyncInstagramResetClient(concurrent=100) as client:
        results = await client.send_reset_requests(
            targets,
            extract="contact_point",
            ninja=True,
            verbose=False
        )
        
        success = sum(1 for v in results.values() if v and v is not False)
        print(f"Success: {success}/{len(targets)}")

asyncio.run(high_speed())

With Proxies

import asyncio
from cevreset_async import AsyncInstagramResetClient

async def with_proxies():
    proxies = [
        "http://proxy1.com:8080",
        "http://proxy2.com:8080",
        "http://proxy3.com:8080",
    ]
    
    async with AsyncInstagramResetClient(proxies=proxies) as client:
        email = await client.send_reset_request(
            "username",
            extract="contact_point"
        )

asyncio.run(with_proxies())

🔧 API Reference

AsyncInstagramResetClient

from cevreset_async import AsyncInstagramResetClient

# Constructor
client = AsyncInstagramResetClient(
    concurrent=50,          # Concurrent tasks (default: 50, can be 100+)
    timeout=10,             # Overall timeout (default: 10s)
    proxies=None,           # List of proxy URLs
    use_random_agents=True, # Random User-Agents (default: True)
    request_timeout=3       # Per-request timeout (default: 3s)
)

# Use as context manager
async with client:
    pass

Methods:

# Single request
result = await client.send_reset_request(
    target: str,                    # Username or email
    extract: str | list | None,     # Field to extract
    ninja: bool = False             # Silent mode
)

# Batch requests (fully parallel)
results = await client.send_reset_requests(
    targets: list[str],             # List of targets
    extract: str | list | None,     # Field to extract
    verbose: bool = True,           # Show progress
    ninja: bool = False             # Silent mode
)

InstagramResetClient (Sync version)

from cevreset import InstagramResetClient

# Constructor
client = InstagramResetClient(
    threads=6,              # Thread count (default: 6)
    timeout=12,             # Overall timeout (default: 12s)
    proxies=None,           # List of proxy URLs
    use_random_agents=True, # Random User-Agents
    request_timeout=5       # Per-request timeout (default: 5s)
)

# Use as context manager
with client:
    pass

Methods:

# Single request
result = client.send_reset_request(
    target: str,                    # Username or email
    extract: str | list | None,     # Field to extract
    delay_before: float = 0,        # Pre-delay (seconds)
    ninja: bool = False             # Silent mode
)

# Batch requests
results = client.send_reset_requests(
    targets: list[str],             # List of targets
    extract: str | list | None,     # Field to extract
    delay_between: float = 5.0,     # Delay between targets
    verbose: bool = True,           # Show progress
    ninja: bool = False             # Silent mode
)

Extract Parameter

Extract specific fields from the response:

# Get email
email = await client.send_reset_request("user", extract="contact_point")
# Returns: "user@gmail.com"

# Get multiple fields
fields = await client.send_reset_request("user", extract=["contact_point", "status"])
# Returns: {"contact_point": "...", "status": "..."}

# Get full response
response = await client.send_reset_request("user", extract=None)
# Returns: {...full JSON...}

Return Values

# Success with extract
email = await client.send_reset_request("user", extract="contact_point", ninja=True)
# Returns: "user@example.com" (if found) or None (if not found)

# Success without extract
response = await client.send_reset_request("user", ninja=True)
# Returns: full response dict (if success) or False (if failed)

# Batch results
results = await client.send_reset_requests(["u1", "u2", "u3"], extract="contact_point")
# Returns: {"u1": "email@example.com", "u2": None, "u3": False}

🎯 Use Cases

Security Researcher

# Find email addresses for research
targets = ["target1", "target2", "target3"]
async with AsyncInstagramResetClient() as client:
    results = await client.send_reset_requests(targets, extract="contact_point")

Account Recovery

# Find your own account email
async with AsyncInstagramResetClient() as client:
    email = await client.send_reset_request("your_username", extract="contact_point")

Large Scale Processing

# Process thousands of usernames
async with AsyncInstagramResetClient(concurrent=100) as client:
    results = await client.send_reset_requests(huge_list, extract="contact_point")

🔐 Anti-Detection Features

User-Agent Rotation

5+ different Android device profiles:

  • Samsung Galaxy A54
  • OnePlus 9 Pro
  • Google Pixel 6
  • HTC U12+
  • Sony Xperia 1

Header Diversification

13+ randomized headers per request:

  • Device ID
  • App ID
  • Timezone
  • Connection type
  • Referer
  • And more...

Session Isolation (Sync)

Each thread has its own:

  • HTTP session
  • CSRF token
  • User-Agent
  • Headers

CSRF Token Caching (Async)

All async tasks share same CSRF token (faster!)


⚠️ Legal Notice

IMPORTANT: This tool is for educational and authorized testing only.

  • DO NOT use for unauthorized account access
  • DO NOT violate Instagram's Terms of Service
  • DO NOT use to harm others or gain unauthorized access
  • DO use only on accounts you own or have permission to test
  • DO respect Instagram's rate limits

Using this tool illegally is a crime.
The maintainers are not responsible for any misuse.


🐛 Troubleshooting

Getting None/False

  • Instagram may have already processed the reset
  • Email address might be private
  • Target account may not exist
  • Rate limited (429 responses)

Connection Errors

  • Check your internet connection
  • Check if proxies are working
  • Instagram might be blocking your IP

Timeout Issues

  • Increase request_timeout
  • Increase timeout
  • Check your connection speed

Enable Logging

import logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("cevreset").setLevel(logging.DEBUG)

📈 Version History

  • v0.4.0 - Async version (3-4x faster!) ⚡
  • v0.3.4 - Ninja mode completely silent
  • v0.3.3 - Ninja mode improvements
  • v0.3.2 - Optimized timeout
  • v0.3.0 - Thread isolation + context manager
  • v0.2.1 - Initial stable release

🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

📄 License

MIT - See LICENSE for details


🔗 Links


Made with ❤️ by Cev

⭐ If you find this useful, please star the repository!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cevreset-0.4.1.tar.gz (62.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cevreset-0.4.1-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file cevreset-0.4.1.tar.gz.

File metadata

  • Download URL: cevreset-0.4.1.tar.gz
  • Upload date:
  • Size: 62.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.1 CPython/3.12.1 Linux/6.8.0-1030-azure

File hashes

Hashes for cevreset-0.4.1.tar.gz
Algorithm Hash digest
SHA256 5a798fd885a714ab6cfcdd3c1518f7b5a499ec538e50bea2df1f86f4cb1b6614
MD5 9fd4fa8952dcfd9cb140fe38c0abbc8c
BLAKE2b-256 4f242c349006f85575d11c2522cf9e769d85cf5ee53b8bb7f9ee67015d002dc3

See more details on using hashes here.

File details

Details for the file cevreset-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: cevreset-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.1 CPython/3.12.1 Linux/6.8.0-1030-azure

File hashes

Hashes for cevreset-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 658d0a17f007d5dfc16ba83bc8c2501bab94f915634e01c0a742be217aeda174
MD5 48fd7e4c54c91e8eb5d4fdd58a3a2f03
BLAKE2b-256 00b5f27771fd4581eb645fd052bcaee3f231279d00d64a11b93bc075f33476bb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page