Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
SeekYou — Renseignement OSINT sur toute IP, domaine ou ASN | Kitploit
Outils/GitHubGitHub/teycir/seekyou
OSINT (Renseignement de Sources Ouvertes)ReconnaissanceCartographie RéseauFlux et Agrégateurs de MenacesAnalyse des VulnérabilitésCollecte d'InformationsTests d'IntrusionSécurité CloudRenseignement sur les MenacesRéponse aux IncidentsCrawlerAnalyse DNS
19210il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
GitHubteycir/seekyou

SeekYou

Renseignement OSINT sur toute IP, domaine ou ASN

Voir le dépôtSite web

Soutenir le développement

Si ce projet vous aide dans votre travail, soutenez la maintenance continue et les nouvelles fonctionnalités.

Portefeuille de don ETH
0x11282eE5726B3370c8B480e321b3B2aA13686582

Code QR de don Ethereum

Scannez le code QR ou copiez l'adresse du portefeuille ci-dessus.

SeekYou

Renseignement unifié sur les hôtes à travers 15 sources — Interrogez n'importe quelle IP, domaine ou ASN pour obtenir instantanément la posture de sécurité, les détails de l'infrastructure et les corrélations de menaces. Fonctionne entièrement sur le niveau gratuit de Cloudflare.

Disponible sur : swiy.co/seekyou``` $ curl "https://seekyou.seekyou.workers.dev/api/lookup?q=1.1.1.1"

{ "query": { "raw": "1.1.1.1", "type": "ip", "normalised": "1.1.1.1" }, "core": { "internetdb": { "status": "ok", "data": { "ports": [80,443], "vulns": [] } }, "geo": { "status": "cached", "data": { "country": "US", "org": "AS13335 Cloudflare" } }, "bgp": { "status": "ok", "data": { "name": "CLOUDFLARENET", "rir": "ARIN" } }, ... }, "meta": { "durationMs": 312, "cacheHits": 4, "sourcesQueried": 15, "sourcesFailed": 0 } }

root@kitploit:~
## Captures d'écran

<div align="center">

### Page d'accueil
<img src="https://assets.kitploit.com/production/public/readmes/7467/e00ec4ba8b3e5460ae1e03360cf6540e58d92acc5522c8693445512b591fed29.png" alt="Page de résultats SeekYou" width="800" />


### Page de résultats
<img src="https://assets.kitploit.com/production/public/readmes/7467/09b165feca9927ad4cd50c3ebd28c72e09a0355d72b9ca14d795bf1d04448c92.png" alt="Page d'accueil SeekYou" width="800" />

### Démo
<a href="https://www.youtube.com/watch?v=b86tAUUqd34">
  <img src="https://assets.kitploit.com/production/public/readmes/7467/8762e8b464816b9a69d929514441f8c7ee9f9ee9719f95b9c5e33ac1672575f8.jpg" alt="Démo SeekYou" width="800" />
</a>

</div>

---

## Table des matières

- [SeekYou](#seekyou)
  - [Captures d'écran](#screenshots)
    - [Page d'accueil](#landing-page)
    - [Page de résultats](#results-page)
    - [Démo](#demo)
  - [Table des matières](#table-of-contents)
  - [Ce que fait SeekYou](#what-seekyou-does)
  - [Cas d'utilisation](#use-cases)
  - [Politique d'utilisation licite](#lawful-use-policy)
  - [Outils connexes](#related-tools)
  - [Aperçu de l'architecture](#architecture-overview)
  - [Modèle d'exécution](#execution-model)
  - [Sources de données](#data-sources)
  - [Structure du projet](#project-structure)
  - [Décisions de conception clés](#key-design-decisions)
    - [Edge-first, pas de Node.js](#edge-first-no-nodejs)
    - [Exécution parallèle en couches](#layered-parallel-execution)
    - [Dégradation gracieuse](#graceful-degradation)
    - [Stockage fractionné D1 + KV](#split-d1--kv-storage)
    - [Optimisation du niveau gratuit](#free-tier-optimization)
    - [Écritures D1 en fire-and-forget](#fire-and-forget-d1-writes)
  - [Stratégie de cache](#caching-strategy)
  - [Limitation de débit](#rate-limiting)
  - [Disjoncteurs](#circuit-breakers)
  - [Rotation de clés — GrayHatWarfare](#key-rotation--grayhatwarfare)
  - [Persistance D1](#d1-persistence)
    - [Schéma (`schema.sql`)](#schema-schemasql)
    - [Appliquer le schéma](#apply-schema)
    - [Fonctions auxiliaires](#helper-functions)
  - [Worker cron](#cron-worker)
    - [Diff typé (`lib/diff.ts`)](#typed-diff-libdiffts)
    - [Charge utile du webhook](#webhook-payload)
  - [Configuration de développement](#development-setup)
    - [Prérequis](#prerequisites)
    - [Développement local](#local-development)
    - [Créer des ressources Cloudflare (première fois)](#create-cloudflare-resources-first-time)
  - [Déploiement](#deployment)
    - [Construire et déployer](#build-and-deploy)
    - [Configuration Wrangler (`wrangler.toml`)](#wrangler-configuration-wranglertoml)
  - [Secrets et variables d'environnement](#secrets-and-environment-variables)
    - [Secrets requis](#required-secrets)
    - [`.env.example` (développement local uniquement)](#envexample-local-dev-only)
  - [Licence](#license)
  - [Auteur](#author)
  - [Remerciements](#acknowledgments)

---

## Ce que fait SeekYou

SeekYou est un **outil de renseignement sur les hôtes** — collez une adresse IP, un nom de domaine ou un ASN et obtenez un rapport unifié couvrant :

| Catégorie | Ce que vous obtenez |
|---|---|
| Réseau | Ports ouverts, CPEs, préfixes BGP, upstreams, pairs, RIR |
| Identité | Enregistrement RDAP, contacts, bureau d'enregistrement, serveurs de noms |
| Géo | Pays, ville, FAI, indicateurs proxy / hébergement / mobile |
| Certificats | Historique crt.sh, SANs, chaîne d'émetteur |
| DNS | Enregistrements DNS passifs, DNS inversé/direct Robtex |
| Menaces | URLhaus, ThreatFox, MalwareBazaar, Feodo, SSLBL |
| CVE | Enrichissement NVD + CIRCL pour chaque ID CVE rapporté par InternetDB |
| Reconnaissance | Buckets exposés GrayHatWarfare, instantanés CDX Wayback |

Chaque source est interrogée en parallèle. Une source défaillante se dégrade en un badge « indisponible » — elle ne casse jamais la page.

---

## Cas d'utilisation

**Opérations de sécurité** — Profiler rapidement les IP suspectes à partir des logs, corréler les IOCs, identifier les services exposés et les CVE, tracer les domaines malveillants.

**Opérations réseau** — Inspecter le routage BGP, les données d'allocation RDAP/WHOIS, les enregistrements DNS historiques, les changements de certificats SSL.

**Tests d'intrusion** — Énumérer les ports/services/CPE, découvrir les buckets exposés, les pages archivées, les sous-domaines et les relations ASN.

**Renseignement sur les menaces** — Vérifier l'infrastructure C2 contre cinq flux de menaces en une seule requête.

**Conformité et risque** — Profiler l'infrastructure des fournisseurs, détecter le stockage cloud exposé, identifier l'IT fantôme.

---

## Politique d'utilisation licite

SeekYou est conçu pour **la recherche en sécurité licite, les opérations réseau et le renseignement sur les menaces**. En utilisant cet outil, vous acceptez :

**Utilisations autorisées :**
- Opérations de sécurité et réponse aux incidents sur les réseaux que vous possédez ou que vous êtes autorisé à surveiller
- Recherche en renseignement sur les menaces et corrélation d'IOC
- Dépannage réseau et audit d'infrastructure au sein de votre organisation
- Tests d'intrusion avec autorisation écrite explicite de l'organisation cible
- Recherche académique et éducation en cybersécurité
- Audits de conformité et évaluations des risques fournisseurs avec autorisation appropriée

**Utilisations interdites :**
- Accès non autorisé, reconnaissance ou attaques contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester
- Harcèlement, traque ou violations de la vie privée contre des individus ou des organisations
- Faciliter des activités illégales, y compris la fraude, le vol d'identité ou la cybercriminalité
- Contourner les contrôles de sécurité ou les restrictions d'accès sans autorisation
- Violer les lois applicables, y compris le CFAA (États-Unis), le Computer Misuse Act (Royaume-Uni), le GDPR (UE), ou la législation équivalente dans votre juridiction

**Vos responsabilités :**
- Assurez-vous d'avoir l'autorisation appropriée avant d'interroger une infrastructure que vous ne possédez pas
- Respectez les limites de débit et n'abusez pas du service ou des sources de données en amont
- Conformez-vous à toutes les lois et réglementations applicables dans votre juridiction
- Utilisez les données de manière responsable et ne transformez pas les résultats en arme sans divulgation coordonnée
- Comprenez qu'interroger un hôte n'accorde pas la permission d'y accéder ou de l'exploiter

**Avertissement :**
L'auteur et les contributeurs déclinent toute responsabilité en cas d'utilisation abusive de cet outil. Les utilisateurs sont seuls responsables de s'assurer que leurs activités sont conformes aux lois applicables. Les données agrégées à partir de sources publiques peuvent être incomplètes, obsolètes ou inexactes — vérifiez toujours les résultats via des canaux faisant autorité avant d'agir.

Si vous découvrez une vulnérabilité via SeekYou, suivez les pratiques de divulgation responsable et informez la partie concernée avant toute divulgation publique.

---

## Outils connexes

SeekYou fait partie d'une boîte à outils de sécurité axée sur la confidentialité. Explorez l'ensemble de la suite :

| Outil | Description | URL en direct |
|---|---|---|
| **TimeSeal** | Service d'horodatage cryptographique — prouver l'existence d'un document à un moment précis sans révéler son contenu | [timeseal.online](https://timeseal.online) |
| **SanctumVault** | Coffre-fort crypté à connaissance nulle — chiffrement côté client pour le stockage de données sensibles | [sanctumvault.online](https://sanctumvault.online) |
| **GhostChat** | Messagerie cryptée éphémère — conversations autodestructrices sans logs serveur | [ghost-chat.pages.dev](https://ghost-chat.pages.dev) |
| **XMRProof** | Vérification de paiement Monero — générer des preuves cryptographiques de transactions XMR | [xmrproof.pages.dev](https://xmrproof.pages.dev) |
| **GhostReceipt** | Génération de reçus anonymes — créer des enregistrements de transactions vérifiables sans exposition d'identité | [ghostreceipt.pages.dev](https://ghostreceipt.pages.dev) |
| **SeekYou** | Aggrégateur de renseignements sur les hôtes — OSINT unifié sur 15 sources pour les IP, domaines et ASN | [seekyou.seekyou.workers.dev](https://seekyou.seekyou.workers.dev) |
| **HoneypotScan** | Service de détection de honeypots — identifier les systèmes leurres et éviter les faux positifs dans la recherche en sécurité | [honeypotscan.pages.dev](https://honeypotscan.pages.dev) |

Tous les outils fonctionnent sur le réseau edge de Cloudflare avec des principes de conception axés sur la confidentialité.

---

## Aperçu de l'architecture```
Browser / curl
     │
     ▼
