SIGIT (Simple Information Gathering Toolkit) is a modular, high-performance open-source intelligence (OSINT) framework written in modern Python. It provides automated reconnaissance capabilities across network infrastructure, domain metadata, security configurations, digital identities, and social profiles.
The architecture is built around schema-validated services, recursive auto-discovery, stealth asynchronous HTTP transport via browser TLS impersonation, and dual execution modes (scriptable CLI and interactive terminal interface).
- Stealth Transport: Asynchronous network I/O powered by
curl_cffiwith browser fingerprint impersonation (JA3/JA4) and bounded concurrency controls. - Typed Schema Validation: Parameter contracts and input validation powered by Pydantic models for every service.
- Dual Execution Modes: Fully scriptable command-line interface with dynamic argument parsing (
argparse), alongside a rich interactive terminal menu. - Categorized Architecture: Modular service organization partitioned by domain responsibilities for clean horizontal scalability.
- Universal Output Rendering: Format-agnostic presentation supporting structured tables, key-value panels, lists, raw text, and automated JSON export.
sigit/
├── core/
│ ├── base.py # BaseService contract, Category, RenderType, ServiceResult
│ ├── config.py # Central environment settings (pydantic-settings)
│ ├── http.py # Shared curl_cffi AsyncSession with concurrency control
│ └── registry.py # Recursive package auto-discovery engine
├── cli/
│ ├── display.py # Rich table, panel, and file output rendering
│ ├── menu.py # Interactive terminal navigation and execution loop
│ ├── parser.py # Dynamic argparse generator derived from Pydantic schemas
│ └── prompt.py # Schema-driven interactive prompt collector
└── services/ # Category-partitioned and isolated tool packages
├── domain/ # dns_recon/, subdomain_scanner/, whois/
├── email/ # email_recon/, mail_finder/
├── network/ # ip_location/, port_scanner/, reverse_ip/
├── recon/ # phone_info/, tech_detector/
├── security/ # breach_checker/, header_analyzer/, ssl_checker/
└── social/ # github_recon/, user_recon/
| Category | Service Name | Command Identifier | Description |
|---|---|---|---|
| Domain | DNSRecon |
dns_recon |
Resolves A, MX, NS, and TXT DNS records via Google DNS over HTTPS. |
| Domain | SubdomainScan |
subdomain_scan |
Concurrent DNS and HTTP enumeration for common subdomain prefixes. |
| Domain | WHOISLookup |
whois_lookup |
Retrieves full domain registration data via system whois utility. |
EmailRecon |
email_recon |
Checks email registration status across 100+ platforms with multi-factor validation. | |
MailFinder |
mail_finder |
Audits known email registrations or generates permutations to probe targets. | |
| Network | IPLocation |
ip_location |
Queries geolocation, Autonomous System (ASN), ISP, and coordinates. |
| Network | PortScanner |
port_scanner |
Non-blocking asynchronous TCP port scanner over configurable ports. |
| Network | ReverseIP |
reverse_ip |
Discovers virtual hosts and domains collocated on the same IP. |
| Recon | PhoneInfo |
phone_info |
Validates international phone numbering formats, country, and carrier. |
| Recon | TechDetector |
tech_detector |
Inspects HTTP response headers and signatures for CMS, frameworks, and CDNs. |
| Security | BreachChecker |
breach_checker |
Verifies account exposure against indexed public data breaches. |
| Security | HeaderAnalyzer |
header_analyzer |
Audits HTTP response security policies (HSTS, CSP, X-Frame-Options). |
| Security | SSLChecker |
ssl_checker |
Extracts X.509 certificate metadata, validity windows, and issuers. |
| Social | GitHubRecon |
git_hub_recon |
Collects public user metrics and latest repository activities. |
| Social | UserRecon |
user_recon |
Cross-checks username availability across 105+ platforms with anti-bot bypass. |
- Python 3.11 or higher
uv(recommended package and project manager) or standardpip
git clone https://github.com/termuxhackers-id/SIGIT.git
cd SIGIT
uv syncThis automatically registers the sigit executable into the environment. You can also install it globally via:
uv tool install .
# or
pip install .To start the guided terminal menu:
sigit
# or with uv
uv run sigitEvery service exposes a dedicated subcommand generated automatically from its parameter schema.
sigit --helpsigit port_scanner --help
sigit email_recon --help
sigit user_recon --help# Geolocation lookup for IP address
sigit ip_location --ip 8.8.8.8
# Email reconnaissance across 140+ platforms
sigit email_recon --email [email protected]
# Social username reconnaissance across 105+ platforms
sigit user_recon --username targetuser -o user_profiles.json
# DNS record enumeration with direct JSON export
sigit dns_recon --domain google.com -o results_dns.json
# Asynchronous TCP port scanning
sigit port_scanner --target 127.0.0.1 --ports 22,80,443 --timeout 1.0
# Inspect security headers
sigit header_analyzer --url https://example.comConfiguration variables can be passed via environment variables or a .env file located in the project root:
# Concurrency and timeout controls
SIGIT_TIMEOUT=15
SIGIT_MAX_CONCURRENCY=25
SIGIT_IMPERSONATE=chrome124
SIGIT_PROXY=http://127.0.0.1:8080
# External API credentials (optional)
SIGIT_VERIPHONE_KEY=your_api_key_here
SIGIT_ISITAREALEMAIL_KEY=your_api_key_here-
Create a dedicated tool directory under the appropriate category (e.g.,
sigit/services/network/my_scanner/). -
Create
sigit/services/network/my_scanner/service.py:
from pydantic import BaseModel, Field
from sigit.core.base import BaseService, Category, RenderType, ServiceResult
class ScannerInput(BaseModel):
target: str = Field(description="Target host")
class MyScanner(BaseService):
name = "MyScanner"
description = "Custom network scanner implementation"
category = Category.NETWORK
input_schema = ScannerInput
async def execute(self, params: ScannerInput) -> ServiceResult:
data = {"host": params.target, "status": "active"}
return ServiceResult.ok(data, render_type=RenderType.KEY_VALUE)- Expose the service in
sigit/services/network/my_scanner/__init__.py:
from sigit.services.network.my_scanner.service import MyScanner, ScannerInput
__all__ = ["MyScanner", "ScannerInput"]- The service is automatically indexed by
ServiceRegistryand immediately accessible in both the interactive menu and the CLI subcommand interface.
This project is licensed under the MIT License.