12.4. ENIP

The Ethernet Industrial Protocol (ENIP) is part of the Common Industrial Protocol (CIP). The Common Industrial Protocol (CIP) defines the object structure and specifies the message transfer. The ENIP Enforcer function applies the Deep Packet Inspection (DPI) function to the ENIP and CIP data stream. The Ethernet Industrial Protocol (ENIP) is used to monitor and control industrial automation equipment such as PLCs (Programmable Logic Controllers), sensors, and meters.

The device uses the ENIP Enforcer function to perform the DPI function on the data stream. The device performs the DPI function based on the values defined in the specified profiles. The device blocks the data packets that violate the specified profiles.

Note

The ENIP Enforcer function performs the DPI function only on packets that contain an explicit request, and drops packets that contain an implicit request. An explicit request contains CIP message over TCP. An implicit request contains CIP message over UDP.

When the ENIP Enforcer profile is active, the device applies the profile to the data stream.

The device permits only data packets containing the values specified in the following fields:

  • Function type

  • Sanity check

  • Default object list

  • Wildcard service codes

  • Allow embedded PCCC (Programmable Controller Communication Commands)

The menu contains the following dialogs:

  • ENIP Profile

  • ENIP Object

You can find the ENIP enforcer at Firewall → Enforcer → ENIP.

ENIP

12.4.1. ENIP Settings

Enabled

Wheter the ENIP enforcer is active or not.

Possible values:

  • Enabled

  • Disabled (default setting)

Name

Name of the ENIP enforcer.

Possible values:

  • Character string with 0..100 characters

Description

Description of the ENIP enforcer.

Possible values:

  • Character string with 0..250 characters

Sanity Check

Activates/deactivates the plausibility check for the data packets.

Possible values:

  • enabled (default setting)

    The plausibility check is active.

    The device checks the plausibility of the data packets regarding format and specification.

    The device blocks the data packets that violate the specified profiles.

  • disabled

    The plausibility check is inactive.

TCP Reset

Activates/deactivates the resetting of the TCP connection in case of a protocol violation or if the plausibility check detects an error.

Possible values:

  • enabled (default setting)

    The resetting of the TCP connection is active.

    If the device identifies a protocol violation or detects a plausibility check error, then the device terminates the TCP connection. The device establishes the TCP connection again on receiving a new connection request.

  • disabled

    The resetting of the TCP connection is inactive.

Debug

Activates/deactivates the debugging of the profiles.

Possible values:

  • enabled

    Debugging is active.

    The device sends the reset packet along with the information related to the termination of TCP connection. The prerequisite is that in the TCP reset field the checkbox is marked.

  • disabled (default setting)

    Debugging is inactive.

Allow embedded PCCC

Activates/deactivates DPI for PCCC messages encapsulated in data packets. PCCC messages are embedded within the Ethernet Industrial Protocol (ENIP). Activating this setting is useful when securing network traffic to and from PLC-5 and MicroLogix controllers.

Possible values:

  • enabled

    DPI for PCCC messages is active.

  • disabled (default setting)

    DPI for PCCC messages is inactive.

Preset

Preset of class IDs and service codes

Possible values:

  • Read Only

    Assigns the class IDs for the read function.

  • Read Write

    Assigns the class IDs for the read/write functions.

  • Any (default setting)

    Assigns the class IDs for every function.

    The device does not permit any subsequent changes in the Advanced Class IDs list.

  • Advanced

    Lets you specify user-defined class IDs.

12.4.2. ENIP Class IDs for different function types

Table 1: Class IDs for function type readonly

Class ID

Service codes

0x01 = Identity

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x11 = Find Next Object Instance
0x18 = Get Member

0x02 = Message Router

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x54

0x04 = Assembly

0x0E = Get Attribute Single
0x18 = Get Member

0x05 = Connection

0x08 = Create
0x0E = Get Attribute Single
0x11 = Find Next Object Instance
0x4C

0x06 = Off-Link Connection Manager

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x4C
0x4E
0x52
0x54
0x56
0x57
0x59
0x5A
0x5B

0x07 = Register

0x0E = Get Attribute Single

0x08 = Discrete Input Point

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x09 = Discrete Output Point

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x0A = Analog Input Point

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x0B = Analog Output Point

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x0E = Presence Sensing

0x0E = Get Attribute Single

0x0F = Parameter

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x18 = Get Member
0x4B

0x10 = Parameter Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x12 = Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x1D = Discrete Input Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x1E = Discrete Output Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x1F = Discrete Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x20 = Analog Input Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x21 = Analog Output Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x22 = Analog Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x23 = Position Sensor Object

0x0E = Get Attribute Single
0x18 = Get Member

