-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmaker_modbus.py
56 lines (43 loc) · 2.15 KB
/
maker_modbus.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from maker import *
from protocol.modbus_protocol import *
from setting import *
def make_basic_modbus():
modbus = Modbus()
return modbus
def make_modbus_read_packets(dmac, smac, dip, sip, dport, sport, address, data):
s_ethernet, s_ipv4, s_tcp = make_basic_protocol(dmac, smac, dip, sip, dport, sport, 0)
s_modbus = make_basic_modbus()
s_modbus.to_read_ack(address)
s_ipv4.set_total_length(s_tcp.bit_lens, s_modbus.bit_lens)
s_tcp.set_connection_status(0, s_modbus.bit_lens)
d_ethernet, d_ipv4, d_tcp = make_basic_protocol(smac, dmac, sip, dip, sport, dport, 1)
d_modbus = make_basic_modbus()
d_modbus.to_read_res(data)
d_ipv4.set_total_length(d_tcp.bit_lens, d_modbus.bit_lens)
d_tcp.set_connection_status(1, d_modbus.bit_lens)
s_pkt = pile_up(s_ethernet, s_ipv4, s_tcp, s_modbus)
d_pkt = pile_up(d_ethernet, d_ipv4, d_tcp, d_modbus)
return s_pkt, d_pkt
def make_modbus_write_packets(dmac, smac, dip, sip, dport, sport, address, data):
s_ethernet, s_ipv4, s_tcp, s_udp = make_basic_protocol(dmac, smac, dip, sip, dport, sport, 0)
s_modbus = make_basic_modbus()
s_modbus.to_write_ack(address, data)
s_ipv4.set_total_length(s_tcp.bit_lens, s_modbus.bit_lens)
s_tcp.set_connection_status(0, s_modbus.bit_lens)
d_ethernet, d_ipv4, d_tcp, d_udp = make_basic_protocol(smac, dmac, sip, dip, sport, dport, 1)
d_modbus = make_basic_modbus()
d_modbus.to_write_res(address, data)
d_ipv4.set_total_length(d_tcp.bit_lens, d_modbus.bit_lens)
d_tcp.set_connection_status(1, d_modbus.bit_lens)
s_pkt = pile_up(s_ethernet, s_ipv4, s_tcp, s_modbus)
d_pkt = pile_up(d_ethernet, d_ipv4, d_tcp, d_modbus)
return s_pkt, d_pkt
if __name__ == '__main__':
spr, dpr = make_modbus_read_packets(SMAC, DMAC, SIP, DIP, 502, 9699, b'\x05', b'\x00\x02')
spw, dpw = make_modbus_write_packets(SMAC, DMAC, SIP, DIP, 502, 9699, b'\x05', b'\x00\x02')
pkts = []
for i in range(1, 20):
spr, dpr = make_modbus_read_packets(SMAC, DMAC, SIP, DIP, 502, 9699, b'\x05', b'\x00\x02')
pkts.append(spr)
pkts.append(dpr)
pcap_wrapper([spw, dpw] + pkts, 'out/modbus_test.pcap')