┌─────────────────────────────────────┐
│  Cloudflare Pages                   │
│  Next.js App Router (SSR)           │
│                                     │
│  app/page.tsx          search form  │
│  app/host/[query]/page.tsx          │
│    └─ streams /api/stream?q=…       │
│  app/api/recent/route.ts            │
│    └─ recent searches for homepage  │
│  app/targets/page.tsx               │
│    └─ monitoring dashboard          │
│  app/api/targets/route.ts           │
│    └─ saved targets CRUD            │
│        returns riskScore + lastDiff │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│  app/api/lookup/route.ts            │
│  (Workers runtime via opennextjs)   │
│  • input validation                 │
│  • per-IP rate limiting (KV)        │
│  • ctx.waitUntil(recordSearch())    │
└──────────────┬──────────────────────┘
               │ runLookup()
               ▼
┌─────────────────────────────────────┐
│  worker/lookup.ts  — orchestrator   │
│  4-layer Promise.allSettled         │
└──┬──────────────────────────────────┘
   │
   ├─► Layer 1+2 (parallel, 12 sources):
   │     InternetDB · IPinfo · RIPE stat · RDAP · crt.sh · HackerTarget · Robtex
   │     URLhaus · ThreatFox · MalwareBazaar · Feodo · SSLBL
   ├─► Layer 3 (after L1): NVD CVE enrichment (only if vulns found, batched 10-at-a-time)
   └─► Layer 4 (parallel): GrayHatWarfare · Wayback (domain queries only)
               │
               ▼