0x24 = Position Controller Supervisor Object

0x0E = Get Attribute Single

0x25 = Position Controller Object

0x0E = Get Attribute Single

0x26 = Block Sequencer Object

0x0E = Get Attribute Single

0x27 = Command Block Object

0x0E = Get Attribute Single

0x28 = Motor Data Object

0x0E = Get Attribute Single

0x29 = Control Supervisor Object

0x0E = Get Attribute Single

0x2A = AC/DC Drive Object

0x0E = Get Attribute Single

0x2B = Acknowledge Handler Object

0x0E = Get Attribute Single

0x2C = Overload Object

0x0E = Get Attribute Single

0x2D = Softstart Object

0x0E = Get Attribute Single

0x2E = Selection Object

0x0E = Get Attribute Single
0x18 = Get Member

0x30 = S-Device Supervisor Object

0x0E = Get Attribute Single

0x31 = S-Analog Sensor Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x32 = S-Analog Actuator Object

0x0E = Get Attribute Single

0x33 = S-Single Stage Controller Object

0x0E = Get Attribute Single

0x34 = S-Gas Calibration Object

0x0E = Get Attribute Single
0x4B

0x35 = Trip Point Object

0x0E = Get Attribute Single

0x37 = File Object

0x0E = Get Attribute Single
0x18 = Get Member
0x4B
0x4D
0x4F

0x38 = S-Partial Pressure Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x4C
0x4D
0x4E

0x40 = S-Sensor Calibration Object

0x0E = Get Attribute Single
0x4B

0x41 = Event Log Object

0x0E = Get Attribute Single
0x18 = Get Member

0x42 = Motion Device Axis Object

0x03 = Get Attribute List
0x0E = Get Attribute Single
0x4B
0x50
0x52
0x54

0x43 = Time Sync Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x0E = Get Attribute Single

0x44 = Modbus Object

0x0E = Get Attribute Single
0x4B
0x4C
0x4D
0x4E

0x45 = Originator Connection List Object

0x4C

0x46 = Modbus Serial Link Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x47 = Device Level Ring (DLR) Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x18 = Get Member

0x48 = QoS Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x4D = Target Connection List Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x4E = Base Energy Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x0E = Get Attribute Single
0x18 = Get Member

0x4F = Electrical Energy Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x0E = Get Attribute Single

0x50 = Non-Electrical Energy Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x0E = Get Attribute Single

0x51 = Base Switch Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x52 = SNMP Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x53 = Power Management Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x0E = Get Attribute Single
0x18 = Get Member

0x54 = RSTP Bridge Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x55 = RSTP Port Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x91 = ANSI Extended Symbol Segment

0x03 = Get Attribute List
0x55

0x6C

0x01 = Get Attributes All

0xAC

0x01 = Get Attributes All
0x4C

0xB2

0x08 = Create
0x4E
0x4F

0xF3 = Connection Configuration Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x4C
0x4D
0x4E
0x50

0xF4 = Port Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0xF5 = TCP/IP Interface Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0xF6 = EtherNet Link Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x300 = Module Diagnostics

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x301 = InputIOCnx

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x302 = Local Slaves

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x400 = Service Port Control Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x401 = Dynamic IO Control Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x402 = Router Diagnostics Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x403 = Router Routing Table Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x404 = SMTP

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x405 = SNTP

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x406 = HSBY

0x01 = Get Attributes All
0x0E = Get Attribute Single
Table 2: Class IDs for function type readwrite

Class ID

Service codes

0x01 = Identity

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x11 = Find Next Object Instance
0x18 = Get Member

0x02 = Message Router

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x4B
0x54

0x04 = Assembly

0x08 = Create
0x09 = Delete
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x18 = Get Member
0x19 = Set Member
0x1A = Insert Member
0x1B = Remove Member
0x4B
0x4C

0x05 = Connection

0x05 = Reset

0x06 = Off-Link Connection Manager

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4C
0x4E
0x52
0x54
0x56
0x57
0x59
0x5A
0x5B

0x07 = Register

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x08 = Discrete Input Point

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x09 = Discrete Output Point

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x0A = Analog Input Point

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x0B = Analog Output Point

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x0E = Presence Sensing

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x0F = Parameter

0x01 = Get Attributes All
0x05 = Reset
0x0D = Apply Attributes
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x16 = Save
0x18 = Get Member
0x4B

0x10 = Parameter Group

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x12 = Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x1D = Discrete Input Group

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x1E = Discrete Output Group

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x1F = Discrete Group

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x20 = Analog Input Group

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x21 = Analog Output Group

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x22 = Analog Group

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x23 = Position Sensor Object

0x05 = Reset
0x0D = Apply Attributes
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x16 = Save
0x18 = Get Member
0x19 = Set Member

