Wireshark IEC 60870-5-104 Decoding — Analyze SCADA Communication in Depth

By | October 31, 2025

Wireshark is the go-to tool for analyzing communication protocols — and it fully supports IEC 60870-5-104 (commonly known as IEC 104).

Whether you’re diagnosing network issues, validating SCADA data, or learning how IEC 104 works, Wireshark provides an unmatched level of visibility into the protocol’s Ethernet, TCP, and ASDU layers.

This guide shows you how to capture, decode, and interpret IEC 104 frames step by step.

What Is IEC 60870-5-104?

IEC 104 is a standard protocol used for telecontrol and SCADA communication over Ethernet and TCP/IP.

It is widely deployed in power automation, energy management, and industrial control systems to exchange real-time data between control centers, RTUs, and IEDs.

Wireshark can decode all key components of IEC 104 frames:

  • APCI headers
  • ASDU messages
  • CP56Time2a timestamps
  • Command and event flows

Setting Up Wireshark for IEC 104 Analysis

Step 1: Install Wireshark

Download the latest version from wireshark.org.

Ensure the IEC 104 dissector is enabled by default (included in versions ≥ 2.6).

Step 2: Start Packet Capture

  1. Select the correct Ethernet interface connected to your SCADA network or test setup.
  2. Apply the capture filter:
tcp port 2404
Apply the capture filter for IEC 104 in Wireshark
Apply the capture filter for IEC 104 in Wireshark

This isolates IEC 104 traffic, which always uses TCP port 2404 by default.

Step 3: Stop and Save the Capture

Once you have a few seconds of communication (start/stop frames, ASDUs, etc.), stop the capture and save the .pcap file for analysis.

Understanding IEC 104 Frame Structure in Wireshark

Each IEC 104 frame (APDU) decoded by Wireshark typically includes three major parts:

  1. Ethernet Header → Source & destination MAC addresses
  2. TCP Segment → Connection details (source/destination IP, port 2404)
  3. IEC 104 Protocol Layer → The actual SCADA data

Example Breakdown in Wireshark:

IEC 60870-5-104 APDU
Start: 0x68
Length: 15
Control Field: 0x00000000
Type: I-format
Send Sequence: 36
Receive Sequence: 20
ASDU Type ID: 45 (Single-point information)
Cause of Transmission: 3 (Spontaneous)
ASDU Address: 1
Information Object Address: 100
Information Element: ON (1)
Timestamp: 2025-10-30 14:15:12.987 (CP56Time2a)

Common IEC 104 Frame Types Seen in Wireshark

Frame TypeDescriptionWireshark Display
I-format (Information)Carries data (ASDUs)I-format frame
S-format (Supervisory)Acknowledges received framesS-format frame
U-format (Control)Start/Stop/Test framesSTARTDT ACT/CON, STOPDT ACT/CON, TESTFR ACT/CON

Use these frame types to interpret session states and verify link health.

Useful Display Filters for IEC 104 in Wireshark

Here are the most helpful filters to narrow down IEC 104 traffic:

PurposeWireshark Filter
Show all IEC 104 framestcp.port == 2404 or tcp.srcport == 2404
Show only I-format framesiec60870_104.type == 0x00000000
Show only S-format framesiec60870_104.type == 0x00000001
Show only U-format framesiec60870_104.type == 0x00000003
Filter by ASDU Type IDiec60870_asdu.typeid == 30
Filter by Cause of Transmissioniec60870_asdu.causetx == 3
Filter by Common Addressiec60870_asdu.addr == 1
Filter timestamped eventsiec60870_asdu.cp56time == "2025-10-31 09:51:19.286000000+0100"

Combine filters for precise troubleshooting, e.g.:

tcp.port == 2404 && iec60870_asdu.typeid == 30 && iec60870_asdu.causetx == 3
Combine Filters for IEC 104 in Wireshark
Combine Filters for IEC 104 in Wireshark

ASDU Type IDs in IEC 60870-5-104

In Wireshark, the ASDU Type ID identifies what kind of process information is being transmitted — such as measurements, events, or commands.

Each type has a specific structure defined in IEC 60870-5-101/104 Communication Protocol.

Wireshark automatically decodes these Type IDs and displays them under the “IEC 60870-5-104 ASDU” tree.

Here’s a reference list of the most commonly used Type IDs you’ll encounter during IEC 104 packet analysis:

Type IDASDU NameDescription / Usage
1M_SP_NA_1Single-point information (no timestamp)
2M_SP_TA_1Single-point with CP24Time2a timestamp
3M_DP_NA_1Double-point information (no timestamp)
4M_DP_TA_1Double-point with timestamp
5M_ST_NA_1Step position information
9M_ME_NA_1Measured value, normalized
11M_ME_NC_1Measured value, short floating point
13M_IT_NA_1Integrated totals (counters)
30M_SP_TB_1Single-point with CP56Time2a timestamp
31M_DP_TB_1Double-point with CP56Time2a timestamp
32M_ST_TB_1Step position with CP56Time2a timestamp
34M_ME_TB_1Measured value (normalized, CP56Time2a)
36M_ME_TD_1Measured value (short float, CP56Time2a)
37M_IT_TB_1Integrated totals with timestamp
45C_SC_NA_1Single command (control direction)
46C_DC_NA_1Double command
47C_RC_NA_1Regulating step command
58C_SC_TA_1Single command with timestamp
70M_EI_NA_1End of initialization
100C_IC_NA_1Interrogation command
103C_CS_NA_1Clock synchronization command
104C_TS_TA_1Test command
120F_FR_NA_1File ready / file transfer initiation
121F_SR_NA_1Section ready
122F_SC_NA_1Segment command
123F_LS_NA_1Last segment
124F_AF_NA_1File activation

Cause of Transmission (COT) in IEC 60870-5-104

Every ASDU in IEC 104 contains a field called the Cause of Transmission (COT) — a critical part of the protocol that tells why a message was sent.

In Wireshark, this field appears immediately after the Type ID inside the ASDU and helps identify the origin, purpose, and flow of the data.

What Is the Cause of Transmission?

The COT describes the reason for sending the ASDU — for example, whether it’s a spontaneous event, a response to a command, or part of initialization.
It also includes two flag bits:

  • P/N (Positive/Negative Confirmation Bit) — Indicates success or failure of a command or response.
  • T (Test Bit) — Used for test frames.

Common COT Values and Meanings

COT Code (Decimal)MnemonicMeaningTypical Direction
1PER / Periodic / CyclicCyclic transmission of data (polling cycle).Monitor (Slave → Master)
2BG / Background ScanBackground integrity transmission.Monitor
3SP / SpontaneousEvent-driven data change.Monitor
4IQ / InitializationSent after power-up or reset.Monitor
5REQ / Request / ActivationCommand activation request.Control (Master → Slave)
6ACTCON / Activation ConfirmationAcknowledgment of command reception.Control
7DEACT / DeactivationDeactivation of previously activated command.Control
8DEACTCON / Deactivation ConfirmationAcknowledgment of deactivation.Control
9ACTTERM / Activation TerminationCommand completed successfully.Control
10RETREM / Return Information Cause Remote CommandReturn info from remote operation.Monitor
11RETLOC / Return Information Cause Local CommandReturn info from local operation.Monitor
20FILE / File Transfer ReadyUsed in file transfer ASDUs.Monitor
21INTR / Interrogation CommandGeneral interrogation initiated.Control
40REMOTE / Remote Test / Parameter ChangeUsed in parameter activation.Control
44TEST / Test FrameSent during test operation.Both
45RESET / Reset ProcessSystem reset sequence.Control
70END / End of InitializationIndicates device is ready for operation.Monitor

Note: Actual implementations often use codes 1–9 most frequently in normal operation.

Decoding CP56Time2a Timestamps

Wireshark automatically interprets CP56Time2a timestamps and displays the human-readable date and time.

Example:

Timestamp: 2025-10-30 14:15:12.987

If time appears incorrect:

  • Verify time zone settings under Wireshark → Preferences → Time Display Format.
  • Ensure your SCADA master and RTUs are synchronized (NTP or GPS).

For deeper understanding, read:

📘 IEC 104 Time Synchronization (CP56Time2a)

Troubleshooting with Wireshark

SymptomPossible CauseHow to Detect in Wireshark
Frequent TCP reconnectsTimeout (t1/t3) too shortLook for frequent FIN and SYN frames
Lost acknowledgmentsHigh latency or overloadMissing S-format responses
Duplicated framesRetransmissionsTCP Retransmission messages
No data flowLink not startedMissing STARTDT CON U-frame
Timestamp errorsClock sync failureIncorrect CP56Time2a values

Pro Tip:
Colorize frame types (I, S, U) in Wireshark View → Coloring Rules for quick visual troubleshooting.

Next Step: Decode Frames Instantly Online

Want to decode IEC 104 packets without Wireshark setup?

Use the IEC 60870-5-104 Frame Decoder to analyze real frame data — including ASDU type, timestamp, and Cause of Transmission.

Author: Zakaria El Intissar

I'm an automation and industrial computing engineer with 12 years of experience in power system automation, SCADA communication protocols, and electrical protection. I build tools and write guides for Modbus, DNP3, IEC 101/104, and IEC 103 on ScadaProtocols.com to help engineers decode, analyze, and troubleshoot real industrial communication systems.

Leave a Reply

Your email address will not be published. Required fields are marked *