┌──────────────────────┐   ┌──────────────────────┐
│ D1                   │   │ KV                   │
│ source response cache│   │ rate limiting        │
│ (TTL per source)     │   │ circuit breakers     │
│ searches             │   │ concurrency counters │
│ saved_targets        │   │                      │
└──────────────────────┘   └──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│  seekyou-cron (Worker)            │
│  wrangler.cron.toml                 │
│  • hourly blocklist refresh         │
│  • hourly saved-target re-query     │
│    + typed diff (lib/diff.ts)       │
│    + webhook on hasChanges          │
└─────────────────────────────────────┘

Modèle d'exécution

Les couches 1 et 2 sont déclenchées simultanément (12 sources dans un seul Promise.allSettled). La couche 3 démarre après la fin de la couche 1 — les ID CVE d'InternetDB déclenchent l'enrichissement NVD, regroupés par lot de 10 pour éviter de surcharger l'API. La couche 4 s'exécute en parallèle avec la couche 3 mais uniquement pour les requêtes de domaine ; les IP/ASN l'ignorent complètement. Temps total écoulé ≈ max(Couche 1+2) + max(Couche 3+4).

Forcez l'actualisation de toute requête avec ?refresh=1 pour contourner le cache D1 et récupérer les données en direct de chaque source.


Sources de données

Feodo et SSLBL sont récupérés sous forme de listes de blocage en masse et actualisés toutes les heures par le worker cron — aucun appel upstream par requête.


