Server traffic

Hack attempts, probes, scrapes, and human visits, 17–30 October 2026

From 17 October 2026 at 00:02 through 30 October 2026, the web server on this machine logged 50,605 requests. Times are the server’s local time, UTC+3. The figures below were taken from the logs as retained just after midnight on 31 October 2026. By then, 13–16 October had rotated off the server, so this count replaces the earlier 13–26 October window. This note estimates how those requests split into probes, hack attempts, scrapes, and human visits.

One combined access log covers every site on the machine: divanov.eu, fourth.expedition.lu, layoffco.in, the stock nginx welcome page, and the redirect from plain HTTP to HTTPS. Each request sits in exactly one class. The four request counts sum to the whole log. Shares are rounded to one decimal place.

Share of all 50,605 logged requests. Shares are rounded to one decimal place and add to 100.1. An address can appear in more than one class, so the address counts overlap.
Class Requests Share Addresses
Probe 41,069 81.2% 1,226
Human-looking visit 3,887 7.7% 947
Scrape 3,029 6.0% 1,181
Hack attempt 2,620 5.2% 146

Probes are about four requests in five. Human-looking visits are 7.7%, scrapes 6.0%, and hack attempts 5.2%. The comparison is in requests, the unit the log records. A person who opens a page, its icon, and a stylesheet contributes one line per fetch, and so does a crawler.

Human visits, more tightly

The 7.7% row is every line whose user agent looked like a browser and whose path was an ordinary page. Inside those 3,887 lines:

  • 535 are the stock nginx welcome page on the default site
  • 733 are the short redirect from HTTP to HTTPS
  • 1,137 are fingerprinted as divanov.eu
  • 728 are fingerprinted as fourth.expedition.lu
  • 86 are fingerprinted as layoffco.in
  • 668 have no site fingerprint

Setting aside the welcome page and the redirect leaves 2,619 requests, 5.2% of the log. Of those, 1,951 (3.9% of the log) are tied to one of the three sites, and 668 stay unnamed.

Scanners copy Chrome, Firefox, and Safari strings. A browser-shaped user agent on a single fetch of the homepage can belong to a person, or to a scanner that asked for nothing else. The 5.2% share is an upper bound on human visits. The 3.9% share is the part of that bound that can be named as one of the three sites. The 668 unnamed lines may include people, and they may include scanners, and the log gives no further way to split them.

Among the human-looking lines the user agent was Chrome on 2,617, Firefox on 529, Chrome on Android on 310, Edge on 206, and Safari on iOS on 150. A Chrome label also sits on 11,837 probe lines, which is why the label on its own is a weak sign of a person.

How a line was classed

The class comes from the request line, the method, the status, the response size, and the user agent. The rules run in this order.

  1. A TLS handshake sent to the HTTP port is a probe. There are 702 such lines. They are bytes on port 80 where an HTTP request would have been.
  2. A hack attempt asks the server to read a file outside the site, run a command, open a known webshell path, accept an oversized body, or relay a connection onward (CONNECT, or SSTP).
  3. A probe asks for a credential file, a hidden repository, a well-known admin console, or it carries a scanner’s own user agent, or a method this server does not serve. A scanner that receives the public homepage stays a probe.
  4. A scrape is a known crawler, or a script client, on an ordinary path. One repeated mobile string, iPhone OS 13.2.3, is counted with the scrapes (631 lines).
  5. A human-looking visit is a normal browser user agent on a real path. A browser-labelled fetch of robots.txt stays in this class (216 lines). Some of those are scanners.
  6. Where one address sent at least eight requests, at least 60% of them probes or hack attempts, and it never fetched a real asset, its remaining human-looking lines were moved to probes.

Requests issued from the server itself while these logs were being measured are omitted. Lines from the Docker bridge address stay in the counts as separate requests. That address is a shared gateway.

The other user-agent piles, briefly. Scrapes include a mixed set of small clients (1,022), curl (193), PetalBot (172), and Googlebot (140), plus the iPhone OS 13.2.3 string above. Probes include Firefox (3,207), an empty user agent (2,860), WebSiphon (1,926), the Ruhr University scanner (1,882), and curl (1,444), along with the spoofed Chrome already mentioned. Hack attempts are mostly libredtail-http (1,291) or an empty user agent (532).

Across the whole log, whatever the class, the targets look like this. 24,809 lines are a path with an empty query string. 13,049 name a credential or source file. 4,125 name a PHP path. 2,518 look like WordPress. 1,941 carry some other query. 1,417 targets are exploit-shaped, and 973 ask for a remote command or a directory traversal. 690 name a known product console. 702 are the TLS handshakes on port 80. 366 are a language query. Thirteen queries are SQL-shaped and two try to place a script in the request. These counts add up to the same 50,605 requests. The class of each line still comes from the rules above.

Hack attempts

Of the 2,620 hack-class lines, 2,000 came back 404, 515 came back 400, 60 came back 301, 29 came back 405, 10 came back 413, and 6 came back 200.

