Wireshark for EtherNet/IP: How to Capture and Decode CIP Traffic

By | April 14, 2026

EtherNet/IP (Ethernet Industrial Protocol) is the leading industrial Ethernet protocol in North America. It carries CIP (Common Industrial Protocol) messages over standard TCP/IP and UDP/IP.

Wireshark fully decodes EtherNet/IP using two dissectors:

  • enip — EtherNet/IP encapsulation layer (session management, encapsulation commands)
  • cip — Common Industrial Protocol (services, objects, connections, I/O data)

EtherNet/IP uses two ports:

  • TCP port 44818 — explicit messaging (configuration, diagnostics, session management)
  • UDP port 2222 — implicit messaging (cyclic I/O data between controllers and I/O devices)

This guide covers how to capture both traffic types, which display filters to use, how to decode CIP services and I/O connections, and how to troubleshoot the most common EtherNet/IP problems.

1. How EtherNet/IP Appears in Wireshark

Wireshark shows EtherNet/IP traffic as two protocol layers:

LayerWhat It Shows
EtherNet/IP (enip)Encapsulation command, session handle, status, sender context
CIP (cip)Service code, class/instance/attribute path, data, status

The Info column shows:

Register Session (Req)
Register Session (Rsp), Session: 0x00000001
Send RR Data (Req), Service: Get Attribute All
Send RR Data (Rsp), Service: Get Attribute All
Send Unit Data, CIP I/O Connection

For implicit I/O on UDP 2222:

CIP I/O, Connection ID: 0x80000001, Seq: 12345

2. How to Capture EtherNet/IP Traffic

Capture Filter

To capture both explicit and implicit traffic:

tcp port 44818 or udp port 2222

To capture only explicit messaging:

tcp port 44818

To capture only implicit I/O:

udp port 2222

Where to Capture

LocationWhat You See
On the PLC / scannerAll EtherNet/IP traffic from the controller
On an I/O adapterTraffic to/from that specific device
On a managed switch (port mirroring)All traffic on the mirrored port(s)

3. Display Filters for EtherNet/IP and CIP

All filter field names verified against the official Wireshark Display Filter References for enip and cip.

Basic Filters

FilterWhat It Shows
enipAll EtherNet/IP encapsulation traffic
cipAll CIP messages (explicit + implicit)
cipioCIP I/O implicit messages only (UDP 2222)
tcp.port == 44818All explicit messaging traffic
udp.port == 2222All implicit I/O traffic

Encapsulation Command Filters

FilterWhat It Shows
enip.command == 0x0004List Services
enip.command == 0x0063List Identity
enip.command == 0x0065Register Session
enip.command == 0x0066Unregister Session
enip.command == 0x006fSend RR Data (explicit messaging)
enip.command == 0x0070Send Unit Data (connected explicit messaging)

Session and Status Filters

FilterWhat It Shows
enip.sessionSession handle value
enip.statusEncapsulation status (0 = success)
enip.status != 0Failed encapsulation commands

CIP Service Filters

FilterWhat It Shows
cip.serviceCIP service code
cip.scCIP service code (alternate field name)
cip.genstatCIP General Status code
cip.genstat != 0Failed CIP services
cip.classCIP class in the path
cip.instanceCIP instance in the path
cip.attributeCIP attribute in the path
cip.connection.triad.ConnSerialNumberConnection serial number

Common CIP Service Codes

Service CodeNameDescription
0x01Get Attribute AllRead all attributes of an object
0x02Set Attribute AllWrite all attributes
0x03Get Attribute ListRead specific attributes
0x04Set Attribute ListWrite specific attributes
0x05ResetReset the device
0x0EGet Attribute SingleRead one attribute
0x10Set Attribute SingleWrite one attribute
0x4BRead Tag ServiceRead a tag value (Logix-specific)
0x4CRead Tag FragmentedRead a large tag (fragmented)
0x4DWrite Tag ServiceWrite a tag value (Logix-specific)
0x4EWrite Tag FragmentedWrite a large tag (fragmented)
0x52Read Modify Write TagAtomic read-modify-write
0x54Forward OpenEstablish a CIP connection
0x4EForward CloseClose a CIP connection

Combination Examples

All Forward Open requests:

cip.sc == 0x54

All failed CIP responses:

cip.genstat != 0

All explicit traffic to a specific device:

enip && ip.addr == 192.168.1.100

Only List Identity responses (device discovery):

enip.command == 0x0063

Implicit I/O for a specific connection ID:

cipio && cip.connid == 0x80000001

4. Explicit vs Implicit Messaging in Wireshark

FeatureExplicit (TCP 44818)Implicit (UDP 2222)
TransportTCPUDP
Port448182222
PurposeConfiguration, diagnostics, tag reads/writesCyclic I/O data (inputs/outputs)
Wireshark filterenip or tcp.port == 44818cipio or udp.port == 2222
Message patternRequest → ResponseProducer → Consumer (continuous)
Encapsulation commandSend RR Data (0x006F) or Send Unit Data (0x0070)None — raw CIP I/O frames
TimingOn-demandCyclic (RPI = Requested Packet Interval)

5. How to Read a Decoded EtherNet/IP Packet

Register Session Request

EtherNet/IP (Industrial Protocol)
    Command: Register Session (0x0065)
    Length: 4
    Session Handle: 0x00000000
    Status: Success (0x00000000)
    Protocol Version: 1
    Options Flags: 0

Send RR Data — Get Attribute Single

EtherNet/IP (Industrial Protocol)
    Command: Send RR Data (0x006F)
    Session Handle: 0x00000001
Common Industrial Protocol
    Service: Get Attribute Single (0x0E)
    Class: Identity (0x01)
    Instance: 1
    Attribute: Product Name (7)

CIP I/O Implicit Data (UDP 2222)

Common Industrial Protocol, I/O
    Connection ID: 0x80000001
    Sequence Count: 12345
    Data: 01 FF 03 00 ...

6. What a Healthy EtherNet/IP Session Looks Like

#DirectionProtocolInfo
1Client → ServerTCPSYN (port 44818)
2Server → ClientTCPSYN-ACK
3Client → ServerTCPACK
4Client → ServerENIPRegister Session (Request)
5Server → ClientENIPRegister Session (Response, Session Handle assigned)
6Client → ServerENIPSend RR Data — Get Attribute All (Identity Object)
7Server → ClientENIPSend RR Data — Response with device identity
8Client → ServerENIPSend RR Data — Forward Open (establish I/O connection)
9Server → ClientENIPSend RR Data — Forward Open Response (connection IDs assigned)
10Both ↔ BothCIP I/OImplicit I/O data on UDP 2222 (continuous cyclic exchange)

The sequence is always: TCP handshake → Register Session → Explicit services → Forward Open → Implicit I/O begins

7. Decoding Forward Open — Connection Setup

The Forward Open service (0x54) establishes a CIP connection for implicit I/O data exchange.

Filter: cip.sc == 0x54

Forward Open Request

CIP Connection Manager
    Service: Forward Open (0x54)
    O→T Connection ID: 0x80000001
    T→O Connection ID: 0x80000002
    O→T RPI: 10000 µs (10 ms)
    T→O RPI: 10000 µs (10 ms)
    O→T Network Connection Parameters: Point-to-Point, Fixed Size
    T→O Network Connection Parameters: Multicast, Fixed Size
    Connection Path: [Backplane] Port 1, Slot 0

Forward Open Response

CIP Connection Manager
    Service: Forward Open (Response)
    General Status: Success (0x00)
    O→T Connection ID: 0x80000001
    T→O Connection ID: 0x80000002

If the Forward Open fails, the General Status field shows the error code.

8. Decoding Implicit I/O Data (UDP Port 2222)

After Forward Open succeeds, implicit I/O data flows on UDP port 2222.

Filter: cipio or udp.port == 2222

Each I/O packet contains:

  • Connection ID — matches the O→T or T→O Connection ID from Forward Open
  • Sequence Count — increments every cycle
  • Data — raw I/O bytes (input or output data)

Wireshark maps the Connection ID back to the Forward Open if it was captured in the same session. This allows you to see which device the I/O data belongs to.

⚠️ Important: If you start Wireshark after the Forward Open has already completed, Wireshark cannot map Connection IDs to devices. Start Wireshark before the connection is established.

9. Diagnosing Connection Failures

Filter: cip.sc == 0x54 && cip.genstat != 0 (failed Forward Opens)

