Cocoa Packet Analyzer

A native macOS packet analyzer.

PCAP capture, plugin-based protocol dissection, and macOS-native UI — fully rewritten in Swift.

Universal binary · macOS 26 or later · notarized

CocoaPacketAnalyzer main window
Features

Built for the way you analyze.

Capture

Capture network traffic using Ethernet or Wi-Fi interfaces.

Analyze

A variety of network protocol analyzers to display and filter your trace files are included.

QuickLook

Preview packet traces in Finder - a QuickLook extension is included just for it.

Enhance

Creating analyzer plugins using the Cocoa bundles plugin technology should be straightforward.

Dark Mode

Supporting all appearance modes of macOS.

Print

Bring your traces to paper.

Notarized

Releases are notarized by Apple. Beta builds might not be.

Localization

English, German and basic Japanese localizations are included.

TLS / HTTPS

Dissect the TLS handshake and certificates, and decrypt TLS 1.2 / 1.3 traffic with an SSLKEYLOGFILE.

MITM Proxy

A built-in HTTPS proxy with a live flow inspector so decryption just works — no key-log file required.

pcapng

Read and write the modern pcapng format, with per-packet comments and embedded TLS decryption secrets.

TLS Keys

See every TLS session in a trace, which ones decrypt, and exactly why the others do not.

Screens

From capture to conversation.

Settings

Tuned to how you work.

Capture settings with buffer and snaplen dials, mode switches, and a BPF filter field

Capture

Buffer and snaplen are dials rather than sliders, so the value you are about to capture with is readable at a glance instead of inferred from a knob position. Around them sit the interface picker, the file-or-live mode switch, monitor and promiscuous mode, the menu bar extra, and Decrypt HTTPS.

The capture filter lives at the bottom with its Build… button. Whatever you type is compiled before the daemon is asked to capture anything, so a malformed expression fails here rather than halfway through a session.

Analyzer settings pane with inline options, ports, and a colour well

Analyzers

Pick a protocol analyzer and its settings appear beside it — no nested sheet to open and dismiss. Each plugin declares what it offers, so the pane builds itself: name resolution, checksum verification, credential masking, HTTP/2 detection, and whatever else that protocol supports.

The Ports table decides which traffic reaches the analyzer at all, and the colour well beside Packet coloring sets the shade that protocol wears in the packet list. Reset restores one analyzer’s defaults without touching the rest.

General settings with Light, Dark and Auto appearance tiles, time zone, and update options

General

Three tiles for appearance — Light, Dark, or Auto to follow macOS. Every window is drawn for both, so neither is the afterthought.

Packet traces carry no time zone of their own, so timestamps default to yours; pick a different one and the whole trace re-reads in it. Update checks are opt-in, and so is the anonymous system profile that comes with them.

Font settings listing the six interface surfaces and their typefaces

Fonts

Six surfaces, six independent choices: the packet list, the hex and stream console, the protocol detail tree, the statistics chart, and both halves of the Data Sources list.

The console setting reaches everywhere raw bytes and reconstructed streams are shown, so Follow TCP Stream, Follow UDP Flow and the Subscriber Session Inspector all follow it.

MITM Proxy settings showing the system-wide proxy switch, listen port, and root CA trust status

MITM Proxy

One switch routes your Mac’s HTTP and HTTPS through Cocoa Packet Analyzer, and one field sets the port it listens on. Turning it off puts your previous proxy configuration back the way it was.

Beside them, the root certificate reports its own SHA-256 fingerprint and whether macOS currently trusts it, with the trust, untrust and export actions in the gear menu. Decryption either works or tells you which of these two things is missing. Direct-download builds only.

Downloads

Get CocoaPacketAnalyzer.

Version 3.0.0

The latest release. Universal binary.

Requires macOS 26 or later. Adds the TLS Keys window — every TLS session in a trace, which ones decrypt, and the reason the others do not. Saving now writes the format you asked for, fixing a case where a .pcapng was rewritten as pcap and lost its embedded keys, and the save panel gained a format picker. Rebuilt progress reporting so long reads, exports and filters show real progress and cancel cleanly. On top of 2.6.0's TLS / HTTPS analyzer, built-in MITM proxy with a live flow inspector, and native pcapng read & write.

CPAPluginSDK 3.0.0

Single-import Swift SDK for writing .cpaplugin protocol analyzers. Analyzer settings are now declarative — declare your packet coloring, options and ports, and the app renders the pane for you under Settings ▸ Analyzers, matching the built-in analyzers. Includes DocC documentation and an NTP analyzer sample (XCFramework workflow). Requires CPA 3.0.0+.

Version 2.1.4

Previous release. Universal binary.

For Macs running macOS 10.14.6 – 15.7.4. Not compatible with macOS 26.

