You might run into some scenarios where you need to inspect the content of an HTTP request,
or just a placeholder HTTP server for tests / development,
or even just a honeypot to intercept some internet traffic for analysis.

In some cases, you can just use a utility like netcat or python3 -m http.server 8000 to quickly spin up an HTTP server for request interception.
But I found that a dedicated honeypot is a better fit for this job.

Beelzebub is a low-code-configuration honeypot that can host SSH/HTTP servers and behave however you configure it.

Setup and configuration

You can spin it up with docker compose like this.

Folder structure

----- beelzebub
|  |-- configurations
|  | |--services
|  |   |--service-you-want-to-spin.yaml
|  |-- beelzebub.yaml
|-- docker-compose.yml

You can use the sample configurations/beelzebub.yaml
and docker-compose.yml as is.

In this example, I will construct a “catch-all HTTP honeypot server” in configurations/services/service-you-want-to-spin.yaml.

apiVersion: "v1"
protocol: "http"
address: ":8080"
description: "Catch All point"
commands:
  - regex: ".*"
    statusCode: 200

And that’s enough to spin up a honeypot that catches all HTTP requests.

When I send a curl request to the honeypot:

$ curl http://localhost:8080 -X POST -d “hello this is a payload”

I can inspect the request by checking the Beelzebub docker logs.

{
  "event": {
    "DateTime": "2025-11-22T15:13:51Z",
    "RemoteAddr": "172.22.0.1:41728",
    "Protocol": "HTTP",
    "Command": "",
    "CommandOutput": "",
    "Status": "Stateless",
    "Msg": "HTTP New request",
    "ID": "9cfaafdd-4b96-4180-bee3-7e5a93e1c469",
    "Environ": "",
    "User": "",
    "Password": "",
    "Client": "",
    "Headers": "[Key: User-Agent, values: curl/8.5.0],[Key: Accept, values: */*],[Key: Content-Length, values: 23],[Key: Content-Type, values: application/x-www-form-urlencoded],",
    "HeadersMap": {
      "Accept": [
        "*/*"
      ],
      "Content-Length": [
        "23"
      ],
      "Content-Type": [
        "application/x-www-form-urlencoded"
      ],
      "User-Agent": [
        "curl/8.5.0"
      ]
    },
    "Cookies": "",
    "UserAgent": "curl/8.5.0",
    "HostHTTPRequest": "localhost:8080",
    "Body": "hello this is a payload",
    "HTTPMethod": "POST",
    "RequestURI": "/",
    "Description": "Catch All point",
    "SourceIp": "172.22.0.1",
    "SourcePort": "41728",
    "TLSServerName": "",
    "Handler": ""
  },
  "level": "info",
  "msg": "New Event",
  "status": "Stateless"
}