“Puis-je identifier les bots par leur IP ?” est l'une des questions les plus fréquentes que l'on nous pose au sujet du filtrage côté serveur. La réponse honnête est : l'IP à elle seule est un point de départ, pas un verdict — mais combinée à quelques signaux bien choisis, elle devient fiable. sgcWebSockets 2026.6 ajoute un nouveau module de détection de bots au composant TsgcWebSocketFirewall qui fait exactement cela, en classifiant chaque IP qui se connecte à l'aide de quatre signaux indépendants.
La détection de bots vient compléter les fonctionnalités du pare-feu que vous connaissez déjà — liste noire / liste blanche, GeoIP, force brute, limitation de débit, notation des menaces — et suit la même conception basée sur les propriétés du composant. Cet article explique comment elle fonctionne et comment la mettre en place.
Quatre signaux, une classification
Le module évalue chaque IP par rapport à quatre signaux indépendants et en déduit une seule valeur TsgcBotClassification :
- Plages d'IP de bots connus — faites correspondre l'IP aux plages de robots d'indexation publiées (Googlebot, Bingbot, GPTBot, ClaudeBot…) chargées depuis un fichier CIDR. Une correspondance signifie un robot d'indexation authentique et déclaré.
- Détection de centre de données / hébergement — signalez les IP qui appartiennent aux plages de fournisseurs cloud et VPS (AWS, Hetzner, OVH…). Les utilisateurs réels se connectent rarement depuis des ASN de centres de données ; le trafic automatisé, lui, le fait très souvent.
- Reverse DNS confirmé en aval (FCrDNS) — effectuez une recherche PTR sur l'IP, puis confirmez en aval que le nom d'hôte obtenu renvoie bien vers la même IP. C'est le seul moyen fiable de distinguer un vrai Googlebot de tout ce qui prétend simplement en être un dans un en-tête.
- Réputation DNSBL — interrogez les listes de blocage DNS (Spamhaus et autres) pour les IP ayant un historique d'abus connu.
Le résultat est l'une des six valeurs suivantes :
TsgcBotClassification = (bcUnknown, bcVerifiedCrawler, bcDatacenter,
bcSuspectedBot, bcBlocklisted, bcHuman);
La détection basée uniquement sur l'IP a de vraies limites — les adresses sont partagées derrière le CGNAT, elles changent, et les bots sophistiqués se cachent dans des pools de proxys résidentiels. La détection de bots est donc conçue pour vous donner un bon score de première passe, pas une vérité absolue. C'est pourquoi, de par sa conception, elle ne bloque jamais une connexion d'elle-même.
Activer la détection de bots
Tout se trouve sous la nouvelle propriété BotDetection. Activez les signaux que vous souhaitez et pointez ceux basés sur des fichiers vers leurs données :
uses
sgcWebSocket_Server_Firewall;
var
oFirewall: TsgcWebSocketFirewall;
begin
oFirewall := TsgcWebSocketFirewall.Create(nil);
oFirewall.BotDetection.Enabled := True;
// 1. Verified crawler IP ranges (file lines: CIDR,botname)
oFirewall.BotDetection.KnownBotsFile := 'C:\firewall\known-bots.csv';
// 2. Datacenter / hosting ranges (file lines: CIDR,asn-name)
oFirewall.BotDetection.Datacenter.Enabled := True;
oFirewall.BotDetection.Datacenter.ASNFile := 'C:\firewall\datacenter-ranges.csv';
// 3. Forward-confirmed reverse DNS verification
oFirewall.BotDetection.ReverseDNS.Enabled := True;
// 4. DNSBL reputation lookups
oFirewall.BotDetection.DNSBL.Enabled := True;
oFirewall.BotDetection.DNSBL.Zones.Add('zen.spamhaus.org');
// Resolution tuning
oFirewall.BotDetection.CacheDurationSec := 3600; // cache a verdict for 1h
oFirewall.BotDetection.DNSTimeoutMS := 2000;
oServer.Firewall := oFirewall;
end;
Les deux signaux basés sur des fichiers réutilisent le même moteur CIDR rapide et à recherche binaire qui alimente la base de données GeoIP du pare-feu, de sorte que même de grandes listes de plages se résolvent en microsecondes.
Le reverse DNS et le DNSBL ne bloquent jamais le thread d'acceptation
Le reverse DNS et le DNSBL sont des requêtes DNS en direct — les exécuter en ligne sur le thread d'acceptation des connexions reviendrait à provoquer un déni de service auto-infligé. À la place, la détection de bots les résout sur un thread de travail en arrière-plan et sert chaque classification depuis un cache. En cas d'absence dans le cache, l'IP est mise en file d'attente pour résolution et l'appel en cours renvoie immédiatement bcUnknown ; lorsque la recherche se termine, le cache est mis à jour et l'événement OnBotDetected se déclenche. La propriété CacheDurationSec contrôle la durée pendant laquelle un verdict est réutilisé avant que l'IP ne soit revérifiée.
Classification seule : OnBotDetected
La détection de bots se contente de classifier. Elle ne refuse jamais une connexion d'elle-même — elle déclenche un événement, met à jour les statistiques du pare-feu (un nouveau compteur fvBot) et vous laisse la décision de politique. Cela évite qu'un robot d'indexation vérifié mal classé soit rejeté silencieusement.
procedure TForm1.FirewallBotDetected(Sender: TObject; const aIP: string;
aClassification: TsgcBotClassification; const aBotName: string);
begin
case aClassification of
bcVerifiedCrawler:
DoLog(aIP + ' is a verified crawler: ' + aBotName);
bcDatacenter:
DoLog(aIP + ' originates from a datacenter / hosting range');
bcBlocklisted:
DoLog(aIP + ' is listed on a DNSBL');
end;
end;
Vous pouvez aussi demander un verdict à tout moment avec GetBotClassification — pratique pour adapter une réponse plutôt que pour filtrer une connexion :
if oFirewall.GetBotClassification(vClientIP) = bcVerifiedCrawler then
// serve a lightweight, cache-friendly variant to the crawler
ServeStaticSnapshot
else
ServeFullApp;
Agir sur un verdict : le moteur de règles personnalisées
Lorsque vous voulez bloquer, vous le faites explicitement via le moteur de règles personnalisées existant du pare-feu. Chaque TsgcFirewallRuleItem gagne une nouvelle propriété BotType : définissez-la, et la règle correspond aux connexions dont la classification est égale à cette valeur. Vous pouvez alors les refuser, les bannir ou les journaliser — en réutilisant toute la mécanique de règles que vous possédez déjà.
var
oRule: TsgcFirewallRuleItem;
begin
oFirewall.CustomRules.Enabled := True;
// Ban any IP listed on a DNSBL for one hour
oRule := oFirewall.CustomRules.Rules.Add as TsgcFirewallRuleItem;
oRule.Name := 'ban-blocklisted-bots';
oRule.BotType := bcBlocklisted;
oRule.ActionType := raBan;
oRule.BanDurationSec := 3600;
end;
Cette séparation — classification passive dans le module de détection de bots, application active uniquement via une règle que vous écrivez — signifie que la fonctionnalité ne pourra jamais vous surprendre en bloquant du trafic que vous vouliez conserver.
Apportez votre propre verdict : OnResolveBot
Si vous exploitez déjà un service de renseignement sur les menaces, un cache de réputation interne ou un flux commercial d'atténuation de bots, affectez l'événement OnResolveBot. Lorsqu'il est défini, votre gestionnaire fournit le verdict et le résolveur intégré s'efface — le même modèle de remplacement que le pare-feu utilise déjà pour le OnResolveCountry de GeoIP.
procedure TForm1.FirewallResolveBot(Sender: TObject; const aIP: string;
var aClassification: TsgcBotClassification; var aBotName: string);
begin
// Consult your own threat feed instead of the built-in resolver
if MyThreatFeed.IsMaliciousBot(aIP) then
begin
aClassification := bcBlocklisted;
aBotName := 'internal-threat-feed';
end;
end;
Démo
La démo Firewall dans Demos\04.WebSocket_Other_Samples\13.Firewall dispose d'un nouvel onglet Bot Detection où vous pouvez activer chaque signal, charger les fichiers de plages de bots connus et de centres de données, configurer les zones DNSBL et utiliser un testeur “Classify IP” en direct pour voir le verdict de n'importe quelle adresse — chaque classification étant diffusée vers le journal d'événements.
Disponibilité
La détection de bots est livrée avec sgcWebSockets 2026.6 et constitue un ajout transparent : la propriété BotDetection est désactivée par défaut, de sorte que les projets existants ne sont pas affectés tant que vous ne l'activez pas. La fonctionnalité est disponible pour Delphi (7 à 13), C++Builder et l'édition .NET.
Les clients disposant d'un abonnement actif peuvent télécharger la nouvelle version depuis l'espace client. Les utilisateurs de la version d'essai peuvent récupérer le programme d'installation mis à jour sur esegece.com/products/websockets/download.
Des questions, des commentaires ou besoin d'aide pour la migration ? Contactez-nous — vous recevrez une réponse des personnes qui ont écrit le code.