0x24 = Position Controller Supervisor Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x25 = Position Controller Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x26 = Block Sequencer Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x27 = Command Block Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x28 = Motor Data Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x16 = Save

0x29 = Control Supervisor Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x05 = Reset

0x2A = AC/DC Drive Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x16 = Save

0x2B = Acknowledge Handler Object

0x08 = Create
0x09 = Delete
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4B
0x4C

0x2C = Overload Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x16 = Save

0x2D = Softstart Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x16 = Save

0x2E = Selection Object

0x05 = Reset
0x06 = Start
0x07 = Stop
0x08 = Create
0x09 = Delete
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x18 = Get Member
0x19 = Set Member
0x1A = Insert Member
0x1B = Remove Member

0x30 = S-Device Supervisor Object

0x05 = Reset
0x06 = Start
0x07 = Stop
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4B
0x4C
0x4E

0x31 = S-Analog Sensor Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x4B
0x4C

0x32 = S-Analog Actuator Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x33 = S-Single Stage Controller Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x63

0x34 = S-Gas Calibration Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4B

0x35 = Trip Point Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x37 = File Object

0x06 = Start
0x07 = Stop
0x08 = Create
0x09 = Delete
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x16 = Save
0x18 = Get Member
0x4B
0x4C
0x4D
0x4E
0x4F
0x50
0x51

0x38 = S-Partial Pressure Object

0x01 = Get Attributes All
0x08 = Create
0x09 = Delete
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4B
0x4C
0x4D
0x4E
0x4F

0x40 = S-Sensor Calibration Object

0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4B

0x41 = Event Log Object

0x05 = Reset
0x06 = Start
0x07 = Stop
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x18 = Get Member
0x19 = Set Member
0x1A = Insert Member
0x1B = Remove Member

0x42 = Motion Device Axis Object

0x03 = Get Attribute List
0x04 = Set Attribute List
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x1C = Group Sync
0x4B
0x4C
0x4D
0x4E
0x4F
0x50
0x51
0x52
0x53
0x54

0x43 = Time Sync Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x04 = Set Attribute List
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x44 = Modbus Object

0x0E = Get Attribute Single
0x4B
0x4C
0x4D
0x4E
0x4F
0x50
0x51

0x45 = Originator Connection List Object

0x08 = Create
0x09 = Delete
0x4C

0x46 = Modbus Serial Link Object

0x01 = Get Attributes All
0x05 = Reset
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4B

0x47 = Device Level Ring (DLR) Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x18 = Get Member
0x4B
0x4C
0x4D
0x4E

0x48 = QoS Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x4D = Target Connection List Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x4C

0x4E = Base Energy Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x04 = Set Attribute List
0x05 = Reset
0x08 = Create
0x09 = Delete
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x18 = Get Member
0x19 = Set Member
0x1A = Insert Member
0x1B = Remove Member
0x4B
0x4C

0x4F = Electrical Energy Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x0E = Get Attribute Single

0x50 = Non-Electrical Energy Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x0E = Get Attribute Single

0x51 = Base Switch Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x52 = SNMP Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x53 = Power Management Object

0x01 = Get Attributes All
0x03 = Get Attribute List
0x04 = Set Attribute List
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x18 = Get Member
0x19 = Set Member
0x4D
0x4E
0x4F

0x54 = RSTP Bridge Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x55 = RSTP Port Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0x91 = ANSI Extended Symbol Segment

0x03 = Get Attribute List
0x55

0x6B

0x55

0x6C

0x01 = Get Attributes All

0xAC

0x01 = Get Attributes All
0x4C

0xB2

0x08 = Create
0x4E
0x4F

0xF3 = Connection Configuration Object

0x01 = Get Attributes All
0x02 = Set Attributes All
0x08 = Create
0x09 = Delete
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x15 = Restore
0x4B
0x4C
0x4D
0x4E
0x4F
0x50
0x51
0x52

0xF4 = Port Object

0x01 = Get Attributes All
0x05 = Reset
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0xF5 = TCP/IP Interface Object

0x01 = Get Attributes All
0x02 = Set Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single

0xF6 = EtherNet Link Object

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x10 = Set Attribute Single
0x4C

0x300 = Module Diagnostics

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x301 = InputIOCnx

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x302 = Local Slaves

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x400 = Service Port Control Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x401 = Dynamic IO Control Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x402 = Router Diagnostics Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x403 = Router Routing Table Object

0x01 = Get Attributes All
0x0E = Get Attribute Single

0x404 = SMTP

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x32

0x405 = SNTP

0x01 = Get Attributes All
0x0E = Get Attribute Single
0x32

0x406 = HSBY

0x01 = Get Attributes All
0x0E = Get Attribute Single