The ten status-413 lines are POST bodies nginx refused as too large, from three addresses. Eight of them, about 1 MB each, are named divanov.eu in the error log. Two of them, about 10 MB each, hit the default server. The access-log size of those responses does not match a site fingerprint, which is why they sit in the unnamed row below.

All six status-200 lines were directory-traversal queries, and the body was a public page. Two received the gzipped divanov.eu homepage (2,341 bytes). Four received the 612-byte welcome page. The server returned that public page and ignored the query.

The paths cluster in a few families: PHPUnit eval-stdin paths, cgi-bin paths that traverse toward a shell, 191 CONNECT requests that try to open an outbound tunnel, 14 SSTP posts, and the oversized POSTs. In the access log, 2,539 of the 2,620 hack-class lines have no site fingerprint. Two are fingerprinted as divanov.eu. The bodies on the classed lines are a public page, a redirect, or an error page.

Which site

The combined log records the request line, the status, the response size, the referrer, and the user agent. The Host header is absent from this format, so the site name is inferred from the path and from a response size that matches one site.

The sizes used as fingerprints are the divanov.eu homepage, both before the articles link (7,953 bytes plain, 2,341 gzip) and after it went up on 27 October (8,323 plain, 2,386 gzip), the layoffco.in homepage (13,573 plain, 4,608 gzip), the fourth.expedition.lu homepage (3,837 plain, 1,581 gzip), the stock welcome page (612 plain, 396 gzip), and the redirect body (178 bytes). Paths under /misc, /img, /articles, and /games.html belong to divanov.eu. Expedition paths such as /programme, /mpa, and a successful /login belong to fourth.expedition.lu. A 162-byte 404 is the same body on more than one static site, so those probes stay unnamed. A 1,939-byte 404 is fourth.expedition.lu answering.

Requests by inferred site. Most probes produce a short generic 404, so they stay in the unnamed row even when they were aimed at one of these names.
Inferred site Requests Human-looking Scrape Probe Hack attempt
Host not recovered 34,131 668 621 30,303 2,539
HTTP to HTTPS redirect 7,392 733 425 6,174 60
divanov.eu 5,050 1,137 994 2,917 2
fourth.expedition.lu 2,220 728 573 907 12
Default welcome page 1,101 535 377 185 4
layoffco.in 711 86 39 583 3

On the lines that can be named as divanov.eu, 2,917 are probes (57.8%), 1,137 are human-looking (22.5%), 994 are scrapes (19.7%), and 2 are hack attempts. That row is the named part. The unnamed row above it is where most probes sit, and many of those were likely aimed here as well. Eight of the oversized POSTs in the error log name divanov.eu, beyond the two hack-class lines the access log can fingerprint.

Browser-like clients that received status 200 on this site, over the same window:

Status 200 on divanov.eu from a browser-like user agent. The articles index and this page went up on 27 October, part-way through the window. Scripted clients fetched the Yin-Yang page 82 times with status 200, against 42 from browser-like clients.
Path Requests Addresses
/img/d-icon.svg 142 94
/misc/yinyang.html 42 11
/games.html 37 27
/misc/CV_eng_hr.pdf 27 22
/misc/noise.html 24 21
/articles/traffic.html 22 6
/articles.html 16 10
/misc/barcode.html 13 9
/misc/names.html 12 9
/misc/swing.html 12 9
/misc/draw.html 12 7

The fourteen days

Human-looking traffic runs from 149 requests on 29 October to 664 on 30 October. Probe traffic peaks on 30 October (5,018), 17 October (4,542), and 20 October (4,245). The shape of the mix is the same on every day in the window: probes first, and the other three classes far behind.

Parsed HTTP lines only. The rows sum to 49,903. Another 702 probes are TLS handshakes on port 80; they sit in the 41,069 probe total and in none of these rows.
Day Human-looking Scrape Probe Hack attempt
17 Oct 518 141 4,542 154
18 Oct 184 165 2,959 162
19 Oct 179 173 2,783 224
20 Oct 185 175 4,245 329
21 Oct 185 167 1,548 241
22 Oct 375 172 2,823 143
23 Oct 324 348 3,064 199
24 Oct 164 239 3,337 111
25 Oct 197 138 2,208 215
26 Oct 235 250 2,352 321
27 Oct 309 246 2,958 180
28 Oct 219 243 1,148 25
29 Oct 149 220 1,382 110
30 Oct 664 352 5,018 206
Parsed total 3,887 3,029 40,367 2,620

What the estimate can support

The headline is the whole machine, for these fourteen days: 81.2% probes, 7.7% human-looking visits, 6.0% scrapes, and 5.2% hack attempts. The human-looking share is the upper bound from the rules above. 5.2% is that bound after the welcome page and the redirect hop are set aside. 3.9% is the part tied to a named site. Methods are mostly ordinary: 47,676 of the lines are GET and 1,495 are POST, with HEAD, CONNECT, the TLS handshakes, and a few odd verbs making up the rest.

A careful scanner and a person can send the same browser-labelled GET for /. Where that happens, the line is counted with the human-looking visits, and the true share of people is lower than 5.2%. Where a hack-class body was identified, it was a public page, a redirect, or an error page.

← Back to Articles and statistics