Linear Congruential Generator for IP Sharding
Project description
PyLCG
Ultra-fast Linear Congruential Generator for IP Sharding
PyLCG is a high-performance Python implementation of a memory-efficient IP address sharding system using Linear Congruential Generators (LCG) for deterministic random number generation. This tool enables distributed scanning & network reconnaissance by efficiently dividing IP ranges across multiple machines while maintaining pseudo-random ordering.
Features
- Memory-efficient IP range processing
- Deterministic pseudo-random IP generation
- High-performance LCG implementation
- Support for sharding across multiple machines
- Zero dependencies beyond Python standard library
- Simple command-line interface
Installation
From PyPI
pip install pylcg
From Source
git clone https://github.com/acidvegas/pylcg
cd pylcg
chmod +x pylcg.py
Usage
Command Line
./pylcg.py 192.168.0.0/16 --shard-num 1 --total-shards 4 --seed 12345
As a Library
from pylcg import ip_stream
# Generate IPs for the first shard of 4 total shards
for ip in ip_stream('192.168.0.0/16', shard_num=1, total_shards=4, seed=12345):
print(ip)
How It Works
Linear Congruential Generator
PyLCG uses an optimized LCG implementation with carefully chosen parameters:
Name | Variable | Value |
---|---|---|
Multiplier | a |
1664525 |
Increment | c |
1013904223 |
Modulus | m |
2^32 |
This generates a deterministic sequence of pseudo-random numbers using the formula:
next = (a * current + c) mod m
Memory-Efficient IP Processing
Instead of loading entire IP ranges into memory, PyLCG:
- Converts CIDR ranges to start/end integers
- Uses generator functions for lazy evaluation
- Calculates IPs on-demand using index mapping
- Maintains constant memory usage regardless of range size
Sharding Algorithm
The sharding system uses an interleaved approach:
- Each shard is assigned a subset of indices based on modulo arithmetic
- The LCG randomizes the order within each shard
- Work is distributed evenly across shards
- No sequential scanning patterns
Performance
PyLCG is designed for maximum performance:
- Generates millions of IPs per second
- Constant memory usage (~100KB)
- Minimal CPU overhead
- No disk I/O required
Benchmark results on a typical system:
- IP Generation: ~5-10 million IPs/second
- Memory Usage: < 1MB for any range size
- LCG Operations: < 1 microsecond per number
Contributing
Performance Optimization
We welcome contributions that improve PyLCG's performance. When submitting optimizations:
- Run the included benchmark suite:
python3 unit_test.py
- Include before/after benchmark results for:
- IP generation speed
- Memory usage
- LCG sequence generation
- Shard distribution metrics
- Consider optimizing:
- Number generation algorithms
- Memory access patterns
- CPU cache utilization
- Python-specific optimizations
- Document any tradeoffs between:
- Speed vs memory usage
- Randomness vs performance
- Complexity vs maintainability
Benchmark Guidelines
When running benchmarks:
- Use consistent hardware/environment
- Run multiple iterations
- Test with various CIDR ranges
- Measure both average and worst-case performance
- Profile memory usage patterns
- Test shard distribution uniformity
Roadmap
- IPv6 support
- Custom LCG parameters
- Configurable chunk sizes
- State persistence
- Resume capability
- S3/URL input support
- Extended benchmark suite
Mirrors: acid.vegas • SuperNETs • GitHub • GitLab • Codeberg
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
Built Distribution
File details
Details for the file pylcg-1.0.2.tar.gz
.
File metadata
- Download URL: pylcg-1.0.2.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 45a80fc5cae631d9cff6305d21de03971cda588f41376782caa91d1daf035abe |
|
MD5 | 2f9aaac79d0f7ce1e9de54568d5b266a |
|
BLAKE2b-256 | 39b69eb64ff40fd7eb3f695c985f16af0848592e9b0b8c99f0d30d29ffe72d58 |
File details
Details for the file pylcg-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: pylcg-1.0.2-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 92687f5cc2bab39ada8650f83fb32351226969d4f22e0ad86b9d17745fd5195f |
|
MD5 | 1c2454387c96748df1fdb818775e7b29 |
|
BLAKE2b-256 | d05763f632a3afe1822e03af1ee29ae2efd21bf310b8082e6bb39343b05676f8 |