425 /home/ray/webserver/knock-overview.html Who's Knocking — repairmanray.com
← repairmanray.com

passive traffic classification · homelab security

The internet knocks
on every door.

Every public IP address gets scanned constantly — WordPress exploit probes, leaked credential hunts, router-botnet checks — none of it personal, all of it automated. This turns that noise into a classified, queryable public record instead of letting it rot in a log file that rotates out after a few days.

Live, classifying every request · running since 2026-07
REQUEST CLASSIFY VERIFIED CRAWLER · 0.3% RESIDENTIAL · 91% VPN / DATACENTER · 1.7% SCANNER · 4.4%
Every request is classified in real time: a self-incriminating path/UA signature wins outright; a crawler claim has to survive real reverse+forward DNS; everything else falls to a hosting-network lookup or, by default, residential.

The problem you already know is there

Any server with a public IP gets probed constantly, whether or not there's anything worth finding — WordPress login paths, leaked .env/.git files, router-botnet exploit strings, all automated, all indifferent to what's actually running. Most self-hosted setups either don't log this at all, or it sits in a file that rotates out in a few days and nobody ever actually reads.

And from the raw log alone, there's no way to tell which of it is a real visitor and which is a bot claiming to be one — a lot of "Googlebot" traffic isn't Google at all.

What it does instead

Every request already lands in this server's own SQLite log; a classifier reads it and sorts each one into scanner, verified_crawler, vpn_datacenter, or residential — a self-incriminating path or user-agent signature wins outright, a search-engine crawler claim has to survive a real reverse-then-forward DNS check, and everything else falls back to a hosting-network lookup before landing on residential by default. Roughly 30 named exploit/scanner signatures are tracked by name, not just counted anonymously.

This is a classifier and a public record, not a firewall — nothing here blocks a single request. It's built to answer "what is this," not to stop it.

56,612requests logged since 2026-07
91%genuinely residential — not bots
$0additional infrastructure cost

That 91% counts collapsed (IP, minute) groups, not raw hits — one 500-request scanner burst in a single minute still counts once, so the real noise-to-signal ratio by raw request count is worse than this figure suggests.

What's actually working right now

A plain status ledger, not a sales sheet — this is what's verified, what's degraded, and what's still open.

Real-time request classificationscanner · verified crawler · VPN/datacenter · residential
Working
Named exploit/scanner signatures~30 patterns tracked by name — wp-admin, git-config, spring-actuator, and more
Working
Spoofed crawler-claim detectionDNS-verified — 27 caught so far, mostly fake "facebookexternalhit"
Working
Attack signature & hosting-network leaderboardsall-time counts, not just a rolling window
Working
Traffic trend charts & live logrepeat-hit collapsing so one noisy IP doesn't drown the feed
Working
Telegram summaryevery 6 hours, one Claude-written overview, not raw counts
Working
Actual blocking (WAF, rate-limiting)deliberately not built — this is observational by design, not a defensive tool
Not built

The same classifier could do more

The hosting/VPN lookup currently runs on a keyword match against ASN names — swapping in GreyNoise's scanner-intent database would give more authoritative labels than a name-string guess. The classification itself is also reusable outside Telegram and the dashboard: nothing stops the same signal from feeding an actual defense later (Cloudflare's managed WAF ruleset, CrowdSec) if that ever becomes the goal — it deliberately isn't today.

Who this is for

Homelab operatorscurious what's actually hitting a public IP
Self-hostersa real answer before panicking over one log line
Security-curious hobbyistssee automated internet noise sorted and counted
Anyone running something publiccontext for their own access logs
"Every server on the internet gets knocked on, all day, by things that don't care what's behind the door. I wanted to actually see who — or what — was doing it, instead of just trusting a log file I was never going to read." — Ray, designer & builder of Who's Knocking