Structure du projet```

SeekYou/ ├── app/ │ ├── page.tsx # Homepage — search form + recent searches │ ├── layout.tsx # Root layout │ ├── globals.css │ ├── about/ # About page │ ├── faq/ # FAQ page │ ├── targets/ │ │ └── page.tsx # /targets — monitoring dashboard (risk + diffs) │ ├── host/[query]/ │ │ └── page.tsx # SSR host report page (streams via /api/stream) │ ├── api/ │ │ ├── lookup/route.ts # GET /api/lookup?q=&refresh=1 │ │ ├── stream/route.ts # GET /api/stream?q= (SSE streaming) │ │ ├── recent/route.ts # GET /api/recent?limit=5 │ │ ├── batch/route.ts # POST /api/batch (multi-query) │ │ ├── targets/route.ts # GET /api/targets (+ riskScore, lastDiff) · POST │ │ ├── targets/[id]/route.ts # DELETE /api/targets/:id │ │ └── admin/reset-breaker/ # POST — manual circuit-breaker reset │ └── components/ │ ├── AnimatedTagline.tsx │ ├── Card.tsx │ ├── CopyButton.tsx │ ├── CveDrawer.tsx │ ├── DecryptedText.tsx │ ├── ExportButton.tsx # JSON export (client, zero backend) │ ├── Footer.tsx │ ├── RecentSearches.tsx # Recent queries from D1 (client) │ ├── RiskBadge.tsx # Risk score pill with breakdown tooltip │ ├── SaveButton.tsx # Save/unsave target │ ├── ScrollProgress.tsx │ ├── ShareButton.tsx │ ├── VulnsStream.tsx # Streaming CVE results │ └── ui/ # Shared UI primitives ├── worker/ │ ├── lookup.ts # 4-layer orchestrator │ ├── cron.ts # Hourly blocklist refresh + target sweep w/ typed diff │ ├── index.ts │ └── sources/ │ ├── internetdb.ts │ ├── ipapi.ts │ ├── bgpview.ts │ ├── rdap.ts │ ├── crtsh.ts │ ├── passivedns.ts │ ├── robtex.ts │ ├── abusech.ts # URLhaus + ThreatFox + MalwareBazaar │ ├── nvd.ts # NVD + CIRCL CVE enrichment │ ├── osv.ts # OSV.dev re-export (via nvd.ts) │ ├── grayhatwarfare.ts │ └── wayback.ts ├── lib/ │ ├── types.ts # All TypeScript interfaces │ ├── cache.ts # D1 cache wrapper (cacheGet/cachePut, bypass on forceRefresh) │ ├── config.ts # All magic numbers: TTLs, timeouts, limits │ ├── diff.ts # TargetDiff — typed change detection between snapshots │ ├── errors.ts # Unified error format + ErrorCode enum │ ├── hooks.ts # Shared React hooks │ ├── keyring.ts # GHW 18-key rotation │ ├── logger.ts # Structured logging │ ├── merge.ts # Result merging │ ├── normalize.ts # Threat indicator normalization │ ├── ratelimit.ts # KV-based per-IP rate limiter + circuit breakers │ ├── results.ts # SourceResult helpers │ ├── risk.ts # computeRiskScore — scored 0–100 with breakdown │ ├── searches.ts # D1 helpers: recordSearch, getRecentSearches │ ├── targets.ts # D1 helpers: saveTarget, listTargets, removeTarget │ ├── textAnimation.ts # Text animation utility │ ├── useHostStream.ts # SSE streaming hook for host results │ ├── validate.ts # Query parsing (IPv4/v6/domain/ASN) │ └── utils.ts ├── test/ │ ├── cache.test.ts │ ├── diff.test.ts # Tests for diffHostResults + summariseDiff │ ├── keyring.test.ts │ ├── logger.test.ts │ ├── merge.test.ts │ ├── normalize.test.ts │ ├── results.test.ts │ ├── risk.test.ts │ ├── validate.test.ts │ └── sources/ ├── docs/ │ ├── ROADMAP.md │ ├── Spec.md │ └── LICENSE.md ├── public/ │ └── publiceth.svg # Donation QR code ├── schema.sql # D1 schema (apply with wrangler d1 execute) ├── wrangler.toml # Pages build config (KV + D1 bindings) ├── wrangler.cron.toml # Cron worker config (separate deploy) ├── next.config.ts ├── open-next.config.ts └── vitest.config.ts

root@kitploit:~
## Décisions de conception clés

### Edge-first, pas de Node.js
Exécution des workers via `@opennextjs/cloudflare` — pas besoin d'export `runtime = 'edge'`. API Web pures partout. Démarrages à froid sous 50 ms à l'échelle mondiale.

### Exécution parallèle en couches
Les couches 1+2 se déclenchent ensemble (12 sources). La couche 3 (enrichissement CVE) ne s'exécute que si InternetDB trouve des vulnérabilités, par lots de 10 à la fois. La couche 4 (GHW + Wayback) s'exécute en parallèle de la couche 3, mais est totalement ignorée pour les requêtes IP/ASN. Temps total ≈ source la plus lente dans chaque vague, pas la somme de toutes les sources.

### Dégradation gracieuse
Chaque source est encapsulée dans un circuit breaker + try/catch. Une source défaillante devient un badge `{ status: 'error' }`. La page s'affiche toujours.

### Stockage D1 et KV séparés
Les caches de réponse des sources résident dans **D1** (pas KV) — les valeurs sont écrites une fois, lues occasionnellement, et sont suffisamment grandes pour que le coût du quota d'écriture de KV s'accumule rapidement. **KV** est réservé exclusivement aux compteurs de chemin chaud : limitation de débit, circuit breakers, et suivi de concurrence en vol. Chaque source a son propre TTL (30 jours pour les CVE, 24h pour BGP/RDAP, 1h pour geo/ports de base, 30m pour abuse.ch). `?refresh=1` transmet `forceRefresh: true` à chaque récupérateur pour contourner le cache D1 à la demande.

### Optimisation pour le niveau gratuit
GrayHatWarfare a une rotation de 18 clés (1 800 req/jour). NVD utilise le regroupement de requêtes (10 max en concurrence). Feodo/SSLBL sont récupérés sous forme de listes groupées par le cron worker et mis en cache dans KV — zéro coût amont par requête.

### Écritures D1 de type 'fire-and-forget'
`recordSearch()` est appelée dans `ctx.waitUntil()` — cela n'ajoute aucune latence à la réponse API. Les écritures D1 se produisent après que la réponse a été vidée.

---

## Stratégie de mise en cache

Les réponses des sources sont mises en cache dans **D1** avec un TTL manuel appliqué via une colonne `expires_at`. KV n'est pas utilisé pour la mise en cache des réponses — il est réservé à la limitation de débit, aux circuit breakers, et aux compteurs de concurrence en vol où des incréments atomiques à faible latence sont importants.```typescript
// lib/cache.ts
export async function cacheGet<T>(
  db: D1Database,
  key: string,
  bypass?: boolean,        // true when ?refresh=1
): Promise<T | null>

