Port 9091 is shared by Transmission BitTorrent web UI and Prometheus Pushgateway. Transmission on 9091 provides torrent management via browser. Pushgateway on 9091 accepts metrics from batch jobs. Both require authentication – Pushgateway without auth allows metric injection that corrupts monitoring and triggers false alerts.
Port Number
9091
Protocol
TCP
Service
Transmission Web UI / Pushgateway
Range
IANA Registered (1024–49151)
Test if Transmission RPC is responding (409 = needs session header, 401 = auth required)
curl -s http://localhost:9091/transmission/rpc -o /dev/null -w '%{http_code}'Test if Pushgateway is responding and see pushed metrics
curl -s http://localhost:9091/metrics | head -10Pushgateway: list all job labels that have pushed metrics (detect unauthorized pushers)
curl -s http://localhost:9091/api/v1/metrics | jq '.[] | .labels.job' | sort -uIdentify which service owns port 9091 (Transmission vs Pushgateway)
ss -tnlp sport = :9091transmission-remote localhost:9091 -l (list torrents)
curl -X POST http://pushgateway:9091/metrics/job/batch -d 'metric 42'
curl http://pushgateway:9091/metrics (view pushed metrics)Transmission has used port 9091 for its RPC/web interface since version 1.30 (2008). Prometheus Pushgateway adopted the same port (configurable via --web.listen-address) when first released in 2014. The collision means identifying which service runs on 9091 requires checking the HTTP response. Transmission's DNS rebinding vulnerability (2018) was notable because it proved local-only services are not safe from web-based attacks.
How do I tell if port 9091 is Transmission or Pushgateway?
curl http://localhost:9091/ – Transmission returns a redirect to /transmission/web/ or a 409 with X-Transmission-Session-Id header. Pushgateway returns an HTML page with 'Prometheus Pushgateway' title and a /metrics link. Alternatively: ss -tnlp sport = :9091 shows the process name.
How do I add authentication to Prometheus Pushgateway?
Pushgateway has no built-in auth. Options: (1) nginx reverse proxy with basic_auth (simplest), (2) oauth2-proxy sidecar in Kubernetes, (3) --web.config.file with TLS and basic_auth (Pushgateway 1.5+ supports web.yml like Prometheus). Also restrict at network level – only batch job hosts and Prometheus should reach 9091.