Files
osint/database/seeders/SourceSeeder.php
T
cedry2k1992andClaude Sonnet 5 86f73c46b2 Add Gravatar and DNS Records collectors
Two pure-PHP collectors, no Python/venv/subprocess needed:
- GravatarRunner (email): checks gravatar.com/avatar/{md5}?d=404 for a
  200 vs 404. Scoped to that binary signal since Gravatar's profile
  JSON endpoint now requires API auth even for real, public profiles
  (confirmed against Gravatar's own creator's email).
- DnsRunner (domain): dns_get_record() for A/AAAA/MX/NS/TXT/CNAME. Raw
  payload is naturally keyed by record type, which the existing
  generic list-renderer on the investigation page turns into one
  collapsible section per type with no UI changes needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 11:59:20 +03:00

80 lines
2.9 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\Source;
use Illuminate\Database\Seeder;
class SourceSeeder extends Seeder
{
/**
* Catalog of free/open-source OSINT tools. `runner` is a display-only
* label; the actual dispatch is App\Osint\RunnerRegistry, keyed by `key`.
*/
public function run(): void
{
$sources = [
[
'key' => 'sherlock',
'name' => 'Sherlock',
'description' => 'Checks a username for presence across 400+ social media and community sites.',
'target_types' => ['username'],
'runner' => 'python:sherlock',
],
[
'key' => 'theharvester',
'name' => 'theHarvester',
'description' => 'Gathers emails, subdomains, and hosts for a domain from public sources (crt.sh, OTX, HackerTarget, CertSpotter, ThreatMiner, RapidDNS, Anubis).',
'target_types' => ['domain'],
'runner' => 'python:theharvester',
],
[
'key' => 'crtsh',
'name' => 'crt.sh',
'description' => 'Certificate transparency log search, used to enumerate subdomains for a domain.',
'target_types' => ['domain'],
'runner' => 'http:crtsh',
],
[
'key' => 'whois',
'name' => 'WHOIS',
'description' => 'Domain registration lookup (registrar, dates, name servers).',
'target_types' => ['domain'],
'runner' => 'python:whois',
],
[
'key' => 'ip-api',
'name' => 'ip-api.com',
'description' => 'Free IP geolocation lookup.',
'target_types' => ['ip'],
'runner' => 'http:ip-api',
],
[
'key' => 'holehe',
'name' => 'Holehe',
'description' => 'Checks whether an email address is registered on 120+ sites via the password-reset-oracle technique.',
'target_types' => ['email'],
'runner' => 'python:holehe',
],
[
'key' => 'gravatar',
'name' => 'Gravatar',
'description' => 'Checks whether an email address has a registered Gravatar image.',
'target_types' => ['email'],
'runner' => 'http:gravatar',
],
[
'key' => 'dns',
'name' => 'DNS Records',
'description' => 'Looks up A, AAAA, MX, NS, TXT, and CNAME records for a domain.',
'target_types' => ['domain'],
'runner' => 'dns:records',
],
];
foreach ($sources as $source) {
Source::updateOrCreate(['key' => $source['key']], $source);
}
}
}