export async function cachePut<T>(
  db: D1Database,
  key: string,
  value: T,
  ttl: number,             // seconds
): Promise<void>

Cache keys follow the pattern source:normalised_query — e.g. internetdb:1.1.1.1, crtsh:example.com.

TTLs par source (from lib/cache.ts) :

Les erreurs ne sont jamais mises en cache — un échec de récupération relance toujours la requête suivante. Les lignes expirées sont renvoyées comme un échec et écrasées paresseusement ; aucun nettoyage en arrière-plan n'est nécessaire.


Limitation de débit

Fenêtre glissante basée sur KV : 100 requêtes par IP par heure. Implémenté dans lib/ratelimit.ts, appliqué dans app/api/lookup/route.ts avant que toute recherche ne soit exécutée.

Les en-têtes de limitation de débit sont renvoyés sur chaque réponse :``` X-RateLimit-Limit: 100 X-RateLimit-Remaining: 87 X-RateLimit-Reset: 1716912000

root@kitploit:~
En cas d'épuisement, l'API renvoie `429` avec `Retry-After`.

---

## Disjoncteurs

Chaque source possède un disjoncteur suivi dans KV. Si une source dépasse **50% de taux d'échec** dans une fenêtre de 5 minutes (minimum 4 requêtes), le disjoncteur s'ouvre et la source est ignorée (renvoie `{ status: 'skipped' }`) pendant **15 minutes**, puis se rétablit automatiquement.

L'état actuel de chaque disjoncteur est inclus dans `meta.circuitBreakers` dans chaque réponse API.

Pour réinitialiser manuellement un disjoncteur en production :```bash
curl -X POST https://seekyou.seekyou.workers.dev/api/admin/reset-breaker \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"source": "nvd"}'

Key rotation — GrayHatWarfare

GrayHatWarfare autorise 100 requêtes/jour par clé API. SeekYou alterne entre jusqu'à 18 clés pour un total effectif de 1 800 requêtes/jour :```typescript // lib/keyring.ts — round-robin across keys with remaining quota const key = await keyRing.next(env, 'GRAYHATWARFARE_API_KEY')

root@kitploit:~
Les clés sont nommées `GRAYHATWARFARE_API_KEY_1` à `GRAYHATWARFARE_API_KEY_18` et stockées en tant que secrets Wrangler.

---

## Persistance D1

### Schéma (`schema.sql`)```sql
CREATE TABLE IF NOT EXISTS searches (
  id          TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(8)))),
  query       TEXT NOT NULL,
  query_type  TEXT NOT NULL CHECK (query_type IN ('ip','domain','asn')),
  result_json TEXT NOT NULL,
  duration_ms INTEGER,
  created_at  INTEGER NOT NULL DEFAULT (unixepoch())
);

