scapy.contrib.pnio_dcp module

class scapy.contrib.pnio_dcp.DCPAliasNameBlock(_pkt, /, *, option=2, sub_option=6, dcp_block_length=None, block_info=0, alias_name=b'et200sp', padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |           ALIAS NAME          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                      Fig. DCPAliasNameBlock                      
DCPAliasNameBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

6

dcp_block_length

FieldLenField

None

block_info

ShortEnumField

0

alias_name

StrLenField

b'et200sp'

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPBaseBlock(_pkt, /, *, option=1, sub_option=2, dcp_block_length=None, block_info=0, data=b'')[source]

Bases: Packet

base class for all DCP Blocks

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |              DATA             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Fig. DCPBaseBlock                         
DCPBaseBlock fields

option

ByteEnumField

1

sub_option

MultiEnumField (Depends on 1)

2

dcp_block_length

FieldLenField

None

block_info

ShortEnumField

0

data

StrLenField

b''

class scapy.contrib.pnio_dcp.DCPControlBlock(_pkt, /, *, option=5, sub_option=4, dcp_block_length=3, response=2, response_sub_option=2, block_error=0, padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    RESPONSE   |RESPONSE SUB OP|  BLOCK ERROR  |    PADDING    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+

                       Fig. DCPControlBlock                       
DCPControlBlock fields

option

ByteEnumField

5

sub_option

MultiEnumField (Depends on 5)

4

dcp_block_length

LenField

3

response

ByteEnumField

2

response_sub_option

MultiEnumField (Depends on 5)

2

block_error

ByteEnumField

0

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPDeviceIDBlock(_pkt, /, *, option=2, sub_option=3, dcp_block_length=None, block_info=0, vendor_id=42, device_id=787, padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |           VENDOR ID           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           DEVICE ID           |            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                      Fig. DCPDeviceIDBlock                       
DCPDeviceIDBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

3

dcp_block_length

LenField

None

block_info

ShortEnumField

0

vendor_id

XShortField

42

device_id

XShortField

787

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPDeviceInitiativeBlock(_pkt, /, *, option=6, sub_option=1, dcp_block_length=None, block_info=0, device_initiative=1)[source]

Bases: Packet

device initiative DCP block

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |       DEVICE INITIATIVE       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                  Fig. DCPDeviceInitiativeBlock                   
DCPDeviceInitiativeBlock fields

option

ByteEnumField

6

sub_option

MultiEnumField (Depends on 6)

1

dcp_block_length

FieldLenField

None

block_info

ShortEnumField

0

device_initiative

ShortField

1

class scapy.contrib.pnio_dcp.DCPDeviceInstanceBlock(_pkt, /, *, option=2, sub_option=7, dcp_block_length=4, block_info=0, device_instance_high=0, device_instance_low=1, padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |DEVICE INSTANCE|DEVICE INSTANCE|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Fig. DCPDeviceInstanceBlock                    
DCPDeviceInstanceBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

7

dcp_block_length

LenField

4

block_info

ShortEnumField

0

device_instance_high

XByteField

0

device_instance_low

XByteField

1

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPDeviceOptionsBlock(_pkt, /, *, option=2, sub_option=5, dcp_block_length=None, block_info=0, device_options=[], padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |         DEVICE OPTIONS        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Fig. DCPDeviceOptionsBlock                    
DCPDeviceOptionsBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

5

dcp_block_length

LenField

None

block_info

ShortEnumField

0

device_options

PacketListField

[]

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPDeviceRoleBlock(_pkt, /, *, option=2, sub_option=4, dcp_block_length=4, block_info=0, device_role_details=1, reserved=0, padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |DEVICE ROLE DET|    RESERVED   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Fig. DCPDeviceRoleBlock                      
DCPDeviceRoleBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

4

dcp_block_length

LenField

4

block_info

ShortEnumField

0

device_role_details

ByteEnumField

1

reserved

XByteField

0

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPFullIPBlock(_pkt, /, *, option=1, sub_option=3, dcp_block_length=None, block_info=1, ip='192.168.0.2', netmask='255.255.255.0', gateway='192.168.0.1', dnsaddr=[], padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |               IP              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |            NETMASK            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |            GATEWAY            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |            DNSADDR            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Fig. DCPFullIPBlock                        
DCPFullIPBlock fields

option

ByteEnumField

1

sub_option

MultiEnumField (Depends on 1)

3

dcp_block_length

LenField

None

block_info

ShortEnumField

1

ip

IPField

'192.168.0.2'

netmask

IPField

'255.255.255.0'

gateway

IPField

'192.168.0.1'

dnsaddr

FieldListField

[]

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPIPBlock(_pkt, /, *, option=1, sub_option=2, dcp_block_length=None, block_info=1, ip='192.168.0.2', netmask='255.255.255.0', gateway='192.168.0.1', padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |               IP              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |            NETMASK            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |            GATEWAY            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Fig. DCPIPBlock                          
DCPIPBlock fields

option

ByteEnumField

1

sub_option

MultiEnumField (Depends on 1)

2

dcp_block_length

LenField

None

block_info

ShortEnumField

1

ip

IPField

'192.168.0.2'

netmask

IPField

'255.255.255.0'

gateway

IPField

'192.168.0.1'

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPMACBlock(_pkt, /, *, option=1, sub_option=1, dcp_block_length=None, block_info=0, mac='00:00:00:00:00:00', padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |              MAC              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Fig. DCPMACBlock                         
DCPMACBlock fields

option

ByteEnumField

1

sub_option

MultiEnumField (Depends on 1)

1

dcp_block_length

FieldLenField

None

block_info

ShortEnumField

0

mac

MACField

'00:00:00:00:00:00'

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPManufacturerSpecificBlock(_pkt, /, *, option=2, sub_option=1, dcp_block_length=None, block_info=0, device_vendor_value=b'et200sp', padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |      DEVICE VENDOR VALUE      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                Fig. DCPManufacturerSpecificBlock                 
DCPManufacturerSpecificBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

1

dcp_block_length

FieldLenField

None

block_info

ShortEnumField

0

device_vendor_value

StrLenField

b'et200sp'

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPNameOfStationBlock(_pkt, /, *, option=2, sub_option=2, dcp_block_length=None, block_info=0, name_of_station=b'et200sp', padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |        NAME OF STATION        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Fig. DCPNameOfStationBlock                    
DCPNameOfStationBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

2

dcp_block_length

FieldLenField

None

block_info

ShortEnumField

0

name_of_station

StrLenField

b'et200sp'

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DCPOEMIDBlock(_pkt, /, *, option=2, sub_option=8, dcp_block_length=None, block_info=0, vendor_id=42, device_id=787, padding=b'\x00')[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |        DCP BLOCK LENGTH       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           BLOCK INFO          |           VENDOR ID           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           DEVICE ID           |            PADDING            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Fig. DCPOEMIDBlock                        
DCPOEMIDBlock fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

8

dcp_block_length

LenField

None

block_info

ShortEnumField

0

vendor_id

XShortField

42

device_id

XShortField

787

padding

PadField

b'\x00'

class scapy.contrib.pnio_dcp.DeviceOption(_pkt, /, *, option=2, sub_option=5)[source]

Bases: Packet

aliastypes
extract_padding(s)[source]
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     OPTION    |   SUB OPTION  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Fig. DeviceOption                         
DeviceOption fields

option

ByteEnumField

2

sub_option

MultiEnumField (Depends on 2)

5

class scapy.contrib.pnio_dcp.ProfinetDCP(_pkt, /, *, service_id=5, service_type=0, xid=16777217, reserved=0, dcp_data_length=None, option=2, sub_option=3, dcp_block_length=0, block_qualifier=1, name_of_station=None, mac='00:00:00:00:00:00', ip='192.168.0.2', netmask='255.255.255.0', gateway='192.168.0.1', dnsaddr=[], alias_name=b'et200sp', dcp_blocks=[])[source]

Bases: Packet

Profinet DCP Packet

Requests are handled via ConditionalField because here only 1 Block is used every time.

Response can contain 1..n Blocks, for that you have to use one ProfinetDCP Layer with one or multiple DCP*Block Layers:

ProfinetDCP / DCPNameOfStationBlock / DCPDeviceIDBlock ...

Example for a DCP Identify All Request:

Ether(dst="01:0e:cf:00:00:00") /
ProfinetIO(frameID=DCP_IDENTIFY_REQUEST_FRAME_ID) /
ProfinetDCP(service_id=DCP_SERVICE_ID_IDENTIFY,
    service_type=DCP_REQUEST, option=255, sub_option=255,
    dcp_data_length=4)

Example for a DCP Identify Response:

Ether(dst=dst_mac) /
ProfinetIO(frameID=DCP_IDENTIFY_RESPONSE_FRAME_ID) /
ProfinetDCP(
    service_id=DCP_SERVICE_ID_IDENTIFY,
    service_type=DCP_RESPONSE) /
DCPNameOfStationBlock(name_of_station="device1")

Example for a DCP Set Request:

Ether(dst=mac) /
ProfinetIO(frameID=DCP_GET_SET_FRAME_ID) /
ProfinetDCP(service_id=DCP_SERVICE_ID_SET, service_type=DCP_REQUEST,
    option=2, sub_option=2, dcp_data_length=14, dcp_block_length=10,
    name_of_station=name, reserved=0)
aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   SERVICE ID  |  SERVICE TYPE |              XID              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |            RESERVED           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        DCP DATA LENGTH        |     OPTION    |   SUB OPTION  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        DCP BLOCK LENGTH       |        BLOCK QUALIFIER        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        NAME OF STATION        |              MAC              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               IP                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            NETMASK                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            GATEWAY                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            DNSADDR            |           ALIAS NAME          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           DCP BLOCKS          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Fig. ProfinetDCP                         
ProfinetDCP fields

service_id

ByteEnumField

5

service_type

ByteEnumField

0

xid

XIntField

16777217

reserved

ShortField

0

dcp_data_length

LenField

None

option

ByteEnumField (Cond)

2

sub_option

MultiEnumField (Cond, Depends on 2)

3

dcp_block_length

LenField (Cond)

0

block_qualifier

ShortEnumField (Cond)

1

name_of_station

MultipleTypeField (Cond, StrLenField, StrLenField)

b'et200sp'

mac

MACField (Cond)

'00:00:00:00:00:00'

ip

IPField (Cond)

'192.168.0.2'

netmask

IPField (Cond)

'255.255.255.0'

gateway

IPField (Cond)

'192.168.0.1'

dnsaddr

FieldListField (Cond)

[]

alias_name

StrLenField (Cond)

b'et200sp'

dcp_blocks

PacketListField (Cond)

[]

payload_guess

Possible sublayers: Padding

post_build(pkt, pay)[source]
scapy.contrib.pnio_dcp.guess_dcp_block_class(packet, **kargs)[source]

returns the correct dcp block class needed to dissect the current tag if nothing can be found -> dcp base block will be used

Parameters:

packet – the current packet

Returns:

dcp block class