Sur un moteur de recherche comme SearXNG, l’analyse des journaux d’accès (logs) permet de distinguer très facilement le comportement d’un véritable utilisateur humain de celui d’un script automatisé (bot).
Voici le décryptage de deux situations réelles capturées en direct sur les logs de mon serveur.
Un être humain interagit en temps réel avec l’interface. Sa navigation génère une suite logique de requêtes qui racontent une histoire. Voici la trace complète d’un utilisateur (dont l’IP a été anonymisée) sur une minute environ.
[28/May/2026:18:14:34 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=app HTTP/1.1" 499
[28/May/2026:18:14:34 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=appl HTTP/1.1" 200
[28/May/2026:18:14:35 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=appli HTTP/1.1" 200
[28/May/2026:18:14:35 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=applic HTTP/1.1" 499
[28/May/2026:18:14:35 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=applica HTTP/1.1" 499
[28/May/2026:18:14:36 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application HTTP/1.1" 499
[28/May/2026:18:14:36 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application HTTP/1.1" 200
[28/May/2026:18:14:36 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application+g HTTP/1.1" 499
[28/May/2026:18:14:37 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application+ges HTTP/1.1" 499
[28/May/2026:18:14:37 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application+gestion HTTP/1.1" 499
[28/May/2026:18:14:38 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application+gestion+s HTTP/1.1" 499
[28/May/2026:18:14:38 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application+gestion+st HTTP/1.1" 499
[28/May/2026:18:14:38 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application+gestion+sto HTTP/1.1" 200
[28/May/2026:18:14:38 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter?q=application+gestion+stoc HTTP/1.1" 200
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /search HTTP/1.1" 200
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /clienta3jiao5xm0fmh64y.css HTTP/1.1" 200
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/sxng-ltr.min.css HTTP/1.1" 304
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/sxng-core.min.js HTTP/1.1" 304
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/chunk/chlzpS6K.min.js HTTP/1.1" 304
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/chunk/DyePpW7L.min.js HTTP/1.1" 304
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/chunk/aUw47Wy0.min.js HTTP/1.1" 304
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/chunk/CQ8vfMdp.min.js HTTP/1.1" 304
[28/May/2026:18:14:40 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/chunk/DH1EQbEY.min.js HTTP/1.1" 304
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/chunk/DGJ63wI6.min.js HTTP/1.1" 304
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /static/themes/simple/chunk/BnP4vIuG.min.js HTTP/1.1" 304
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.odoo.com&h=10b48... HTTP/1.1" 200
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.cartelis.com&h=cec3cd... HTTP/1.1" 200
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=odysseedigitale.fr&h=120c2b... HTTP/1.1" 200
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.gestisoft.com&h=6ab16b... HTTP/1.1" 200
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.capterra.fr&h=893e17... HTTP/1.1" 200
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.appvizer.fr&h=0b8878... HTTP/1.1" 200
[28/May/2026:18:14:41 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.stockpit.app&h=68cb0a... HTTP/1.1" 200
[28/May/2026:18:14:53 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /autocompleter HTTP/1.1" 200
[28/May/2026:18:14:53 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "POST /search HTTP/1.1" 200
[28/May/2026:18:14:54 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /clienta3jiao5xm0fmh64y.css HTTP/1.1" 200
[28/May/2026:18:14:54 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.getapp.fr&h=2d3424... HTTP/1.1" 200
[28/May/2026:18:14:54 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=pdf.wondershare.fr&h=c27584... HTTP/1.1" 200
[28/May/2026:18:14:54 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.apogea.fr&h=67952f... HTTP/1.1" 200
[28/May/2026:18:14:54 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.rollsrapides.com&h=1b42cc... HTTP/1.1" 200
[28/May/2026:18:14:55 +0200] [Client 176.182.xxx.xxx] [yes FR] [searxng.blablalinux.be] "GET /favicon_proxy?authority=www.wiilog.fr&h=749c8f... HTTP/1.1" 200
Quand on regarde ces logs, on y lit l’histoire de ce que l’utilisateur a fait, étape par étape :
Étape 1 : la première recherche (18:14:34 à 18:14:41)
app, appl, appli… puis il ajoute un espace et continue jusqu’à taper application gestion stoc."POST /search HTTP/1.1" 200. La page s’affiche./static/themes/simple...). Les codes 304 indiquent que les fichiers étaient déjà dans le cache de l’utilisateur, ce qui est normal./favicon_proxy), comme Odoo, Capterra ou Stockpit. Il cherchait clairement un logiciel de gestion.Étape 2 : la deuxième recherche (18:14:53 à 18:14:55)
Un robot (bot de scraping, crawler) n’utilise pas d’interface graphique. Il envoie des requêtes directes, massives et standardisées. Il masque souvent son origine géographique réelle derrière un proxy ou un VPN.
[28/May/2026:18:14:26 +0200] [Client 104.22.20.71] [yes US] [searxng.blablalinux.be] "GET /search?q=%E5%85%83%E7%A5%9E6.7%E7%89%88%E6%9C%AC%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E4%B8%8A%E7%BA%BF&engines=bing,duckduckgo HTTP/1.1" 403
&engines=bing,duckduckgo), ce qui est une signature typique des scripts de scraping.[yes US]). Le robot utilise un VPN ou un proxy pour cacher sa vraie source.Bilan : alors qu’un humain consomme des ressources de manière fluide et logique pour afficher une page web, le robot cherche uniquement à extraire des données brutes en un temps record. Une bonne analyse des logs permet de filtrer ces requêtes inutiles et de protéger nos services auto-hébergés.
Auteur : ce guide est proposé par Amaury aka BlablaLinux. Retrouvez l’ensemble de mes services sur blablalinux.be/mes-services-publics/.