Windows

Convert ETL to PCAP on Windows with pktmon

Updated ยท Every command run or checked against its tool's documentation

Free uploads create public reports. Use only sanitized captures; choose private analysis for sensitive traffic.

Windows 10 and 11 come with a packet capture tool that most admins never open: Packet Monitor, pktmon. It needs no Wireshark, no Npcap driver and no reboot, which matters on a server where you may not install software. It writes its own ETL log, though, and analyzers read PCAP and PCAPNG. Here is how to record with pktmon, convert ETL to PCAP format with the built-in etl2pcap command (the result is PCAPNG, which A-Packets reads), and avoid the two defaults that quietly spoil a Windows capture.

A-Packets Data Overview of a Windows host capture, with a count per view in the sidebar
What a Windows host's capture turns into: the Data Overview of the 2026-02-03 GuLoader sample from malware-traffic-analysis.net, with one credential, four DNS entries and ten connections counted in the sidebar.

Start a capture that keeps whole packets

Open PowerShell or Command Prompt as Administrator and start the capture with three options set on purpose:

pktmon start --capture --comp nics --pkt-size 0 --file-name C:\captures\issue.etl

--pkt-size 0 is the one people miss. By default pktmon logs only the first 128 bytes of every packet: enough for addresses and ports, not for an HTTP body, a login or a file. Zero logs the whole packet. --comp nics records at the network adapters only. Without it pktmon records at every component of the network stack it watches, and the converted file gets the same packet several times. --file-name puts the log where you can find it; otherwise it lands as PktMon.etl in the current folder. Reproduce the problem while the capture runs, then stop it.

Filter before you start, not after

A capture without filters records everything the adapter sees, which is fine for a short reproduction on a quiet host. On a busy server, add filters first. Each filter names conditions that a packet must match, and pktmon keeps a packet that matches any of the filters you added:

pktmon filter add web -i 10.0.0.5 -p 443
pktmon filter add dns -p 53
pktmon filter list

Two values in one filter work differently: -i 10.0.0.5 10.0.0.9 matches only packets that carry both addresses, in either direction, which is how you keep one conversation. -t TCP narrows a filter to a protocol. Filters stay until you clear them with pktmon filter remove, so check pktmon filter list before the next capture, or it will miss traffic you meant to keep.

Stop and convert the ETL log to PCAPNG

pktmon stop
pktmon etl2pcap C:\captures\issue.etl --out C:\captures\issue.pcapng

etl2pcap writes a PCAPNG file and leaves the ETL log as it was, so you can convert it again with other options. Two of them matter. Packets that Windows dropped are left out unless you ask for them: --drop-only writes a second file with just the drops, which helps when the complaint is a firewall or a filter driver eating traffic. And when the capture ran on every component, pktmon list -a shows the component IDs and --component-id converts only one of them, which is the cure for duplicate packets in a capture that is already done.

Keep a long capture from overwriting itself

The ETL log has a size cap of 512 MB and runs in circular mode by default: when it is full, new packets overwrite the oldest ones. For an intermittent fault that may take hours to come back, that means the evidence can be gone by the time you stop. Switch to a series of files instead:

pktmon start --capture --comp nics --pkt-size 0 --file-name C:\captures\long.etl --file-size 200 --log-mode multi-file

--file-size is in megabytes. In multi-file mode pktmon starts a new log each time one is full and keeps the older ones, so convert only the log that covers the moment of the fault.

Check the file, then upload it

The PCAPNG from etl2pcap is an ordinary capture file: Wireshark opens it, capinfos gives its packet count and time span, and A-Packets analyzes it. Public analysis takes files up to 25 MB; Professional and Advanced plans take 50 and 100 MB. A busy server fills that quickly, so split the large PCAP to the host or time window you need. A capture from a production server also holds internal addresses, host names and often logins, and a free report is public, so sanitize the PCAP first or analyze it in a private report. The report opens on the Data Overview, as in the picture above, with a count for each view that has something to show.

pktmon and ETL questions

Can A-Packets open the ETL file pktmon writes?
No. A-Packets reads .pcap and .pcapng files, so convert the log with pktmon etl2pcap first. The ETL file stays as it was, and you can convert it again with other options.
Why does every packet appear several times in my PCAPNG?
pktmon recorded each packet at more than one component of the network stack, and PCAPNG keeps no note of which. Capture with --comp nics next time, or convert one component of the existing log with etl2pcap --component-id.
Does pktmon need Wireshark or Npcap?
No. Packet Monitor is part of Windows and writes its own ETL log. Wireshark, tshark and A-Packets are only readers of the PCAPNG file you convert it to.