CREATE INDEX IF NOT EXISTS idx_searches_query
  ON searches (query, created_at DESC);

CREATE TABLE IF NOT EXISTS saved_targets (
  id          TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(8)))),
  query       TEXT NOT NULL UNIQUE,
  label       TEXT,
  notes       TEXT,
  result_json TEXT,       -- snapshot of last cron lookup
  checked_at  INTEGER,    -- unix seconds — when cron last re-queried
  created_at  INTEGER NOT NULL DEFAULT (unixepoch())
);

CREATE INDEX IF NOT EXISTS idx_saved_targets_created
  ON saved_targets (created_at DESC);

Appliquer le schéma```bash

wrangler d1 execute seekyou --file=schema.sql

root@kitploit:~
### Fonctions utilitaires

**`lib/searches.ts`** — historique de recherche :```typescript
// Write a search row (fire-and-forget safe)
await recordSearch(db, query, queryType, resultJson, durationMs)

// Read last N distinct queries for the homepage (default 5)
const recent = await getRecentSearches(db, 5)
// → [{ query: '1.1.1.1', query_type: 'ip', created_at: 1716912000 }, ...]

lib/targets.ts — cibles sauvegardées :```typescript // Upsert a target (idempotent on query) const id = await saveTarget(db, query, label, notes)

// List all saved targets const targets = await listTargets(db)

// Remove by id await removeTarget(db, id)

// Fetch one (used by cron before re-querying) const target = await getTarget(db, id)

// Write latest snapshot after cron re-query await updateTargetSnapshot(db, id, resultJson)

root@kitploit:~
---

## Worker Cron

Un Worker autonome (`worker/cron.ts`) est déployé séparément via `wrangler.cron.toml`. Il s'exécute sur une **déclencheur horaire** et effectue deux tâches :

1. **Rafraîchissement des listes de blocage** — vérifie si les listes groupées Feodo/SSLBL sont obsolètes et les télécharge à nouveau si nécessaire.
2. **Balayage des cibles sauvegardées** — interroge à nouveau chaque cible sauvegardée, calcule un `TargetDiff` typé, persiste l'instantané frais dans D1 et envoie une charge utile webhook par POST lorsque des modifications sont détectées.

### Différence typée (`lib/diff.ts`)

Après chaque nouvelle interrogation, `diffHostResults(prev, next)` produit un `TargetDiff` structuré couvrant :

| Signal | Ce qu'il détecte |
|---|---|
| `ports` | Ports ouverts / fermés (direction par port) |
| `cves` | CVE apparues / résolues, avec sévérité et score CVSS |
| `threats` | Modifications des flux URLhaus, Feodo, SSLBL, ThreatFox |
| `geo` | Changements de pays, d'ASN ou de nom d'hôte principal |
| `certExpiry` | Certificats expirant dans les 30 jours ou récemment expirés (se déclenche une fois par certificat) |
| `risk` | Delta du score de risque — n'apparaît dans `hasChanges` que lorsque Δ ≥ 5 points |

`summariseDiff(diff, query)` convertit la structure en une chaîne lisible pour les logs et le relais webhook.

### Charge utile webhook

Lorsque `diff.hasChanges` est vrai et que `WEBHOOK_URL` est défini, le cron envoie par POST :```json
{
  "sentAt": 1716912000,
  "events": [
    {
      "targetId": "abc123",
      "query": "1.2.3.4",
      "checkedAt": 1716912000,
      "summary": "1.2.3.4:\n  port 3389 opened\n  CVE-2021-44228 appeared [CRITICAL 10]",
      "diff": {
        "diffedAt": 1716912000,
        "hasChanges": true,
        "ports": [{ "port": 3389, "direction": "opened" }],
        "cves": [{ "id": "CVE-2021-44228", "direction": "appeared", "severity": "CRITICAL", "score": 10 }],
        "threats": [],
        "geo": [],
        "certExpiry": [],
        "risk": { "prev": 20, "next": 55, "delta": 35 }
      }
    }
  ]
}

Le champ diff est entièrement structuré — les consommateurs peuvent se brancher sur des types de changements spécifiques sans avoir à analyser des lignes de chaînes. Le champ summary est pré-formaté pour les relais Slack/Discord.

Déployez le worker cron :```bash wrangler deploy --config wrangler.cron.toml

root@kitploit:~
Les secrets pour le worker cron sont définis séparément :```bash
wrangler secret put NVD_KEY     --config wrangler.cron.toml
wrangler secret put ABUSECH_KEY --config wrangler.cron.toml
wrangler secret put WEBHOOK_URL --config wrangler.cron.toml  # optional — fires on any hasChanges

Configuration de développement

Prérequis

  • Node.js 18+
  • Wrangler CLI (npm i -g wrangler)
  • Compte Cloudflare (le niveau gratuit est suffisant)

