• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1%ENIP Tests
2
3+Syntax check
4= Import the enip layer
5
6from scapy.contrib.enipTCP import *
7#from scapy.all import *
8
9
10+ Test ENIP/TCP Encapsulation Header
11= Encapsulation Header Default Values
12pkt=ENIPTCP()
13assert pkt.commandId == None
14assert pkt.length == 0
15assert pkt.session == 0
16assert pkt.status == None
17assert pkt.senderContext == 0
18assert pkt.options == 0
19
20
21+ ENIP List Services 0x0004
22= ENIP List Services Reply Command ID
23pkt=ENIPTCP()
24pkt.commandId=0x4
25assert pkt.commandId == 0x4
26
27= ENIP List Services Default Values
28pkt=ENIPListServices()
29assert pkt.itemCount == 0
30
31= ENIP List Services Custom Values
32pkt.items.append(ENIPListServicesItem(serviceName=b'test'))
33assert pkt.items[0].itemTypeCode == 0
34assert pkt.items[0].itemLength == 0
35assert pkt.items[0].protocolVersion == 0
36assert pkt.items[0].flag == 0
37assert pkt.items[0].serviceName == b'test'
38
39
40+ ENIP List Identity 0x0063
41= ENIP List Identity Reply Command ID
42pkt=ENIPTCP()
43pkt.commandId=0x63
44assert pkt.commandId == 0x63
45assert raw(pkt) == b"c\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
46b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
47
48= ENIP List Identity Default Values
49pkt=ENIPListIdentity()
50assert pkt.itemCount == 0
51
52= ENIP List Identity Custom Values
53pkt=ENIPListIdentityItem(sinAddress="192.168.1.1",
54		productNameLength=4, productName=b"test")
55assert pkt.protocolVersion == 0
56assert pkt.sinAddress == "192.168.1.1"
57assert pkt.productNameLength == 4
58assert pkt.productName == b'test'
59
60
61+ ENIP List Interfaces
62= ENIP List Interfaces Reply Command ID
63pkt=ENIPTCP()
64pkt.commandId=0x64
65assert pkt.commandId == 0x64
66
67= ENIP List Interfaces Reply Default Values
68pkt=ENIPListInterfaces()
69assert pkt.itemCount == 0
70
71= ENIP List Interfaces Reply Items Default Values
72pkt=ENIPListInterfacesItem(itemTypeCode=0x0c)
73assert pkt.itemTypeCode == 0x0c
74assert pkt.itemLength == 0
75assert pkt.itemData == b''
76
77
78+ ENIP Register Session
79= ENIP Register Session Command ID
80pkt=ENIPTCP()
81pkt.commandId=0x65
82assert pkt.commandId == 0x65
83
84= ENIP Register Session Default Values
85pkt=ENIPRegisterSession()
86assert pkt.protocolVersion == 1
87assert pkt.options == 0
88
89= ENIP Register Session Request
90registerSessionReqPkt = b'\x65\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00'
91
92pkt = ENIPTCP(registerSessionReqPkt)
93assert pkt.commandId == 0x65
94assert pkt.length == 4
95assert pkt.session == 0
96assert pkt.status == 0
97assert pkt.senderContext == 0
98assert pkt.options == 0
99assert pkt[ENIPRegisterSession].protocolVersion == 1
100assert pkt[ENIPRegisterSession].options == 0
101
102= ENIP Register Session Reply
103registerSessionRepPkt = b'\x65\x00\x04\x00\x7b\x9a\x4e\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00'
104
105pkt = ENIPTCP(registerSessionRepPkt)
106assert pkt.commandId == 0x65
107assert pkt.length == 4
108assert pkt.session == 0xa14e9a7b
109assert pkt.status == 0
110assert pkt.senderContext == 0
111assert pkt.options == 0
112assert pkt[ENIPRegisterSession].protocolVersion == 1
113assert pkt[ENIPRegisterSession].options == 0
114raw(pkt)
115
116
117+ ENIP Send RR Data
118= ENIP Send RR Data Command ID
119pkt=ENIPTCP()
120pkt.commandId=0x6f
121assert pkt.commandId == 0x6f
122
123= ENIP Send RR Data Default Values
124pkt=ENIPSendRRData()
125assert pkt.interface == 0
126assert pkt.timeout == 255
127assert pkt.itemCount == 0
128
129= ENIP Send RR Data Request
130sendRRDataReqPkt = b'\x6f\x00\x3e\x00\x7b\x9a\x4e\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\xb2\x00\x2e\x00'
131pkt = ENIPTCP(sendRRDataReqPkt)
132assert pkt.commandId == 0x6f
133assert pkt.length == 62
134assert pkt.session == 0xa14e9a7b
135assert pkt.status == 0
136assert pkt.senderContext == 0
137assert pkt.options == 0
138assert pkt.interface == 0
139assert pkt.timeout == 0
140assert pkt.itemCount == 2
141
142= ENIP Send RR Data Reply
143sendRRDataRepPkt = b'\x6f\x00\x2e\x00\x7b\x9a\x4e\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x02\x00\x00\x00\x00\x00\xb2\x00\x1e\x00'
144
145pkt = ENIPTCP(sendRRDataRepPkt)
146assert pkt.commandId == 0x6f
147assert pkt.length == 46
148assert pkt.session == 0xa14e9a7b
149assert pkt.status == 0
150assert pkt.senderContext == 0
151assert pkt.options == 0
152assert pkt.interface == 0
153assert pkt.timeout == 1024
154assert pkt.items[0].typeId == 0
155assert pkt.items[0].length == 0
156assert pkt.items[1].typeId == 0x00b2
157assert pkt.items[1].length == 30
158
159
160+ ENIP Send Unit Data
161= ENIP Send Unit Data Command ID
162pkt=ENIPTCP()
163pkt.commandId=0x70
164assert pkt.commandId == 0x70
165
166= ENIP Send Unit Data Default Values
167pkt=ENIPSendUnitData()
168assert pkt.interface == 0
169assert pkt.timeout == 255
170assert pkt.itemCount == 0
171
172= ENIP Send Unit Data
173sendUnitDataPkt = b'\x70\x00\x2d\x00\x7b\x9a\x4e\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xa1\x00\x04\x00\xcc\x60\x9a\x7b\xb1\x00\x19\x00\x01\x00'
174
175pkt = ENIPTCP(sendUnitDataPkt)
176assert pkt.commandId == 0x70
177assert pkt.length == 45
178assert pkt.session == 0xa14e9a7b
179assert pkt.status == 0
180assert pkt.senderContext == 0
181assert pkt.options == 0
182assert pkt.interface == 0
183assert pkt.timeout == 0
184assert pkt.itemCount == 2
185
186assert pkt.items[0].typeId == 0x00a1
187assert pkt.items[0].length == 4
188assert pkt.items[0].data == b'\x7b\x9a\x60\xcc'
189assert pkt.items[1].typeId == 0x00b1
190assert pkt.items[1].length == 25
191assert pkt.items[1].data == b'\x00\x01'
192