Common Forward Open Error Codes

General StatusExtended StatusMeaningCommon Cause
0x010x0100Connection failureResource unavailable on target device
0x010x0103Connection timeoutRPI too fast for the device
0x010x0106Ownership conflictAnother scanner already owns this connection
0x010x0107Target connection not foundWrong connection path (backplane/slot)
0x010x0109Invalid connection sizeO→T or T→O size mismatch
0x010x0110Connection target does not support the requested RPIRPI too short
0x010x0113RPI not acceptableIncrease the RPI value
0x0CObject state conflictDevice is in an invalid state for connection
0x14Attribute not settableWrong parameter in the path

10. Diagnosing No I/O Data Exchange

Filter: cipio or udp.port == 2222

What You SeeCauseFix
No UDP 2222 packets at allForward Open failed or was never sentCheck Forward Open response for errors
I/O data flows then stopsConnection timed out (missed too many packets)Check network for packet loss. Verify RPI.
I/O data from device but not from controllerController not producing dataCheck controller program and I/O configuration
Sequence Count frozen (not incrementing)Device stopped updating I/OCheck device status and diagnostics

11. Diagnosing CIP Error Codes

Filter: cip.genstat != 0

Common CIP General Status Codes

CodeNameCommon Cause
0x01Connection FailureForward Open failed — see extended status
0x04Path Segment ErrorWrong class/instance/attribute in the path
0x05Path Destination UnknownTarget object does not exist
0x08Service Not SupportedDevice does not support this CIP service
0x0AAttribute List ErrorOne or more attributes in the list failed
0x0CObject State ConflictDevice in wrong state (e.g., Running vs Idle)
0x10Device State ConflictDevice not in the right mode
0x13Not Enough DataRequest packet too short
0x14Attribute Not SupportedAttribute does not exist on this object
0x15Too Much DataRequest packet too long
0x1ETag Not FoundLogix tag name does not exist (Read/Write Tag)
0x26Bridge Request Too LargeMessage too large for the routing path

12. Useful Wireshark Columns for EtherNet/IP Analysis

Column TitleTypeField Name
ENIP CommandCustomenip.command
Session HandleCustomenip.session
CIP ServiceCustomcip.sc
CIP StatusCustomcip.genstat
Delta TimeCustomframe.time_delta_displayed

13. Common EtherNet/IP Problems and What They Look Like in Wireshark

ProblemWireshark SymptomFilter
Device offlineTCP SYN, no SYN-ACK on port 44818tcp.flags.syn == 1 && tcp.port == 44818
Session registration failsRegister Session with non-zero statusenip.command == 0x0065 && enip.status != 0
Forward Open failsForward Open response with CIP errorcip.sc == 0x54 && cip.genstat != 0
Ownership conflictForward Open error 0x0106cip.sc == 0x54 — check extended status
Wrong connection pathForward Open error 0x0107Verify backplane/slot in connection path
No I/O dataNo packets on UDP 2222udp.port == 2222
I/O connection timeoutI/O data stops after a periodcipio — check for gaps in sequence count
Tag not foundCIP status 0x1E on Read/Write Tagcip.genstat == 0x1e
Packet lossTCP retransmissions on port 44818tcp.analysis.retransmission && tcp.port == 44818
Slow responseLarge time deltaenip && frame.time_delta > 1

Summary

Wireshark decodes the full EtherNet/IP and CIP protocol stack — session management, explicit messaging, Forward Open connection setup, and cyclic I/O data.

The key things to remember:

  • EtherNet/IP uses TCP port 44818 for explicit messaging and UDP port 2222 for implicit I/O
  • Use enip for encapsulation-level traffic, cip for CIP services, cipio for implicit I/O
  • Use cip.sc == 0x54 to find Forward Open (connection setup)
  • Use cip.genstat != 0 to find all failed CIP services
  • Use enip.command == 0x0063 for List Identity (device discovery)
  • Start Wireshark before the connection is established — otherwise implicit I/O data cannot be mapped to devices
  • Forward Open errors are the #1 cause of EtherNet/IP I/O problems — always check the General Status and Extended Status codes

For a comparison with PROFINET, see: PROFINET vs EtherNet/IP: Complete Comparison

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/103/104, and IEC 61850 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 *