Développement local```bash

git clone https://github.com/Teycir/SeekYou cd SeekYou npm install

Copy example env — fill in your keys

cp .env.example .env

Run Next.js dev server (KV/D1 stubbed via Wrangler local)

npm run dev

root@kitploit:~
L'application est disponible à l'adresse `http://localhost:3000`. En développement local, KV et D1 utilisent l'émulation locale basée sur SQLite de Wrangler — aucun accès au compte Cloudflare nécessaire pour les tests de base.

### Créer des ressources Cloudflare (première fois)```bash
# Create KV namespace — copy the ID into wrangler.toml
wrangler kv namespace create KV

# Create D1 database — copy the ID into wrangler.toml
wrangler d1 create seekyou

# Apply schema
wrangler d1 execute seekyou --file=schema.sql

Déploiement

Construire et déployer```bash

Build + deploy to Cloudflare Pages

bash scripts/deploy.sh

root@kitploit:~
Le script exécute `opennextjs-cloudflare build`, prépare le répertoire de sortie Pages, et appelle `wrangler pages deploy .open-next`. **Ne pas** utiliser `npm run deploy` ou `wrangler deploy` seul — ces commandes ciblent le runtime Workers (non Pages) et échoueront.

Pour déployer le worker cron séparément :```bash
wrangler deploy --config wrangler.cron.toml

Configuration de Wrangler (wrangler.toml)```toml

name = "seekyou" pages_build_output_dir = ".open-next" compatibility_date = "2025-05-01" compatibility_flags = ["nodejs_compat"]

[[kv_namespaces]] binding = "KV" id = ""

[[d1_databases]] binding = "DB" database_name = "seekyou" database_id = ""

root@kitploit:~
---

## Secrets et variables d'environnement

Tous les secrets sont stockés en tant que secrets Wrangler — jamais dans le code source ou .env.

### Secrets requis```bash
wrangler secret put NVD_KEY             # NVD API key (optional — higher rate limits)
wrangler secret put ABUSECH_KEY         # abuse.ch API key (URLhaus/ThreatFox/MalwareBazaar)
wrangler secret put ADMIN_TOKEN         # Bearer token for /api/admin/* endpoints

# GrayHatWarfare — repeat for each key you have (1–18)
wrangler secret put GRAYHATWARFARE_API_KEY_1
wrangler secret put GRAYHATWARFARE_API_KEY_2
# ... up to GRAYHATWARFARE_API_KEY_18

