You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am a Security Researcher Engineer at the KIOS Research and Innovation Center of Excellence and we want to run DHALSIM for our own topology similar to Mini Town for research purposes . While using DHALSIM for testing and research, I encountered the following errors and warnings and i would like some insights.
General
Across different topologies while trying to simulate the results of the Two papers mentioned we get different warrnings as you can see below
@ALL warning @minitown : Possible yaml file error @wadi: Topology does not converge even, when i open the .inp file in EPANET tool and run it standalone does not work
02:40:37 - INFO @ physical_process.py: DB Sleep time: 0.06036518378886903
02:40:37 - INFO @ physical_process.py: Temporary file location: /tmp/dhalsim_p82fxitt
02:40:37 - INFO @ physical_process.py: Simulation will run for 2880 iterations with hydraulic timestep 300.
02:40:37 - INFO @ physical_process.py: Starting epynet simulation
02:40:37 - DEBUG @ physical_process.py: Registering initial results of pumps: ['P78', 'P79']
02:40:37 - DEBUG @ generic_scada.py: SCADA starting update cache thread
02:40:40 - DEBUG @ physical_process.py: Iteration 1 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:40:42 - DEBUG @ physical_process.py: Iteration 2 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:40:45 - DEBUG @ physical_process.py: Iteration 3 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:40:48 - DEBUG @ physical_process.py: Iteration 4 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
CTown:
02:09:25 - DEBUG @ generic_scada.py: SCADA starting update cache thread
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:09:43 - DEBUG @ physical_process.py: Iteration 1 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
WADI
02:15:02 - INFO: Initializing database.
02:15:14 - INFO: Preparing wntr simulation
/usr/local/lib/python3.8/dist-packages/wntr/epanet/io.py:2075: UserWarning: Not all curves were used in Desktop/DHALSIM/examples/wadi_topology/wadi_map.inp"; added with type None, units conversion left to user
warnings.warn('Not all curves were used in "{}"; added with type None, units conversion left to user'.format(self.wn.name))
02:15:14 - INFO: Starting simulation for wadi_map topology.Simulator is: wntr
02:15:14 - INFO: DB Sleep time: 0.03677291649626526
02:15:14 - INFO: Temporary file location: /tmp/dhalsim_thjwwwao
02:15:14 - INFO: Simulation will run for 500 iterations with hydraulic timestep 60.
[Elapsed Time: 0:00:00 - 0 of 500] | | [ETA: --:--:--] 02:15:14 - INFO: Starting WNTR simulation
02:15:24 - ERROR: Error in WNTR simulation: Simulation did not converge at time 00:00:00. Reached maximum number of iterations: 2999
[Elapsed Time: 0:00:11 - 0 of 500] | | [ETA: --:--:--] 02:15:35 - ERROR: Error in WNTR simulation: Simulation did not converge at time 00:00:00. Reached maximum number of iterations: 2999
[Elapsed Time: 0:00:21 - 1 of 500] | | [ETA: 2:58:06] 02:15:45 - ERROR: Error in WNTR simulation: Simulation did not converge at time 00:00:00. Reached maximum number of iterations: 2999
[Elapsed Time: 0:00:31 - 2 of 500] | | [ETA: 2:10:29]
The text was updated successfully, but these errors were encountered:
Sorry I have been very busy these days and December/January also look fairly complicated, I will try to find time to check the issues. In the meantime, I can provide some comments that don't address them, but hopefully let you figure out workarounds:
The warnings can be ignored and should not affect the obtained results
The minitown error is probably caused by a misconfiguration in the attack name. Minitown is the smallest and first topology that we built, so very likely the attack names configured in the minitown YAML file are outdated. Finding the equivalents in https://github.com/Critical-Infrastructure-Systems-Lab/DHALSIM/blob/master/dhalsim/parser/config_parser.py and configuring them properly in the minitown YAML should do the trick
WADI. There is problem a missing paramerter in the configuration file
Dear DHALSIM Team,
I am a Security Researcher Engineer at the KIOS Research and Innovation Center of Excellence and we want to run DHALSIM for our own topology similar to Mini Town for research purposes . While using DHALSIM for testing and research, I encountered the following errors and warnings and i would like some insights.
General
Across different topologies while trying to simulate the results of the Two papers mentioned we get different warrnings as you can see below
@ALL warning
@minitown : Possible yaml file error
@wadi: Topology does not converge even, when i open the .inp file in EPANET tool and run it standalone does not work
MiniTown:
Desktop/DHALSIM/examples/minitown_topology$ sudo dhalsim minitown_config.yaml
Key 'attacks' error:
Key 'network_attacks' error:
Or(Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'naive_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d954c0>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Optional('direction'): And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('source', 'destination'))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95550>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'server_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d955e0>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'tags': [{'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}]}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'concealment_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95670>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'tags': [{'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}], 'concealment_data': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'path'), 'path': Schema(<class 'str'>)}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'value'), 'concealment_value': [{'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}]}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'payload_replay'), 'capture_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95040>)), 'capture_end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d950d0>)), 'replay_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95160>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'network_replay'), 'capture_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d951f0>)), 'capture_end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95280>)), 'replay_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95310>))}))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'unconstrained_blackbox_concealment_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95700>)), Optional('persistent'): And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or(True, False)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'replay_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95790>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'capture_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95820>)), 'capture_end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d958b0>)), 'replay_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95940>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'simple_dos'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d959d0>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Optional('direction'): And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('source', 'destination'))}))) did not validate {'name': 'plc1attack', 'type': 'mitm', 'trigger': {'type': 'Time', 'start': 250, 'end': 750}, 'tags': [{'tag': 'TANK', 'offset': -3}], 'target': 'PLC1'}
Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'naive_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d954c0>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Optional('direction'): And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('source', 'destination'))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95550>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'server_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d955e0>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'tags': [{'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}]}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'concealment_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95670>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'tags': [{'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}], 'concealment_data': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'path'), 'path': Schema(<class 'str'>)}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'value'), 'concealment_value': [{'tag': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Or('value', 'offset'): Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))}]}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'payload_replay'), 'capture_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95040>)), 'capture_end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d950d0>)), 'replay_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95160>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'network_replay'), 'capture_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d951f0>)), 'capture_end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95280>)), 'replay_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95310>))}))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'unconstrained_blackbox_concealment_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95700>)), Optional('persistent'): And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or(True, False)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'replay_mitm'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d95790>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'capture_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95820>)), 'capture_end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d958b0>)), 'replay_start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95940>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'simple_dos'), 'name': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$'), Schema(<function SchemaParser. at 0x7f0ec3d959d0>)), 'trigger': Schema(Or({'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'time'), 'start': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d953a0>)), 'end': And(<class 'int'>, Schema(<function SchemaParser. at 0x7f0ec3d95430>))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('below', 'above')), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))}, {'type': And(<class 'str'>, Use(<method 'lower' of 'str' objects>), 'between'), 'sensor': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), 'lower_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>)))), 'upper_value': And(Or(<class 'float'>, And(<class 'int'>, Use(<class 'float'>))))})), 'target': And(<class 'str'>, Regex('^[a-zA-Z0-9_]+$')), Optional('direction'): And(<class 'str'>, Use(<method 'lower' of 'str' objects>), Or('source', 'destination'))}) did not validate {'name': 'plc1attack', 'type': 'mitm', 'trigger': {'type': 'Time', 'start': 250, 'end': 750}, 'tags': [{'tag': 'TANK', 'offset': -3}], 'target': 'PLC1'}
Key 'type' error:
'naive_mitm' does not match 'mitm'
Missing keys: 'tag', Or('value', 'offset')
'server_mitm' does not match 'mitm'
'concealment_mitm' does not match 'mitm'
'unconstrained_blackbox_concealment_mitm' does not match 'mitm'
'replay_mitm' does not match 'mitm'
'simple_dos' does not match 'mitm'
Anytown:
02:40:37 - INFO @ physical_process.py: DB Sleep time: 0.06036518378886903
02:40:37 - INFO @ physical_process.py: Temporary file location: /tmp/dhalsim_p82fxitt
02:40:37 - INFO @ physical_process.py: Simulation will run for 2880 iterations with hydraulic timestep 300.
02:40:37 - INFO @ physical_process.py: Starting epynet simulation
02:40:37 - DEBUG @ physical_process.py: Registering initial results of pumps: ['P78', 'P79']
02:40:37 - DEBUG @ generic_scada.py: SCADA starting update cache thread
02:40:40 - DEBUG @ physical_process.py: Iteration 1 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:40:42 - DEBUG @ physical_process.py: Iteration 2 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:40:45 - DEBUG @ physical_process.py: Iteration 3 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:40:48 - DEBUG @ physical_process.py: Iteration 4 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
CTown:
02:09:25 - DEBUG @ generic_scada.py: SCADA starting update cache thread
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
02:09:43 - DEBUG @ physical_process.py: Iteration 1 out of 2880. Internal timestep 300
/usr/local/lib/python3.8/dist-packages/epynet/baseobject.py:63: UserWarning: requesting dynamic properties from an unsolved network
warnings.warn("requesting dynamic properties from an unsolved network")
WADI
02:15:02 - INFO: Initializing database.
02:15:14 - INFO: Preparing wntr simulation
/usr/local/lib/python3.8/dist-packages/wntr/epanet/io.py:2075: UserWarning: Not all curves were used in Desktop/DHALSIM/examples/wadi_topology/wadi_map.inp"; added with type None, units conversion left to user
warnings.warn('Not all curves were used in "{}"; added with type None, units conversion left to user'.format(self.wn.name))
02:15:14 - INFO: Starting simulation for wadi_map topology.Simulator is: wntr
02:15:14 - INFO: DB Sleep time: 0.03677291649626526
02:15:14 - INFO: Temporary file location: /tmp/dhalsim_thjwwwao
02:15:14 - INFO: Simulation will run for 500 iterations with hydraulic timestep 60.
[Elapsed Time: 0:00:00 - 0 of 500] | | [ETA: --:--:--] 02:15:14 - INFO: Starting WNTR simulation
02:15:24 - ERROR: Error in WNTR simulation: Simulation did not converge at time 00:00:00. Reached maximum number of iterations: 2999
[Elapsed Time: 0:00:11 - 0 of 500] | | [ETA: --:--:--] 02:15:35 - ERROR: Error in WNTR simulation: Simulation did not converge at time 00:00:00. Reached maximum number of iterations: 2999
[Elapsed Time: 0:00:21 - 1 of 500] | | [ETA: 2:58:06] 02:15:45 - ERROR: Error in WNTR simulation: Simulation did not converge at time 00:00:00. Reached maximum number of iterations: 2999
[Elapsed Time: 0:00:31 - 2 of 500] | | [ETA: 2:10:29]
The text was updated successfully, but these errors were encountered: