Skip to main content

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.

PyPI version Python 3.8+ License: MIT

Features

  • ๐Ÿ” Enhanced Node Detection: Identify Geth, Parity/OpenEthereum, Besu, Nethermind, Erigon, Reth, EthereumJS, 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 with configurable limits
  • ๐Ÿ“ Bulk Scanning: Read endpoint lists from files (one URL per line) - perfect for pentesting workflows
  • โœจ Rich Interface: Beautiful progress bars with real-time completion tracking, ETA, and throughput metrics
  • ๐ŸŽจ Modern Tables: Professional rounded tables with color-coded values and emoji icons
  • ๐Ÿ” Security Analysis: Detect exposed accounts, admin interfaces, debug capabilities
  • ๐Ÿ“‹ Method Discovery: Enumerate supported RPC methods
  • ๐Ÿ–ฅ๏ธ Enhanced CLI: Click-based interface with verbose output, progress tracking, and intuitive commands
  • ๐Ÿ“„ 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

Bulk Scanning (Perfect for Pentesting) ๐ŸŽฏ

# Scan from file with beautiful progress tracking
erf fingerprint -f endpoints.txt --async --verbose

# High-performance bulk scanning with custom concurrency
erf fingerprint -f endpoints.txt --async --max-concurrent 20 --timeout 5

# Export bulk results to file
erf fingerprint -f endpoints.txt --async -o scan_results.json --format json

# Quiet mode for automation (progress bar only)
erf fingerprint -f endpoints.txt --async --quiet --format json

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
  • Reth - Rust implementation (modern)
  • Parity/OpenEthereum - Rust implementation (legacy)
  • EthereumJS - TypeScript implementation (beta)

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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (python -m pytest)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. 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

v1.1.0 (2025-09-12) - Current Release โœจ

  • ๐Ÿ“ File Input Support: Added --file / -f option to read endpoint lists from files (one URL per line)
  • ๐ŸŽจ Rich Integration: Beautiful progress bars with real-time completion tracking, elapsed time, and ETA
  • โœจ Enhanced Tables: Modern rounded tables with color-coded values and professional styling
  • ๐Ÿš€ Improved UX: Spinner animations, better visual feedback, and emoji icons for different sections
  • ๐Ÿ“Š Progress Tracking: Real-time progress bars for async scanning with completion rates and timing
  • ๐Ÿ”ง Better CLI: Enhanced verbose output with Rich console formatting and improved readability
  • ๐Ÿ“ฆ Bulk Scanning: Perfect for pentesting workflows - scan thousands of endpoints with visual progress

v1.0.0 (2025-09-11)

  • ๐ŸŽ‰ Major Release: Migrated to Click CLI framework with modern interface
  • โšก Async Processing: Added async support for multiple endpoints with configurable concurrency
  • ๐ŸŒˆ Enhanced Output: Colored tables, improved formatting, and better error handling
  • ๐Ÿ“„ YAML Support: Added YAML output format alongside JSON and table formats
  • ๐Ÿ“ฆ PyPI Publication: Published to PyPI with easy pip install and automated publishing
  • ๐Ÿ“š Documentation: Added comprehensive CLI documentation and usage examples
  • ๐Ÿ”ง Improved Parsing: Enhanced client version parsing with better language/OS detection

v0.3.0

  • 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

ethereum_rpc_fingerprinter-1.1.1.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

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

ethereum_rpc_fingerprinter-1.1.1-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file ethereum_rpc_fingerprinter-1.1.1.tar.gz.

File metadata

File hashes

Hashes for ethereum_rpc_fingerprinter-1.1.1.tar.gz
Algorithm Hash digest
SHA256 ce1eaeb98be45af0fb54973461fdc33d97b306e34b8713e16c1e081e67b4ff70
MD5 d86c41962d49de052a14aee5e7878365
BLAKE2b-256 632d2678b48b80e06f1ba36ee0ef109a899607143a67e62fb39616cb36f17a7a

See more details on using hashes here.

File details

Details for the file ethereum_rpc_fingerprinter-1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for ethereum_rpc_fingerprinter-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e3f11aabb25d1a6687ee1ff3827ed65fde741e1a71ab5b0e2d3f933ec991082a
MD5 2648212ae2c971dc85e7e0b0888e94b0
BLAKE2b-256 e1cae31b5faf7e5a51101ed18e3ce98907beefa07619b981e7095676c4db4414

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