scapy.contrib.pnio_dcp
- class scapy.contrib.pnio_dcp.DCPAliasNameBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | ALIAS NAME | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPAliasNameBlockDCPAliasNameBlock fields option
2sub_option
MultiEnumField(Depends on 2)6dcp_block_length
Noneblock_info
0alias_name
b'et200sp'padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPBaseBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packetbase class for all DCP Blocks
- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | DATA | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPBaseBlockDCPBaseBlock fields option
1sub_option
MultiEnumField(Depends on 1)2dcp_block_length
Noneblock_info
0data
b''
- class scapy.contrib.pnio_dcp.DCPControlBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RESPONSE |RESPONSE SUB OP| BLOCK ERROR | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+ Fig. DCPControlBlockDCPControlBlock fields option
5sub_option
MultiEnumField(Depends on 5)4dcp_block_length
3response
2response_sub_option
MultiEnumField(Depends on 5)2block_error
0padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPDeviceIDBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | VENDOR ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DEVICE ID | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPDeviceIDBlockDCPDeviceIDBlock fields option
2sub_option
MultiEnumField(Depends on 2)3dcp_block_length
Noneblock_info
0vendor_id
42device_id
787padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPDeviceInstanceBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO |DEVICE INSTANCE|DEVICE INSTANCE| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPDeviceInstanceBlockDCPDeviceInstanceBlock fields option
2sub_option
MultiEnumField(Depends on 2)7dcp_block_length
4block_info
0device_instance_high
0device_instance_low
1padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPDeviceOptionsBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | DEVICE OPTIONS | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPDeviceOptionsBlockDCPDeviceOptionsBlock fields option
2sub_option
MultiEnumField(Depends on 2)5dcp_block_length
Noneblock_info
0device_options
[]padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPDeviceRoleBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO |DEVICE ROLE DET| RESERVED | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPDeviceRoleBlockDCPDeviceRoleBlock fields option
2sub_option
MultiEnumField(Depends on 2)4dcp_block_length
4block_info
0device_role_details
1reserved
0padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPIPBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | IP | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | NETMASK | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | GATEWAY | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPIPBlockDCPIPBlock fields option
1sub_option
MultiEnumField(Depends on 1)2dcp_block_length
Noneblock_info
1ip
'192.168.0.2'netmask
'255.255.255.0'gateway
'192.168.0.1'padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPMACBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | MAC | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPMACBlockDCPMACBlock fields option
1sub_option
MultiEnumField(Depends on 1)1dcp_block_length
Noneblock_info
0mac
'00:00:00:00:00:00'padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPManufacturerSpecificBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | DEVICE VENDOR VALUE | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPManufacturerSpecificBlockDCPManufacturerSpecificBlock fields option
2sub_option
MultiEnumField(Depends on 2)1dcp_block_length
Noneblock_info
0device_vendor_value
b'et200sp'padding
b'\x00'
- class scapy.contrib.pnio_dcp.DCPNameOfStationBlock(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | DCP BLOCK LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | BLOCK INFO | NAME OF STATION | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PADDING | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DCPNameOfStationBlockDCPNameOfStationBlock fields option
2sub_option
MultiEnumField(Depends on 2)2dcp_block_length
Noneblock_info
0name_of_station
b'et200sp'padding
b'\x00'
- class scapy.contrib.pnio_dcp.DeviceOption(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.Packet- 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OPTION | SUB OPTION | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. DeviceOptionDeviceOption fields option
2sub_option
MultiEnumField(Depends on 2)5
- class scapy.contrib.pnio_dcp.ProfinetDCP(*args: Any, **kargs: Any)[source]
Bases:
scapy.packet.PacketProfinet 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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NAME OF STATION | ALIAS NAME | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DCP BLOCKS | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Fig. ProfinetDCPProfinetDCP fields service_id
5service_type
0xid
16777217reserved
0dcp_data_length
Noneoption
ByteEnumField(Cond)2sub_option
MultiEnumField(Cond, Depends on 2)3dcp_block_length
LenField(Cond)0block_qualifier
ShortEnumField(Cond)1name_of_station
StrLenField(Cond)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'name_of_station
StrLenField(Cond)b'et200sp'alias_name
StrLenField(Cond)b'et200sp'dcp_blocks
PacketListField(Cond)[]