.env.example (uniquement pour le développement local)```bash

NVD_KEY=your_nvd_key_here ABUSECH_KEY=your_abusech_key_here ADMIN_TOKEN=change_me GRAYHATWARFARE_API_KEY_1=your_ghw_key_here

root@kitploit:~
> **Note de sécurité :** Ne jamais commiter `.env`. Il est dans `.gitignore`. Si des secrets ont été commités, faites tourner toutes les clés et nettoyez l'historique git avec BFG (`bfg --delete-files .env`).

---

## Licence

**Business Source License 1.1 (BSL)**

Copyright © 2026 Teycir Ben Soltane <[email protected]>

Autorisé : usage personnel, recherche, éducation, projets non commerciaux, outils internes d'entreprise.  
Restreint : offres SaaS commerciales, revente en tant que service, produits concurrents.

Après 4 ans à compter de la date de publication, ce logiciel passe sous licence Apache 2.0.

Voir [docs/LICENSE.md](https://github.com/teycir/seekyou/blob/master/docs/LICENSE.md) pour les conditions complètes.

---

## Auteur

**Teycir Ben Soltane**  
Email: [email protected]  
GitHub: [@Teycir](https://github.com/Teycir)

---

## Remerciements

- [InternetDB](https://internetdb.shodan.io) (Shodan)
- [IPinfo](https://ipinfo.io)
- [RIPE stat](https://stat.ripe.net)
- [RDAP](https://rdap.org)
- [crt.sh](https://crt.sh)
- [HackerTarget](https://hackertarget.com)
- [Robtex](https://www.robtex.com)
- [abuse.ch](https://abuse.ch) — URLhaus, ThreatFox, MalwareBazaar, Feodo, SSLBL
- [NVD](https://nvd.nist.gov) (NIST)
- [CIRCL](https://www.circl.lu/services/cve-search/)
- [OSV.dev](https://osv.dev)
- [GrayHatWarfare](https://grayhatwarfare.com)
- [Internet Archive](https://web.archive.org) (Wayback Machine)

---

## 🌐 Projets connexes

Découvrez d'autres outils axés sur la confidentialité et la sécurité :

### Confidentialité et chiffrement
- **[Timeseal](https://github.com/Teycir/Timeseal)** - Coffre de chiffrement à verrouillage temporel avec Dead Man's Switch. Cryptographie AES-256 à clé fractionnée, sceaux éphémères.
- **[Sanctum](https://github.com/Teycir/Sanctum)** - Coffre chiffré zero-trust avec déni plausible cryptographique. XChaCha20-Poly1305, Argon2id.
- **[GhostChat](https://github.com/Teycir/GhostChat)** - Véritable chat chiffré P2P via WebRTC. Aucun serveur, aucun stockage, messages autodestructeurs.
- **[xmrproof](https://github.com/Teycir/xmrproof)** - Vérification de paiement Monero, 100 % côté client.
- **[GhostReceipt](https://github.com/Teycir/GhostReceipt)** - Génération de reçus anonymes avec preuves à connaissance nulle.

### Outils de sécurité
- **[BurpAPISecuritySuite](https://github.com/Teycir/BurpAPISecuritySuite)** - Extension Burp Suite pour les tests de sécurité d'API. 15 types d'attaques, 108+ payloads, détection BOLA/IDOR.
- **[Mcpwn](https://github.com/Teycir/Mcpwn)** - Scanner de sécurité automatisé pour les serveurs Model Context Protocol. Détecte RCE, path traversal, injection de prompt.
- **[DiffCatcher](https://github.com/Teycir/DiffCatcher)** - Découverte de dépôts Git, capture de diff, extraction d'éléments de code.
- **[HoneypotScan](https://github.com/Teycir/HoneypotScan)** - Service de détection de honeypots pour la recherche en sécurité.
- **[CheckAPI](https://github.com/Teycir/CheckAPI)** - Validateur de clés API LLM pour plusieurs fournisseurs. Validation axée sur la confidentialité, côté client.

### Serveurs de sécurité MCP
- **[burp-mcp-server](https://github.com/Teycir/burp-mcp-server)** - Serveur MCP pour Burp Suite Professional. Scan de vulnérabilités via des assistants IA.
- **[nuclei-mcp](https://github.com/Teycir/nuclei-mcp)** - Serveur MCP pour Nuclei. Scan multi-cibles, filtrage par sévérité.
- **[nmap-mcp](https://github.com/Teycir/nmap-mcp)** - Serveur MCP pour Nmap. Reconnaissance furtive, scan de vulnérabilités/NSE.
- **[frida-mcp](https://github.com/Teycir/frida-mcp)** - Serveur MCP pour Frida. Instrumentation dynamique, contournement du SSL pinning.

---

## 💼 Services proposés

- 🔒 **Développement axé sur la confidentialité** - Applications P2P, communication chiffrée, systèmes à connaissance nulle
- 🚀 **Développement d'applications web** - Développement full-stack avec Next.js, React, TypeScript
- 🔧 **Solutions Edge Computing** - Cloudflare Workers, Pages, D1, KV, Durable Objects
- 🛡️ **Développement d'outils de sécurité** - Extensions Burp, outils de test d'intrusion, frameworks d'automatisation
- 🤖 **Intégration IA** - Applications basées sur LLM, automatisation intelligente, solutions IA personnalisées
- 🔍 **OSINT et Threat Intelligence** - Outils de reconnaissance personnalisés, agrégation de flux de menaces, corrélation d'IOC

**Contactez-moi** : [teycirbensoltane.tn](https://teycirbensoltane.tn) | Disponible pour des projets freelance et du conseil

---

<div align="center">

**Construit avec 💚 par [Teycir Ben Soltane](https://teycirbensoltane.tn)**

</div>
Télécharger l’outil
CoucheSourceCe qu'elle fournitAuthentification requise
1InternetDBPorts ouverts, CPE, ID CVENon
1IPinfoGéo, FAI, ASN, indicateur anycastNon
1RIPE statPréfixes BGP, titulaire ASN, RIRNon
1RDAPEnregistrement, contacts, serveurs de noms, CIDRNon
2crt.shHistorique des certificats, SAN, chaîne de l'émetteurNon
2HackerTargetDNS passif — IP inversé et recherche d'hôteNon
2RobtexDNS inverse/direct, info ASNon
2URLhausURL de distribution de malwaresABUSECH_KEY
2ThreatFoxBase de données IOCABUSECH_KEY
2MalwareBazaarMétadonnées d'échantillons de malwaresABUSECH_KEY
2Feodo TrackerIP C2 de botnetsNon (téléchargement en masse)
2SSLBLCertificats SSL malveillantsNon (téléchargement en masse)
3NVD + CIRCLDétails CVE, scores CVSS v2/v3NVD_KEY (facultatif)
4GrayHatWarfareBuckets S3/Azure/GCS exposésGRAYHATWARFARE_API_KEY_1..18
4WaybackInstantanés CDX historiquesNon
Source(s)TTL
CVE (NVD/CIRCL)30 jours
Wayback7 jours
BGP, RDAP, Robtex24 heures
crt.sh, HackerTarget passive DNS12 heures
GrayHatWarfare6 heures
InternetDB, IPinfo1 heure
Feodo, SSLBL (bulk)1 heure
URLhaus, ThreatFox, MalwareBazaar30 minutes