Version 1.90

Legacy build. Requires Intel Mac running macOS 10.12 or higher.

Version 1.51

Legacy build for older macOS releases.

Version 1.11

Legacy build for the oldest supported macOS.

FAQ

Frequently asked questions.

The ethernet and wifi interfaces that come with your Mac should just work fine!

Ethertypes: ARP, IP (v4/v6), PPP, PPPoED/S, 802.1Q VLAN, MPLS

Linktypes: Loopback, PPP, LinuxSLL, IEEE802.11-RadioTap

Analyzer plugIns for the following protocols are included:

Link & framing: Ethernet, ARP, 802.1Q VLAN, MPLS, PPP, PPPoE (Discovery & Session), LinuxSLL, IEEE 802.11 RadioTap, Loopback

Network: IP (v4/v6), ICMP (v4/v6), IGMP, OSPF, Mobility, ESP

Transport & tunneling: TCP, UDP, L2TP, MPLS-in-IP

PPP control: LCP, IPCP (v4/v6), CCP, PAP, CHAP

Application: HTTP, WebSocket, DNS, DHCP (v4/v6), FTP, SMTP, POP3, IMAP, NNTP, SSH, Telnet, SIP, IAX, SNMP, LDAP, BGP, RADIUS, SMB, SOAP, Hotline

Promiscuous mode can be enabled in the capture preferences. Most interfaces in Apple Computers should support it.

Monitor mode allows packets to be captured without having to associate with an access point or ad hoc network first. Monitor mode only applies to wireless networks. Not all wifi interfaces support it. It can be enabled in the capture preferences.

Monitor and promiscuous mode wont work if both are enabled.

Captured HTTPS is encrypted. From the packets alone you can see that your Mac talked to a host, when, and how much — but not a word of what was said. That is HTTPS working as intended, and no amount of analysis undoes it after the fact.

The proxy solves it by standing in the middle, with your permission. It runs locally, mints its own certificate authority, and asks macOS to route your web traffic through it. To your browser it looks like the far end; to the far end it looks like your browser. Because it terminates each connection itself, it holds the keys — so it can show you every request and response as plain text, and hand those keys to the analyzer so your captured packets decrypt too.

“MITM” is man-in-the-middle, normally the name of an attack. This is the same technique aimed at your own machine, and only while you switch it on: you have to trust its certificate, your previous proxy settings are restored when you stop, and nothing leaves your Mac. While it is running it can read the HTTPS of every app that uses the system proxy — so turn it off when you are done, and only inspect traffic you are entitled to.

Part of the direct-download build. The Mac App Store sandbox does not permit it.

A key log is a small text file that writes down the secret each encrypted connection used, so a capture can be read afterwards.

When a browser opens an HTTPS connection it negotiates a fresh secret with the server. Nobody watching the wire can work it out — that is the whole design. But both ends know it, and either end is free to write it down. A key log is exactly that: one line per session, linking a connection to its secret. Most browsers will produce one if you set the SSLKEYLOGFILE environment variable before launching them.

Point Cocoa Packet Analyzer at that file and the matching sessions decrypt — a capture you recorded weeks ago suddenly reads as ordinary requests and replies. The packets never change; you have simply supplied the missing piece.

Keys reach CPA three ways: the proxy records them automatically while it runs, you can choose a key log yourself in Settings › Analyzer › TLS Analyzer, and a pcapng file can carry its keys inside the trace — so a keyed capture stays readable when you archive it or send it to a colleague.

Keys are as sensitive as the traffic they open. CPA keeps them in a key store tied to the trace they belong to, and the TLS Keys window lists every session in a capture, which ones decrypt, and for the rest, plainly why not.

No. The proxy is the convenient route — switch it on, capture, and decryption just happens — but it is not the only one.

If you already have a key log, or a pcapng trace that carries its own keys, CPA decrypts from those alone. That matters for traffic the proxy could never sit in front of: a capture from another machine, a trace a colleague sent you, or an app that ignores the system proxy setting.

It also matters on the Mac App Store, where the sandbox rules the proxy out entirely. That edition still decrypts — from a key log you choose, or from a keyed pcapng.

Download the CPAPluginSDK above. The SamplePlugIn/CPAPluginSDK.docc/ catalog contains a step-by-step walkthrough (WritingYourFirstPlugin, ProtocolContract, ThreadingModel, DistributingYourPlugin), and the included NTPAnalyzer-XCF Xcode project shows a complete working analyzer you can build and ship as a .cpaplugin bundle. Questions welcome — feel free to reach out.

Yes — CocoaPacketAnalyzer 2.5.0 requires macOS 26 or later. Earlier systems (macOS 10.14.6 – 15.7.4) can stay on 2.1.4.