A comprehensive tool for fingerprinting Ethereum RPC endpoints
Project description
Ethereum RPC Fingerprinting Tool
A comprehensive Python tool for fingerprinting Ethereum/EVM chains RPC endpoints to identify node implementations, versions, network configurations, and security characteristics.
Features
Features
- ๐ Enhanced Node Detection: Identify Geth, Parity/OpenEthereum, Besu, Nethermind, Erigon, Anvil, Hardhat, Ganache, TurboGeth
- ๐งฌ Detailed Client Analysis: Extract programming language, version, OS, and architecture from client version strings
- ๐ Network Information: Chain ID, network ID, block height, gas prices, peer count
- ๐ Async Support: Fingerprint multiple endpoints concurrently
- ๐ File Input: Read endpoint lists from files (one URL per line) - perfect for pentesting workflows
- ๐ Security Analysis: Detect exposed accounts, admin interfaces, debug capabilities
- ๐ Method Discovery: Enumerate supported RPC methods
- ๐จ Modern CLI: Clean Click-based command-line interface with progress bars and colored output
- ๐ Multiple Formats: Output results in table, JSON, or YAML format
- ๐ Python API: Use as a library in your Python projects
Client Version Parsing
The tool can extract detailed information from client version strings:
- Programming Language: Go, Rust, Java, .NET, JavaScript/TypeScript
- Language Version: Specific version (e.g., Go 1.21.4, Java 17, .NET 8.0.0)
- Operating System: Linux, Windows, macOS, FreeBSD, OpenBSD
- Architecture: x86_64, amd64, arm64, ARM, etc.
- Node Version: Exact node software version
- Build Information: Commit hashes, timestamps (where available)
Example parsed information:
Client Version: Geth/v1.13.5-stable/linux-amd64/go1.21.4
โโโ Implementation: Geth
โโโ Node Version: 1.13.5-stable
โโโ Programming Language: Go
โโโ Language Version: 1.21.4
โโโ Operating System: Linux
โโโ Architecture: amd64
Installation
From PyPI (Recommended)
pip install ethereum-rpc-fingerprinter
From Source
git clone https://github.com/yourusername/ethereum-rpc-fingerprinter.git
cd ethereum-rpc-fingerprinter
pip install -e .
Quick Start
Command Line Usage
The tool provides a modern CLI with two command names:
ethereum-rpc-fingerprinter(full name)erf(short alias)
Basic Fingerprinting
# Fingerprint a single endpoint
erf fingerprint http://localhost:8545
# Multiple endpoints with async processing
erf fingerprint -a http://localhost:8545 https://eth.llamarpc.com
# From file (one URL per line) - great for pentesting
erf fingerprint -f endpoints.txt
# From file with async processing
erf fingerprint -f endpoints.txt -a --max-concurrent 10
# Export results to JSON
erf fingerprint -o results.json http://localhost:8545
# Different output formats
erf fingerprint --format json http://localhost:8545
erf fingerprint --format yaml http://localhost:8545
erf fingerprint --format table http://localhost:8545 # default
# Verbose output with progress
erf fingerprint -v -a http://localhost:8545 https://cloudflare-eth.com
Client Version Analysis
# Parse client version strings
erf parse-version "Geth/v1.13.5-stable/linux-amd64/go1.21.4"
# Multiple versions at once
erf parse-version \
"Geth/v1.13.5-stable/linux-amd64/go1.21.4" \
"Besu/v23.4.0/linux-x86_64/openjdk-java-17" \
"Nethermind/v1.20.3+77d89dbe/windows-x64/dotnet8.0.0"
Additional Commands
# List supported implementations
erf list-implementations
# Include development tools
erf list-implementations --include-dev
# Get help for any command
erf --help
erf fingerprint --help
Advanced CLI Usage
# Comprehensive analysis with all options
erf fingerprint \
--verbose \
--async \
--timeout 30 \
--max-concurrent 5 \
--format json \
--output comprehensive_report.json \
http://localhost:8545 \
https://eth.llamarpc.com \
https://cloudflare-eth.com
# Automation-friendly (quiet mode)
erf fingerprint --quiet --format json http://localhost:8545 | jq '.[]'
Python API Usage
import asyncio
from ethereum_rpc_fingerprinter import EthereumRPCFingerprinter
# Create fingerprinter instance
fingerprinter = EthereumRPCFingerprinter()
# Synchronous fingerprinting
result = fingerprinter.fingerprint("http://localhost:8545")
print(f"Implementation: {result.implementation}")
print(f"Node Version: {result.node_version}")
print(f"Programming Language: {result.programming_language}")
print(f"Language Version: {result.language_version}")
print(f"Operating System: {result.operating_system}")
print(f"Architecture: {result.architecture}")
# Asynchronous fingerprinting
async def fingerprint_multiple():
results = await fingerprinter.fingerprint_async([
"http://localhost:8545",
"https://eth.llamarpc.com",
"https://cloudflare-eth.com"
])
for result in results:
print(f"{result.endpoint}: {result.implementation} {result.node_version}")
asyncio.run(fingerprint_multiple())
# Client version parsing
version_info = fingerprinter.parse_client_version("Geth/v1.13.5-stable/linux-amd64/go1.21.4")
print(f"Language: {version_info.programming_language} {version_info.language_version}")
print(f"Platform: {version_info.operating_system} {version_info.architecture}")
Example Output
Geth Node
Fingerprinting: http://localhost:8545
๐ Basic Information:
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Endpoint โ http://localhost:8545 โ
โ Implementation โ Geth โ
โ Client Version โ Geth/v1.13.5-stable-3f... โ
โ Node Version โ 1.13.5-stable โ
โ Language โ Go 1.21.4 โ
โ Platform โ Linux amd64 โ
โ Chain ID โ 1 (Ethereum Mainnet) โ
โ Network ID โ 1 โ
โ Block Height โ 18,750,123 โ
โ Syncing โ No โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Network Status:
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Gas Price โ 15.2 Gwei โ
โ Peer Count โ 47 peers โ
โ Mining โ No โ
โ Hashrate โ 0 H/s โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Security Information:
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Accounts โ None exposed โ
โ Debug Interface โ Not detected โ
โ Admin Interface โ Not detected โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ ๏ธ Supported Methods:
eth_accounts, eth_blockNumber, eth_call, eth_chainId, eth_estimateGas,
eth_gasPrice, eth_getBalance, eth_getBlockByHash, eth_getBlockByNumber,
eth_getCode, eth_getLogs, eth_getStorageAt, eth_getTransactionByHash,
eth_getTransactionCount, eth_getTransactionReceipt, eth_hashrate,
eth_mining, eth_sendRawTransaction, eth_syncing, net_listening,
net_peerCount, net_version, web3_clientVersion, web3_sha3
Hardhat Development Node
Fingerprinting: http://localhost:8545
๐ Basic Information:
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Endpoint โ http://localhost:8545 โ
โ Implementation โ Hardhat โ
โ Client Version โ HardhatNetwork/2.17.2/@hard... โ
โ Node Version โ 2.17.2 โ
โ Language โ JavaScript (Node.js) โ
โ Platform โ Unknown โ
โ Chain ID โ 31337 (Hardhat Network) โ
โ Network ID โ 31337 โ
โ Block Height โ 0 โ
โ Syncing โ No โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ Security Information:
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Accounts โ 20 accounts exposed โ
โ Debug Interface โ Available โ
โ Admin Interface โ Not detected โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๏ธ Development Environment Detected
Supported Implementations
Production Nodes
- Geth (Go Ethereum) - Go implementation
- Besu (Hyperledger Besu) - Java implementation
- Nethermind - .NET implementation
- Erigon (formerly TurboGeth) - Go implementation
- Parity/OpenEthereum - Rust implementation (legacy)
Development Tools
- Hardhat Network - JavaScript/TypeScript
- Ganache - JavaScript
- Anvil (Foundry) - Rust
CLI Documentation
For comprehensive CLI usage, see CLI_USAGE.md.
Security Considerations
This tool is designed for:
- โ Security research and auditing
- โ Network analysis and monitoring
- โ Development and testing
- โ Educational purposes
Important: Only use this tool on endpoints you own or have explicit permission to test. Unauthorized scanning of RPC endpoints may violate terms of service or be considered malicious activity.
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
python -m pytest) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Publishing
For maintainers, use the automated publish script to release new versions:
# Test with dry run first
./publish.sh --dry-run
# Publish patch version to Test PyPI
./publish.sh patch --test
# Publish to production PyPI
./publish.sh patch
See PUBLISHING.md for detailed publishing instructions.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Changelog
v0.3.0 (Latest)
- Migrated to Click CLI framework with modern interface
- Added async processing for multiple endpoints
- Enhanced output formatting with colored tables
- Added YAML output support
- Published to PyPI with easy installation
- Added comprehensive CLI documentation
- Improved error handling and progress indication
v0.2.0
- Added detailed client version parsing
- Enhanced security analysis with language/OS detection
- Improved method detection and categorization
- Better error handling and timeout management
v0.1.0
- Initial release with basic fingerprinting
- Support for major Ethereum client implementations
- JSON export functionality
- Basic client version detection
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ethereum_rpc_fingerprinter-1.1.0.tar.gz.
File metadata
- Download URL: ethereum_rpc_fingerprinter-1.1.0.tar.gz
- Upload date:
- Size: 20.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9846068738674801fe94da72022671d8fbce7f4a08dbb4eb508d6b5c1c52e273
|
|
| MD5 |
152b8adb6d45eb70bad125c316b3cd7f
|
|
| BLAKE2b-256 |
47dcac125e18b03d44644acfefe139c4c2b15ad679e89fdf4f0dee13879c2f6a
|
File details
Details for the file ethereum_rpc_fingerprinter-1.1.0-py3-none-any.whl.
File metadata
- Download URL: ethereum_rpc_fingerprinter-1.1.0-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ed73b0908855b16c44c1d27ac396ec7f68ef900c3190dc5cd3b6b124ba1afd5
|
|
| MD5 |
61b1932580650bf0d5e7108542c56d8c
|
|
| BLAKE2b-256 |
5fc1578ed21d45e80b6aac2d1663819c5d59dc3f885636480536b82bba1060ee
|