ethereum-rpc-fingerprinter


Nameethereum-rpc-fingerprinter JSON
Version 1.1.2 PyPI version JSON
download
home_pagehttps://github.com/smolgroot/ethereum-rpc-fingerprinter
SummaryA comprehensive tool for fingerprinting Ethereum RPC endpoints
upload_time2025-09-12 23:27:04
maintainerNone
docs_urlNone
authorsmolgroot
requires_python>=3.8
licenseMIT
keywords ethereum rpc fingerprinting blockchain web3 geth besu nethermind erigon security analysis
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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](https://badge.fury.io/py/ethereum-rpc-fingerprinter.svg)](https://badge.fury.io/py/ethereum-rpc-fingerprinter)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

[![asciicast](https://asciinema.org/a/740150.svg)](https://asciinema.org/a/740150)

## 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
- 🔐 **Security Analysis**: Detect exposed accounts, admin interfaces, debug capabilities
- 📋 **Method Discovery**: Enumerate supported RPC methods
- 📄 **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)

```bash
pip install ethereum-rpc-fingerprinter
```

### From Source

```bash
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

```bash
# 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) 🎯

```bash
# 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

```bash
# 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

```bash
# 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

```bash
# 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

```python
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](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:

```bash
# 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](PUBLISHING.md) for detailed publishing instructions.

## License

This project is licensed under the MIT License - see the [LICENSE](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

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/smolgroot/ethereum-rpc-fingerprinter",
    "name": "ethereum-rpc-fingerprinter",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "Your Name <your.email@example.com>",
    "keywords": "ethereum, rpc, fingerprinting, blockchain, web3, geth, besu, nethermind, erigon, security, analysis",
    "author": "smolgroot",
    "author_email": "Your Name <your.email@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/c3/46/76cc5d5321267a99cba4aa7eb3a1a4946e6e10fead5fe6506e6e13b0fe1c/ethereum_rpc_fingerprinter-1.1.2.tar.gz",
    "platform": null,
    "description": "# Ethereum RPC Fingerprinting Tool\n\nA comprehensive Python tool for fingerprinting Ethereum/EVM chains RPC endpoints to identify node implementations, versions, network configurations, and security characteristics.\n\n[![PyPI version](https://badge.fury.io/py/ethereum-rpc-fingerprinter.svg)](https://badge.fury.io/py/ethereum-rpc-fingerprinter)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[![asciicast](https://asciinema.org/a/740150.svg)](https://asciinema.org/a/740150)\n\n## Features\n\n- \ud83d\udd0d **Enhanced Node Detection**: Identify Geth, Parity/OpenEthereum, Besu, Nethermind, Erigon, Reth, EthereumJS, Anvil, Hardhat, Ganache, TurboGeth\n- \ud83e\uddec **Detailed Client Analysis**: Extract programming language, version, OS, and architecture from client version strings\n- \ud83d\udcca **Network Information**: Chain ID, network ID, block height, gas prices, peer count\n- \ud83d\ude80 **Async Support**: Fingerprint multiple endpoints concurrently with configurable limits\n- \ud83d\udcc1 **Bulk Scanning**: Read endpoint lists from files (one URL per line) - perfect for pentesting workflows\n- \ud83d\udd10 **Security Analysis**: Detect exposed accounts, admin interfaces, debug capabilities\n- \ud83d\udccb **Method Discovery**: Enumerate supported RPC methods\n- \ud83d\udcc4 **Multiple Formats**: Output results in table, JSON, or YAML format\n- \ud83d\udc0d **Python API**: Use as a library in your Python projects\n\n### Client Version Parsing\n\nThe tool can extract detailed information from client version strings:\n\n- **Programming Language**: Go, Rust, Java, .NET, JavaScript/TypeScript\n- **Language Version**: Specific version (e.g., Go 1.21.4, Java 17, .NET 8.0.0)\n- **Operating System**: Linux, Windows, macOS, FreeBSD, OpenBSD\n- **Architecture**: x86_64, amd64, arm64, ARM, etc.\n- **Node Version**: Exact node software version\n- **Build Information**: Commit hashes, timestamps (where available)\n\nExample parsed information:\n```\nClient Version: Geth/v1.13.5-stable/linux-amd64/go1.21.4\n\u251c\u2500\u2500 Implementation: Geth  \n\u251c\u2500\u2500 Node Version: 1.13.5-stable\n\u251c\u2500\u2500 Programming Language: Go\n\u251c\u2500\u2500 Language Version: 1.21.4\n\u251c\u2500\u2500 Operating System: Linux\n\u2514\u2500\u2500 Architecture: amd64\n```\n\n## Installation\n\n### From PyPI (Recommended)\n\n```bash\npip install ethereum-rpc-fingerprinter\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/yourusername/ethereum-rpc-fingerprinter.git\ncd ethereum-rpc-fingerprinter\npip install -e .\n```\n\n## Quick Start\n\n### Command Line Usage\n\nThe tool provides a modern CLI with two command names:\n- `ethereum-rpc-fingerprinter` (full name)\n- `erf` (short alias)\n\n#### Basic Fingerprinting\n\n```bash\n# Fingerprint a single endpoint\nerf fingerprint http://localhost:8545\n\n# Multiple endpoints with async processing\nerf fingerprint -a http://localhost:8545 https://eth.llamarpc.com\n\n# From file (one URL per line) - great for pentesting\nerf fingerprint -f endpoints.txt\n\n# From file with async processing\nerf fingerprint -f endpoints.txt -a --max-concurrent 10\n\n# Export results to JSON\nerf fingerprint -o results.json http://localhost:8545\n\n# Different output formats\nerf fingerprint --format json http://localhost:8545\nerf fingerprint --format yaml http://localhost:8545\nerf fingerprint --format table http://localhost:8545  # default\n\n# Verbose output with progress\nerf fingerprint -v -a http://localhost:8545 https://cloudflare-eth.com\n```\n\n#### Bulk Scanning (Perfect for Pentesting) \ud83c\udfaf\n\n```bash\n# Scan from file with beautiful progress tracking\nerf fingerprint -f endpoints.txt --async --verbose\n\n# High-performance bulk scanning with custom concurrency\nerf fingerprint -f endpoints.txt --async --max-concurrent 20 --timeout 5\n\n# Export bulk results to file\nerf fingerprint -f endpoints.txt --async -o scan_results.json --format json\n\n# Quiet mode for automation (progress bar only)\nerf fingerprint -f endpoints.txt --async --quiet --format json\n```\n\n#### Client Version Analysis\n\n```bash\n# Parse client version strings\nerf parse-version \"Geth/v1.13.5-stable/linux-amd64/go1.21.4\"\n\n# Multiple versions at once\nerf parse-version \\\n  \"Geth/v1.13.5-stable/linux-amd64/go1.21.4\" \\\n  \"Besu/v23.4.0/linux-x86_64/openjdk-java-17\" \\\n  \"Nethermind/v1.20.3+77d89dbe/windows-x64/dotnet8.0.0\"\n```\n\n#### Additional Commands\n\n```bash\n# List supported implementations\nerf list-implementations\n\n# Include development tools\nerf list-implementations --include-dev\n\n# Get help for any command\nerf --help\nerf fingerprint --help\n```\n\n### Advanced CLI Usage\n\n```bash\n# Comprehensive analysis with all options\nerf fingerprint \\\n  --verbose \\\n  --async \\\n  --timeout 30 \\\n  --max-concurrent 5 \\\n  --format json \\\n  --output comprehensive_report.json \\\n  http://localhost:8545 \\\n  https://eth.llamarpc.com \\\n  https://cloudflare-eth.com\n\n# Automation-friendly (quiet mode)\nerf fingerprint --quiet --format json http://localhost:8545 | jq '.[]'\n```\n\n### Python API Usage\n\n```python\nimport asyncio\nfrom ethereum_rpc_fingerprinter import EthereumRPCFingerprinter\n\n# Create fingerprinter instance\nfingerprinter = EthereumRPCFingerprinter()\n\n# Synchronous fingerprinting\nresult = fingerprinter.fingerprint(\"http://localhost:8545\")\nprint(f\"Implementation: {result.implementation}\")\nprint(f\"Node Version: {result.node_version}\")\nprint(f\"Programming Language: {result.programming_language}\")\nprint(f\"Language Version: {result.language_version}\")\nprint(f\"Operating System: {result.operating_system}\")\nprint(f\"Architecture: {result.architecture}\")\n\n# Asynchronous fingerprinting\nasync def fingerprint_multiple():\n    results = await fingerprinter.fingerprint_async([\n        \"http://localhost:8545\",\n        \"https://eth.llamarpc.com\",\n        \"https://cloudflare-eth.com\"\n    ])\n    \n    for result in results:\n        print(f\"{result.endpoint}: {result.implementation} {result.node_version}\")\n\nasyncio.run(fingerprint_multiple())\n\n# Client version parsing\nversion_info = fingerprinter.parse_client_version(\"Geth/v1.13.5-stable/linux-amd64/go1.21.4\")\nprint(f\"Language: {version_info.programming_language} {version_info.language_version}\")\nprint(f\"Platform: {version_info.operating_system} {version_info.architecture}\")\n```\n\n## Example Output\n\n### Geth Node\n```\nFingerprinting: http://localhost:8545\n\n\ud83d\udd0d Basic Information:\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Endpoint        \u2502 http://localhost:8545           \u2502\n\u2502 Implementation  \u2502 Geth                            \u2502\n\u2502 Client Version  \u2502 Geth/v1.13.5-stable-3f...      \u2502\n\u2502 Node Version    \u2502 1.13.5-stable                  \u2502\n\u2502 Language        \u2502 Go 1.21.4                      \u2502\n\u2502 Platform        \u2502 Linux amd64                     \u2502\n\u2502 Chain ID        \u2502 1 (Ethereum Mainnet)           \u2502\n\u2502 Network ID      \u2502 1                               \u2502\n\u2502 Block Height    \u2502 18,750,123                      \u2502\n\u2502 Syncing         \u2502 No                              \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\ud83d\udcca Network Status:\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Gas Price       \u2502 15.2 Gwei                       \u2502\n\u2502 Peer Count      \u2502 47 peers                        \u2502\n\u2502 Mining          \u2502 No                              \u2502\n\u2502 Hashrate        \u2502 0 H/s                           \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\ud83d\udd12 Security Information:\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Accounts        \u2502 None exposed                    \u2502\n\u2502 Debug Interface \u2502 Not detected                    \u2502\n\u2502 Admin Interface \u2502 Not detected                    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\ud83d\udee0\ufe0f Supported Methods:\neth_accounts, eth_blockNumber, eth_call, eth_chainId, eth_estimateGas,\neth_gasPrice, eth_getBalance, eth_getBlockByHash, eth_getBlockByNumber,\neth_getCode, eth_getLogs, eth_getStorageAt, eth_getTransactionByHash,\neth_getTransactionCount, eth_getTransactionReceipt, eth_hashrate,\neth_mining, eth_sendRawTransaction, eth_syncing, net_listening,\nnet_peerCount, net_version, web3_clientVersion, web3_sha3\n```\n\n### Hardhat Development Node\n```\nFingerprinting: http://localhost:8545\n\n\ud83d\udd0d Basic Information:\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Endpoint        \u2502 http://localhost:8545           \u2502\n\u2502 Implementation  \u2502 Hardhat                         \u2502\n\u2502 Client Version  \u2502 HardhatNetwork/2.17.2/@hard... \u2502\n\u2502 Node Version    \u2502 2.17.2                          \u2502\n\u2502 Language        \u2502 JavaScript (Node.js)            \u2502\n\u2502 Platform        \u2502 Unknown                         \u2502\n\u2502 Chain ID        \u2502 31337 (Hardhat Network)         \u2502\n\u2502 Network ID      \u2502 31337                           \u2502\n\u2502 Block Height    \u2502 0                               \u2502\n\u2502 Syncing         \u2502 No                              \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\ud83d\udd12 Security Information:\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Accounts        \u2502 20 accounts exposed            \u2502\n\u2502 Debug Interface \u2502 Available                       \u2502\n\u2502 Admin Interface \u2502 Not detected                    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\u26a0\ufe0f  Development Environment Detected\n```\n\n## Supported Implementations\n\n### Production Nodes\n- **Geth** (Go Ethereum) - Go implementation\n- **Besu** (Hyperledger Besu) - Java implementation  \n- **Nethermind** - .NET implementation\n- **Erigon** (formerly TurboGeth) - Go implementation\n- **Reth** - Rust implementation (modern)\n- **Parity/OpenEthereum** - Rust implementation (legacy)\n- **EthereumJS** - TypeScript implementation (beta)\n\n### Development Tools\n- **Hardhat Network** - JavaScript/TypeScript\n- **Ganache** - JavaScript\n- **Anvil** (Foundry) - Rust\n\n## CLI Documentation\n\nFor comprehensive CLI usage, see [CLI_USAGE.md](CLI_USAGE.md).\n\n## Security Considerations\n\nThis tool is designed for:\n- \u2705 Security research and auditing\n- \u2705 Network analysis and monitoring\n- \u2705 Development and testing\n- \u2705 Educational purposes\n\n**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.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Run tests (`python -m pytest`)\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n### Publishing\n\nFor maintainers, use the automated publish script to release new versions:\n\n```bash\n# Test with dry run first\n./publish.sh --dry-run\n\n# Publish patch version to Test PyPI\n./publish.sh patch --test\n\n# Publish to production PyPI\n./publish.sh patch\n```\n\nSee [PUBLISHING.md](PUBLISHING.md) for detailed publishing instructions.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Changelog\n\n### v1.1.0 (2025-09-12) - Current Release \u2728\n- \ud83d\udcc1 **File Input Support**: Added `--file` / `-f` option to read endpoint lists from files (one URL per line)\n- \ud83c\udfa8 **Rich Integration**: Beautiful progress bars with real-time completion tracking, elapsed time, and ETA\n- \u2728 **Enhanced Tables**: Modern rounded tables with color-coded values and professional styling\n- \ud83d\ude80 **Improved UX**: Spinner animations, better visual feedback, and emoji icons for different sections\n- \ud83d\udcca **Progress Tracking**: Real-time progress bars for async scanning with completion rates and timing\n- \ud83d\udd27 **Better CLI**: Enhanced verbose output with Rich console formatting and improved readability\n- \ud83d\udce6 **Bulk Scanning**: Perfect for pentesting workflows - scan thousands of endpoints with visual progress\n\n### v1.0.0 (2025-09-11)\n- \ud83c\udf89 **Major Release**: Migrated to Click CLI framework with modern interface\n- \u26a1 **Async Processing**: Added async support for multiple endpoints with configurable concurrency\n- \ud83c\udf08 **Enhanced Output**: Colored tables, improved formatting, and better error handling\n- \ud83d\udcc4 **YAML Support**: Added YAML output format alongside JSON and table formats\n- \ud83d\udce6 **PyPI Publication**: Published to PyPI with easy `pip install` and automated publishing\n- \ud83d\udcda **Documentation**: Added comprehensive CLI documentation and usage examples\n- \ud83d\udd27 **Improved Parsing**: Enhanced client version parsing with better language/OS detection\n\n### v0.3.0\n- Migrated to Click CLI framework with modern interface\n- Added async processing for multiple endpoints\n- Enhanced output formatting with colored tables\n- Added YAML output support\n- Published to PyPI with easy installation\n- Added comprehensive CLI documentation\n- Improved error handling and progress indication\n\n### v0.2.0\n- Added detailed client version parsing\n- Enhanced security analysis with language/OS detection\n- Improved method detection and categorization\n- Better error handling and timeout management\n\n### v0.1.0\n- Initial release with basic fingerprinting\n- Support for major Ethereum client implementations\n- JSON export functionality\n- Basic client version detection\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A comprehensive tool for fingerprinting Ethereum RPC endpoints",
    "version": "1.1.2",
    "project_urls": {
        "Bug Reports": "https://github.com/yourusername/ethereum-rpc-fingerprinter/issues",
        "Documentation": "https://github.com/yourusername/ethereum-rpc-fingerprinter#readme",
        "Homepage": "https://github.com/yourusername/ethereum-rpc-fingerprinter",
        "Repository": "https://github.com/yourusername/ethereum-rpc-fingerprinter"
    },
    "split_keywords": [
        "ethereum",
        " rpc",
        " fingerprinting",
        " blockchain",
        " web3",
        " geth",
        " besu",
        " nethermind",
        " erigon",
        " security",
        " analysis"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "776a8860418b9acc982f0ee836d60ae14793dffe408fa346a0282732fc0aeb29",
                "md5": "2949889a72f56a434f3fddb163c0f415",
                "sha256": "2ae974e74f35d1aad61708129bbff3618cddff6d1919b24f94a8f24119a72037"
            },
            "downloads": -1,
            "filename": "ethereum_rpc_fingerprinter-1.1.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2949889a72f56a434f3fddb163c0f415",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 18926,
            "upload_time": "2025-09-12T23:27:02",
            "upload_time_iso_8601": "2025-09-12T23:27:02.435306Z",
            "url": "https://files.pythonhosted.org/packages/77/6a/8860418b9acc982f0ee836d60ae14793dffe408fa346a0282732fc0aeb29/ethereum_rpc_fingerprinter-1.1.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c34676cc5d5321267a99cba4aa7eb3a1a4946e6e10fead5fe6506e6e13b0fe1c",
                "md5": "de76e6675e2337c80a2925f4984afb89",
                "sha256": "51935fdcb1068afe9bcf4822e71338b078d631ea214bed993b132aec75afdeef"
            },
            "downloads": -1,
            "filename": "ethereum_rpc_fingerprinter-1.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "de76e6675e2337c80a2925f4984afb89",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 31645,
            "upload_time": "2025-09-12T23:27:04",
            "upload_time_iso_8601": "2025-09-12T23:27:04.018382Z",
            "url": "https://files.pythonhosted.org/packages/c3/46/76cc5d5321267a99cba4aa7eb3a1a4946e6e10fead5fe6506e6e13b0fe1c/ethereum_rpc_fingerprinter-1.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-12 23:27:04",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "smolgroot",
    "github_project": "ethereum-rpc-fingerprinter",
    "github_not_found": true,
    "lcname": "ethereum-rpc-fingerprinter"
}
        
Elapsed time: 1.90253s