# WHATPORT(8009)

## NAME

port 8009 — Google Cast (Chromecast) control — or Tomcat AJP — On a home network this is a Chromecast's TLS control channel; in a datacenter it is far more likely Tomcat's AJP connector.

Protocol: TCP  
IANA: nvme-disc

## DESCRIPTION

Chromecast and Google Cast-enabled devices (Nest Hub, Android TV, cast-capable TVs) listen on TCP 8009 for the CASTV2 protocol — protobuf messages inside TLS, with the device presenting a Google-issued client certificate. The same port number is the conventional default for Apache Tomcat's AJP connector, which fronts Tomcat from httpd or nginx, so context decides which one you found. IANA itself assigns 8009/tcp to nvme-disc (NVMe over Fabrics Discovery), which is a third possibility on storage networks.

## EXPOSURE

**Do not expose.** The Cast control channel does no user authentication — anyone who can reach it can launch and control playback — and exposed Tomcat AJP is how CVE-2020-1938 (Ghostcat) reads files out of the webapp.

## CHECK

```sh
openssl s_client -connect TARGET:8009 </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer
```

## SEE ALSO

- iana — [IANA port registry — 8009](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=8009) (iana.org)
- source — [home-assistant-libs/pychromecast — CASTV2 client (shows port=8009)](https://github.com/home-assistant-libs/pychromecast) (github.com)
- docs — [Apache Tomcat 9 — The AJP Connector](https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html) (tomcat.apache.org)
- docs — [Chromium — media_sink_internal.h ("Default Cast control port", kCastControlPort = 8009)](https://chromium.googlesource.com/chromium/src/+/HEAD/components/media_router/common/discovery/media_sink_internal.h) (chromium.googlesource.com)

---

HTML: <https://whatport.net/8009/> · JSON: <https://whatport.net/8009.json> · full dataset: <https://whatport.net/ports.json>
