mirror of
https://github.com/anotherhadi/iknowyou.git
synced 2026-05-20 09:12:34 +02:00
Improve docs, responsive, add Material Icons
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
This commit is contained in:
@@ -16,13 +16,13 @@ import (
|
||||
|
||||
// ansiRe strips all ANSI/VT100 escape sequences (CSI, OSC, etc.).
|
||||
// RunWithPTY only strips OSC sequences; CSI colour codes need this.
|
||||
var ansiRe = regexp.MustCompile(`\x1b[\x5b-\x5f][0-9;]*[A-Za-z]|\x1b[^[\x5b-\x5f]`)
|
||||
var ansiRe = regexp.MustCompile(`\x1b[\x5b-\x5f][0-9;]*[A-Za-z]|\x1b[^\x5b-\x5f]`)
|
||||
|
||||
type EnumerateHandler struct {
|
||||
demo bool
|
||||
}
|
||||
|
||||
func NewEnumerateHandler(_ string, demo bool) *EnumerateHandler {
|
||||
func NewEnumerateHandler(demo bool) *EnumerateHandler {
|
||||
return &EnumerateHandler{demo: demo}
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ type checkEmailResponse struct {
|
||||
|
||||
// userScannerCheck runs user-scanner via PTY (required for output).
|
||||
// flag is either "-e" (email) or "-u" (username).
|
||||
// Office365 is excluded — it's a known false positive.
|
||||
// Office365 is excluded (known false positive).
|
||||
// quick=true uses a shorter timeout for a faster but incomplete scan.
|
||||
func userScannerCheck(ctx context.Context, flag, target string, quick bool) (status, reason string, sites []string) {
|
||||
defer func() {
|
||||
@@ -223,7 +223,7 @@ func userScannerCheck(ctx context.Context, flag, target string, quick bool) (sta
|
||||
if !strings.Contains(line, "[✔]") {
|
||||
continue
|
||||
}
|
||||
// Office365 is a known false positive — skip it.
|
||||
// Office365 is a known false positive, skip it.
|
||||
if strings.Contains(line, "Office365") {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ func NewRouter(
|
||||
searchHandler := handler.NewSearchHandler(manager, demo)
|
||||
toolsHandler := handler.NewToolsHandler(factories)
|
||||
configHandler := handler.NewConfigHandler(configPath, factories, demo)
|
||||
enumerateHandler := handler.NewEnumerateHandler(configPath, demo)
|
||||
enumerateHandler := handler.NewEnumerateHandler(demo)
|
||||
|
||||
searchLimiter := ikymiddleware.New(rate.Every(10*time.Second), 3)
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@ import (
|
||||
|
||||
const (
|
||||
name = "breachdirectory"
|
||||
description = "Data breach search via BreachDirectory — checks if an email, username, or phone appears in known data breaches and returns exposed passwords/hashes."
|
||||
description = "Data breach search via BreachDirectory: checks if an email, username, or phone appears in known data breaches and returns exposed passwords/hashes."
|
||||
link = "https://breachdirectory.org"
|
||||
icon = ""
|
||||
icon = "mdi:shield-alert"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
APIKey string `yaml:"api_key" iky:"desc=RapidAPI key for BreachDirectory (required — get one at rapidapi.com/rohan-patra/api/breachdirectory);required=true"`
|
||||
APIKey string `yaml:"api_key" iky:"desc=RapidAPI key for BreachDirectory (required, get one at rapidapi.com/rohan-patra/api/breachdirectory);required=true"`
|
||||
}
|
||||
|
||||
type Runner struct {
|
||||
|
||||
@@ -16,9 +16,9 @@ import (
|
||||
|
||||
const (
|
||||
name = "crt.sh"
|
||||
description = "SSL/TLS certificate transparency log search via crt.sh — enumerates subdomains and certificates issued for a domain."
|
||||
description = "SSL/TLS certificate transparency log search via crt.sh: enumerates subdomains and certificates issued for a domain."
|
||||
link = "https://crt.sh"
|
||||
icon = ""
|
||||
icon = "mdi:certificate-outline"
|
||||
)
|
||||
|
||||
type Runner struct{}
|
||||
|
||||
@@ -13,7 +13,7 @@ const (
|
||||
name = "dig"
|
||||
description = "DNS lookup querying A, AAAA, MX, NS, TXT, and SOA records for a domain, or reverse DNS (PTR) for an IP."
|
||||
link = "https://linux.die.net/man/1/dig"
|
||||
icon = ""
|
||||
icon = "mdi:dns"
|
||||
)
|
||||
|
||||
var recordTypes = []string{"A", "AAAA", "MX", "NS", "TXT", "SOA"}
|
||||
@@ -67,7 +67,13 @@ func (r *Runner) Run(ctx context.Context, target string, inputType tools.InputTy
|
||||
break
|
||||
}
|
||||
cmd := exec.CommandContext(ctx, "dig", target, rtype, "+noall", "+answer")
|
||||
output, _ := cmd.Output()
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
if ctx.Err() != nil {
|
||||
break
|
||||
}
|
||||
continue
|
||||
}
|
||||
result := strings.TrimSpace(string(output))
|
||||
if result == "" {
|
||||
continue
|
||||
|
||||
@@ -18,7 +18,7 @@ const (
|
||||
name = "ghunt"
|
||||
description = "Google account OSINT via GHunt. Extracts profile info, linked services, and activity from a Google email address."
|
||||
link = "https://github.com/mxrch/GHunt"
|
||||
icon = "google"
|
||||
icon = "si:google"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
@@ -103,8 +103,8 @@ func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out
|
||||
}
|
||||
|
||||
if start == -1 {
|
||||
// Banner printed but auth line never appeared — bad/expired credentials.
|
||||
out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "GHunt authentication failed — credentials may be missing or expired (run 'ghunt login' and update your creds in Settings)"}
|
||||
// Banner printed but auth line never appeared: bad/expired credentials.
|
||||
out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "GHunt authentication failed: credentials may be missing or expired (run 'ghunt login' and update your creds in Settings)"}
|
||||
out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0}
|
||||
out <- tools.Event{Tool: name, Type: tools.EventTypeDone}
|
||||
return nil
|
||||
|
||||
@@ -12,7 +12,7 @@ const (
|
||||
name = "github-recon"
|
||||
description = "GitHub OSINT reconnaissance tool. Gathers profile info, social links, organisations, SSH/GPG keys, commits, and more from a GitHub username or email."
|
||||
link = "https://github.com/anotherhadi/nur-osint"
|
||||
icon = "github"
|
||||
icon = "si:github"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
|
||||
@@ -11,7 +11,7 @@ const (
|
||||
name = "gravatar-recon"
|
||||
description = "Gravatar OSINT tool. Extracts public profile data from a Gravatar account: name, bio, location, employment, social accounts, phone, and more."
|
||||
link = "https://github.com/anotherhadi/gravatar-recon"
|
||||
icon = ""
|
||||
icon = "si:gravatar"
|
||||
)
|
||||
|
||||
type Runner struct{}
|
||||
|
||||
@@ -13,13 +13,13 @@ import (
|
||||
|
||||
const (
|
||||
name = "ipinfo"
|
||||
description = "IP geolocation via ipinfo.io — returns city, region, country, coordinates, ASN/org, timezone, and hostname."
|
||||
description = "IP geolocation via ipinfo.io: returns city, region, country, coordinates, ASN/org, timezone, and hostname."
|
||||
link = "https://ipinfo.io"
|
||||
icon = ""
|
||||
icon = "mdi:ip-network"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Token string `yaml:"token" iky:"desc=ipinfo.io API token (optional — free tier allows 50k req/month without one);required=false"`
|
||||
Token string `yaml:"token" iky:"desc=ipinfo.io API token (optional, free tier allows 50k req/month without one);required=false"`
|
||||
}
|
||||
|
||||
type Runner struct {
|
||||
|
||||
@@ -14,13 +14,13 @@ import (
|
||||
|
||||
const (
|
||||
name = "leakcheck"
|
||||
description = "Data breach lookup via LeakCheck.io — searches 7B+ leaked records for email addresses, usernames, and phone numbers across hundreds of breaches."
|
||||
description = "Data breach lookup via LeakCheck.io: searches 7B+ leaked records for email addresses, usernames, and phone numbers across hundreds of breaches."
|
||||
link = "https://leakcheck.io"
|
||||
icon = ""
|
||||
icon = "mdi:database-alert"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
APIKey string `yaml:"api_key" iky:"desc=LeakCheck API key (required — get one at leakcheck.io);required=true"`
|
||||
APIKey string `yaml:"api_key" iky:"desc=LeakCheck API key (required, get one at leakcheck.io);required=true"`
|
||||
}
|
||||
|
||||
type Runner struct {
|
||||
|
||||
@@ -14,7 +14,7 @@ const (
|
||||
name = "maigret"
|
||||
description = "Username OSINT across 3000+ sites. Searches social networks, forums, and online platforms for an account matching the target username."
|
||||
link = "https://github.com/soxoj/maigret"
|
||||
icon = ""
|
||||
icon = "mdi:radar"
|
||||
)
|
||||
|
||||
var accountsRe = regexp.MustCompile(`returned (\d+) accounts`)
|
||||
@@ -68,7 +68,7 @@ func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out
|
||||
cmd := exec.CommandContext(ctx, "maigret", args...)
|
||||
output, err := tools.RunWithPTY(ctx, cmd)
|
||||
|
||||
// Crop at Python traceback (NixOS read-only store error — results are unaffected)
|
||||
// Crop at Python traceback (NixOS read-only store error, results are unaffected)
|
||||
if idx := strings.Index(output, "Traceback (most recent call last)"); idx != -1 {
|
||||
output = strings.TrimSpace(output[:idx])
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ type EventType string
|
||||
const (
|
||||
EventTypeOutput EventType = "output" // raw ANSI text, payload is a plain string
|
||||
EventTypeError EventType = "error"
|
||||
EventTypeCount EventType = "count" // payload is int, additive — emit once or multiple times from Run
|
||||
EventTypeCount EventType = "count" // payload is int, additive; emit once or multiple times from Run
|
||||
EventTypeDone EventType = "done"
|
||||
)
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ const (
|
||||
name = "user-scanner"
|
||||
description = "🕵️♂️ (2-in-1) Email & Username OSINT suite. Analyzes 195+ scan vectors (95+ email / 100+ username) for security research, investigations, and digital footprinting."
|
||||
link = "https://github.com/kaifcodec/user-scanner"
|
||||
icon = ""
|
||||
icon = "mdi:account-search"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
|
||||
@@ -16,9 +16,9 @@ import (
|
||||
|
||||
const (
|
||||
name = "wappalyzer"
|
||||
description = "Web technology fingerprinting via wappalyzergo — detects CMS, frameworks, web servers, analytics, CDN, and 1500+ other technologies running on a domain."
|
||||
description = "Web technology fingerprinting via wappalyzergo: detects CMS, frameworks, web servers, analytics, CDN, and 1500+ other technologies running on a domain."
|
||||
link = "https://github.com/projectdiscovery/wappalyzergo"
|
||||
icon = "wappalyzer"
|
||||
icon = "si:wappalyzer"
|
||||
)
|
||||
|
||||
type Runner struct {
|
||||
|
||||
@@ -12,7 +12,7 @@ const (
|
||||
name = "whois"
|
||||
description = "WHOIS lookup for domain registration and IP ownership information."
|
||||
link = "https://en.wikipedia.org/wiki/WHOIS"
|
||||
icon = ""
|
||||
icon = "mdi:card-search"
|
||||
)
|
||||
|
||||
type Runner struct{}
|
||||
|
||||
@@ -16,13 +16,13 @@ import (
|
||||
|
||||
const (
|
||||
name = "whoisfreaks"
|
||||
description = "Reverse WHOIS lookup via WhoisFreaks — find all domains registered by an email, owner name, or keyword across 3.6B+ WHOIS records."
|
||||
description = "Reverse WHOIS lookup via WhoisFreaks: find all domains registered by an email, owner name, or keyword across 3.6B+ WHOIS records."
|
||||
link = "https://whoisfreaks.com"
|
||||
icon = ""
|
||||
icon = "mdi:database-search"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
APIKey string `yaml:"api_key" iky:"desc=WhoisFreaks API key (required — free account at whoisfreaks.com);required=true"`
|
||||
APIKey string `yaml:"api_key" iky:"desc=WhoisFreaks API key (required, free account at whoisfreaks.com);required=true"`
|
||||
}
|
||||
|
||||
type Runner struct {
|
||||
|
||||
Reference in New Issue
Block a user