Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 90 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ A modular, terminal-based toolkit for OSINT, reconnaissance, and scraping - buil
| 15 | **Bluetooth Scanner** | Scans for nearby Bluetooth devices via `bluetoothctl` (Linux) and reports device names and MAC addresses. *(Windows support coming soon.)* |
| 16 | **Local Users** | Enumerates all local user accounts on the system. On Linux: username, UID, GID, full name, home directory, shell, and group. On Windows: username, terminal, host, session start time, PID, SID, and domain. |
| 17 | **Git Scrape** | Scrapes and analyzes a Git repository (remote/local) or a GitHub account for possible personal email leaks and other data. *(Other platforms will be supported soon.)* |
| 18 | **Proxy Manager** | Configure HTTP/SOCKS proxies to route H4X-Tools network traffic through, with optional round-robin rotation to avoid rate limiting. Proxies are persisted in `$HOME/.config/h4x-tools/config.json` and respected by all compatible tools automatically. |

---

Expand Down Expand Up @@ -188,9 +189,94 @@ For larger tools, keep the UI wrapper in `tools/my_tool.py` and place reusable i

## Running with proxies

If you are encountering rate limits or wish to mask your traffic, you can route H4X-Tools through proxies using **ProxyChains**. This tool intercepts the network traffic generated by H4X-Tools and forces it through your specified proxy list.
H4X-Tools supports two proxy methods. The **built-in Proxy Manager** (method 1) is the recommended starting point. It requires no extra software and integrates directly with the toolkit. **ProxyChains** (method 2) is a system-level alternative that is useful when you need to cover tools that the built-in manager cannot reach.

### 1. Installation
---

## Method 1 — Built-in Proxy Manager

The built-in Proxy Manager lets you add, test, and enable proxies from inside H4X-Tools. Once enabled, every compatible tool automatically routes its traffic through your configured proxies. No extra command or configuration file needed.

### Supported proxy formats

```
http://host:port
http://username:password@host:port
https://host:port
socks4://host:port
socks5://host:port
socks5://username:password@host:port
```

### Opening the Proxy Manager

Select **Proxy Manager** from the interactive menu, or run it directly:

```sh
python h4xtools.py --proxy-manager
```

### Quick setup walkthrough

**1. Add a proxy**

Choose option `[2] Add proxy` and enter the proxy URL:

```
[?] Proxy URL : http://my-proxy.example.com:8080
[+] Proxy added: http://my-proxy.example.com:8080
```

**2. Test it**

Choose option `[4] Test all proxies`. H4X-Tools will connect to [ipinfo.io](https://ipinfo.io) through each proxy and report the seen exit IP:

```
[*] Testing http://my-proxy.example.com:8080 ...
[+] OK http://my-proxy.example.com:8080 -> exit IP: 203.0.113.42
[*] Results: 1/1 proxies working.
```

**3. Enable routing**

Choose option `[5] Toggle proxy routing`. The status line at the top of the menu changes to `Enabled`. From this point, all compatible tools route their traffic through the proxy automatically. The main menu also shows a `[P]` indicator confirming that routing is active.

### Rotation

When multiple proxies are added, round-robin rotation is on by default — each outgoing request uses the next proxy in the list. Toggle it off with option `[6] Toggle rotation` to always use the first proxy instead.

### Persisting settings

All settings (proxy list, enabled state, rotation mode) are saved to `$HOME/.config/h4x-tools/config.json` and restored automatically on the next launch.

### Coverage

The built-in manager covers the following tools automatically when enabled:

| Tool | Proxy support |
|---|---|
| IP Lookup | Full (HTTP + SOCKS) |
| IG Scrape | Full (HTTP + SOCKS) |
| Leak Search | Full (HTTP + SOCKS) |
| Git Scrape | Full (HTTP + SOCKS) |
| Username Search | Full (HTTP + SOCKS, via Maigret `--proxy`) |
| Web Reconnaissance | Full (HTTP + SOCKS) |
| Web Scrape | HTTP/HTTPS proxies only |
| Dir Buster | HTTP/HTTPS proxies only |
| Email Search | Not supported (holehe subprocess) |
| Phone Lookup | Not supported (ignorant subprocess) |
| WhoIs Lookup | Not supported (raw WHOIS socket protocol) |

> [!TIP]
> Web Scrape and Dir Buster use `aiohttp`, which natively supports HTTP/HTTPS proxies only. SOCKS proxies are silently skipped for these two tools. Use ProxyChains (method 2) if you need SOCKS coverage for them.

---

## Method 2 — ProxyChains

If you are encountering rate limits or wish to mask your traffic, you can route H4X-Tools through proxies using **ProxyChains**. This tool intercepts the network traffic generated by H4X-Tools at the OS level and forces it through your specified proxy list, covering every tool including subprocess-based ones like holehe and ignorant.

### Installation

#### Debian / Ubuntu

Expand Down Expand Up @@ -225,7 +311,7 @@ scoop install proxychains

---

### 2. Configuration
### Configuration

Before running the tool, you need to tell ProxyChains which proxies to use.

Expand All @@ -249,7 +335,7 @@ http 192.168.1.50 8080 # Public or private HTTP proxy

---

### 3. Usage
### Usage

Once configured, simply prefix your standard startup command with `proxychains4` (or `proxychains` on Windows):

Expand Down
18 changes: 17 additions & 1 deletion h4xtools.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

from colorama import Fore, Style

from helper import config, printer
from helper import config, printer, proxymanager
from tools import BaseTool, discover_tools

QUIT_COMMANDS = {"quit", "exit", "q", "kill"}
Expand Down Expand Up @@ -137,6 +137,22 @@ def _print_menu(tools: tuple[BaseTool, ...]) -> None:
print(" " * 4, end="")

print("\n")

if proxymanager.is_enabled():
proxy_list = proxymanager.list_proxies()
count = len(proxy_list)
mode = "rotating" if proxymanager.is_rotating() else "fixed"
if count:
print(
f"{Fore.LIGHTGREEN_EX}[P]{Style.RESET_ALL} "
f"Proxy routing active / {count} {'proxy' if count == 1 else 'proxies'} ({mode})"
)
else:
print(
f"{Fore.LIGHTYELLOW_EX}[P]{Style.RESET_ALL} "
"Proxy routing enabled but no proxies configured."
)

print(f"Type {Style.BRIGHT}?{Style.RESET_ALL} for help.")
print(f"Type {Style.BRIGHT}exit{Style.RESET_ALL} to close the toolkit...")

Expand Down
Loading