Releases: MatrixEditor/icspacket
v0.2.4: IED control and MMS file transfer
This release adds support for transferring files to a remote MMS server and implements the control object model of IEC61850.
- A new example has been added:
iedctrl.pycan be used to operate on IEDs - The
putcommand can be used within themmsclient.pyto upload files to a MMS server
Full Changelog: v0.2.3...v0.2.4
v0.2.3: GOOSE and SampledValues for IEC61850
This release adds explicit support for GOOSE and SampledValues using a GOOSE_Client and SV_Client. Both require higher privileges when used unless they are reading a PCAP file.
- A new example has been added:
gooseobserv.pycan be used to print out all published GOOSE messages - Added
Timestampto convert MMS UtcTime values todatetimeobjects
v0.2.2: IEC 61850 Support
This release includes additional fixed for communication establishment using ACSE, COTP and ISO Presentation as well as a partial mapping of IEC61850 for MMS over TCP.
New Tools
iedmap.py: enumerate IEDs using MMS and display all available logical nodesdnp3linkaddr.py: dynamic resolution of the DNP3 link address of an outstation.
Full Changelog: v0.2.1...v0.2.2
0.2.1: DNP3 Utility: Reading Data Objects
This release adds a new utility that is able to read data objects from an outstation using the DNP3 protocol:
$ dnp3read.py -t [email protected] -class1
[I] Connecting to outstation (1024) at 127.0.0.1:20000...
Data Objects:
├── Object(s): Analog output event (Obj: 42, Var: 1) [Count: 1]
│ └── 32-bit without time [0]: (prefix: 7)
│ ├── comm_lost: False
│ ├── local_forced: False
│ ├── online: True
│ ├── over_range: False
│ ├── reference_err: False
│ ├── remote_forced: False
│ ├── reserved0: False
│ ├── restart: False
│ └── value: 1
└── Object(s): Octet string event (Obj: 111, Var: 5) [Count: 1]
└── Octet string event [0]: (prefix: 7)
00000000: 48 65 6c 6c 6f Hello
Full Changelog: v0.2.0...v0.2.1
v0.2.0: DNP3 Implementation
This release includes an almost complete implementation of the DNP3.0 object standard library and a sample implementation of a Master realized more or less as a client. Its interface is designed to be simple, yet effective:
from icspacket.proto.dnp3.master import DNP3_Master
from icspacket.proto.dnp3.const import FunctionCode
from icspacket.proto.dnp3.objects.util import new_class_data_request
from icspacket.proto.dnp3.objects.coding import unpack_objects
# 1. Create a new master (client) - must include the local link address
master = DNP3_Master(link_addr=0x0001)
# 2. Associate (connect) with the remote peer - must provide the remote link address
remote_link_addr = 1024
master.associate((remote_link_addr, "127.0.0.1", 20000))
# 3. Create a READ request and block until a response is received
objects = new_class_data_request(1, 2, 3)
apdu = master.request(FunctionCode.READ, objects)
# 4. decode objects using standard library - the result will be a mapping
# of DNP3Objects[group][variation] -> DNP3ObjectVariations
objects = unpack_objects(apdu.objects)This release also includes a new script dnp3dump.py that can display object data within DNP3 packets:
$ dnp3dump.py -apdu "c68100001e01000000010000000028030000000100000000"
[I] Parsed RESPONSE (129) APDU (FIR, FIN), SEQ: 6
[I] No Internal Indications (IIN)
Data Objects:
├── Object(s): Analog input (Obj: 30, Var: 1) [Range: 0-1]
│ └── 32-bit with flag [0]:
│ ├── comm_lost: False
│ ├── local_forced: False
│ ├── online: True
│ ├── over_range: False
│ ├── reference_err: False
│ ├── remote_forced: False
│ ├── reserved0: False
│ ├── restart: False
│ └── value: 0
└── Object(s): Analog output status (Obj: 40, Var: 3) [Range: 0-1]
└── single-precision, floating-point with flag [0]:
├── comm_lost: False
├── local_forced: False
├── online: True
├── over_range: False
├── reference_err: False
├── remote_forced: False
├── reserved0: False
├── restart: False
└── value: 0.0Some Fixes
hexdump()now respects the width for all parts- Add IEC61850 ASN.1 sources to package and enable compilation
Full Changelog: v0.1.0...v0.2.0
v0.1.0: Initial Release - MMS, ISO Stack and DNP3 (partial)
Implementation for the following protocols:
- TPKT (RFC1006)
- X.224 (COTP)
- X.225 / ISO 3237-1 (COSP)
- X.226 / ISO 8823 (COPP)
- X.227 ACSE
- MMS / ISO 9506-1,2
- DNP3 (partial)
- IEC61850 (only ASN.1 definitions)
Two tools were added:
mmsclient.py: handly CLI to use the file management service of the MMS protocol (ls, read, delete)mms_utility.py: implements variable operations (read, write, query) using the MMS protocol