Skip to content

fix: Fix IntegrityId and response parsing for Browse.#764

Merged
gijzelaerr merged 3 commits into
gijzelaerr:masterfrom
bvanelli:browse/correct-browse-message-framing
Jul 11, 2026
Merged

fix: Fix IntegrityId and response parsing for Browse.#764
gijzelaerr merged 3 commits into
gijzelaerr:masterfrom
bvanelli:browse/correct-browse-message-framing

Conversation

@bvanelli

@bvanelli bvanelli commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

This PR does two things for the Browse to work (tested on a S7 15XX):

  • Shortens the expected response from 14 to 10 bytes since the response is not expected to carry the SessionId: Can be found on CreateObjectResponse.DeserializeFromPdu, where the SessionId is not expected to be available on the response (only request, therefore you need 4 bytes less).
  • Adds the IntegrityId as being optional for the Browse symbolic read. I believe this has to be a incremental number, otherwise the PLC drops the connection. You can this as optional on GetMultiVariablesRequest.Serialize.

There needs to be a "permanent" solution for integrating an incremental IntegrityId, but this changes were enough to acomplish a basic browse.

Here is my example browse:

async def main() -> None:
    async with S7CommPlusAsyncClient() as client:
        await client.connect(PLC_HOST, PLC_PORT, use_tls=True)
        if not client.session_setup_ok:
            logger.warning("Session setup incomplete — browse results may be incomplete")
        variables = await client.browse()
        if not variables:
            print("No variables found.")
            return
        print(f"\nFound {len(variables)} variable(s)\n")

As a heads up, I have tested the async functions, but not the sync one.

- Shorten the expected response from 14 to 10 bytes since
  the response is not expected to carry the SessionId
- Add the IntegrityId as being optional for the Browse symbolic
  read. I believe this has to be a incremental number, otherwise
  the PLC drops the connection.

@gijzelaerr gijzelaerr left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this @bvanelli — both fixes are well-motivated and the response header change is independently confirmed by @EliTheCoder's hex dump analysis in #763.

Response header 14 → 10 bytes — correct. The CreateObject response doesn't carry a SessionId field (only the request does). The S7CommPlusDriver reference confirms this. The 4-byte misalignment was causing the parser to consume the entire attribute tree (including ServerSessionVersion) as fake "object IDs".

IntegrityId — a few things to address:

  1. Sync/async inconsistency: the async read_symbolic passes with_integrity=False, but the sync _s7commplus_client.py read_symbolic wasn't updated — it still calls _build_symbolic_read_payload(access_area, lids, symbol_crc) with the default with_integrity=True. These should behave the same way.

  2. _integrity_id_read initialization: the async client references self._integrity_id_read but I don't see it being initialized or incremented anywhere in this diff. Does the base class set this up? If not, this will raise AttributeError.

  3. with_integrity=False for browse: removing the integrity ID entirely for browse reads works as a workaround, but as you note it needs a permanent solution. Worth a # TODO and maybe a tracking issue so it doesn't get lost.

The header fix is solid and I'd be happy to merge that independently if you want to split it out — it unblocks V2 session setup for anyone hitting the framing bug.

@bvanelli

Copy link
Copy Markdown
Contributor Author

Hi @gijzelaerr ,

The sync read_symbolic now passes with_integrity=False a5a7508. I tested it with the S7 on the sync path too.

_integrity_id_read initialization

This is initialized here:

self._integrity_id_read: int = 0

I believe the incrementing was never implemented, needs to be done in a follow up. It would be a lot easier to tests once we have a stable working browse. It should not matter as of now as this is ignored.

For S7CommPlusClient, I did not include it since it belongs to S7CommPlusConnection, not S7CommPlusClient. Not sure how you want this architecture to look like in the future, so I did not touch it.

Testing

Before my changes (full)
DEBUG snap7.connection: TCP connected to 192.168.101.34:102
DEBUG snap7.connection: Sent COTP Connection Request
DEBUG snap7.connection: Negotiated PDU size: 1024
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc1, length=2
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc2, length=16
DEBUG snap7.connection: Received COTP Connection Confirm
INFO snap7.connection: Connected to 192.168.101.34:102, PDU size: 1024
DEBUG s7.connection: === InitSSL === sending (26 bytes): 72 01 00 12 31 00 00 05 b3 00 00 00 00 00 00 00 00 30 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Sent 33 bytes: 03 00 00 21 02 f0 80 72 01 00 12 31 00 00 05 b3 00 00 00 00 00 00 00 00 30 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Received TPKT: version=3 length=31 payload (27 bytes): 02 f0 80 72 01 00 10 32 00 00 05 b3 00 00 00 00 70 00 00 00 00 00 00 72 01 00 00
DEBUG s7.connection: === InitSSL === received (24 bytes): 72 01 00 10 32 00 00 05 b3 00 00 00 00 70 00 00 00 00 00 00 72 01 00 00
DEBUG s7.connection: InitSSL response: version=V1, data_length=16
DEBUG s7.connection: InitSSL response body (20 bytes): 32 00 00 05 b3 00 00 00 00 70 00 00 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Sent 228 bytes: 03 00 00 e4 02 f0 80 16 03 01 00 d8 01 00 00 d4 03 03 0c 47 79 99 78 4f bc 61 3f be f0 62 e4 d8 48 db 90 23 ed fc d0 c5 91 a6 eb 5e 4c 60 92 95 f6 7f 20 bf f5 67 0d c6 56 97 8f 2b 7c 94 9b ad 16 62 3b 60 bf dc 64 00 2d 65 e7 58 e2 bc 6f f8 b3 2a 2a 00 06 13 02 13 03 13 01 01 00 00 85 00 0b 00 04 03 00 01 02 00 0a 00 08 00 06 00 1d 00 17 00 18 00 23 00 00 00 16 00 00 00 17 00 00 00 0d 00 2a 00 28 09 05 09 06 09 04 04 03 05 03 06 03 08 07 08 08 08 1a 08 1b 08 1c 08 09 08 0a 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 00 2b 00 03 02 03 04 00 2d 00 02 01 01 00 33 00 26 00 24 00 1d 00 20 5c 15 ed f6 bd 7e 49 6f 2e eb 63 ce 81 b3 0b 6b 6b c0 92 e4 9f db ea 47 f1 8d 26 da c5 f0 27 4e
DEBUG snap7.connection: Received TPKT: version=3 length=1024 payload (1020 bytes): 02 f0 80 16 03 03 00 7a 02 00 00 76 03 03 1f d3 46 27 d2 66 56 bf a9 bf 33 f8 53 be 96 8f ea 0b f7 31 e1 07 c2 3d 65 4f 68 5f 54 dc f4 73 20 bf f5 67 0d c6 56 97 8f 2b 7c 94 9b ad 16 62 3b 60 bf dc 64 00 2d 65 e7 58 e2 bc 6f f8 b3 2a 2a 13 02 00 00 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 e7 25 e6 b8 db 6c c7 ec d0 69 6d ab a9 d1 68 cf 64 fa 08 95 29 0a 9d 97 a8 a5 d8 0e 12 00 3b 54 14 03 03 00 01 01 17 03 03 00 17 3a 33 9f b9 68 c6 e0 0a 31 c0 38 3e b4 16 b7 04 ca e7 bb e2 e2 ee cc 17 03 03 02 c3 d4 bc 7a e7 2f 78 a3 60 8e 3c 7f 15 49 6e d2 ee 0f 80 c6 59 a2 3a 3b 47 c7 b1 07 b9 c3 17 27 75 91 91 c0 31 99 d7 c5 10 c8 43 e7 21 6d 4d a1 e9 02 42 32 20 64 38 d1 62 0f 87 87 51 ff 3f bd 3d 68 5e e1 62 b8 a5 ec 91 6f 72 d5 6f 62 58 3e f1 2f 66 12 c6 be 3f b0 65 fd cc dd ba 10 33 2c 28 f0 33 aa d8 a3 c3 ce f5 c9 02 d2 b1 f8 5c 6c d5 46 5a ba 83 82 d8 fd 75 65 20 ba 36 04 0c c9 75 9d 64 06 c3 9b 48 9b e7 a2 d6 49 f1 48 0a e3 e4 b0 42 41 c3 44 7c 3a 64 60 56 2a 4b a9 6d 82 c6 65 3c 98 fd 68 88 9f 99 e8 d7 b4 00 7c 8f 5e 17 ee 2a e6 43 f4 4f 1d 42 a3 52 2d db 47 85 6b 52 b8 e5 c2 05 b5 3f b8 72 18 e9 bb 20 61 93 3b d6 a3 27 62 a7 73 b0 ed ad ef 6e 32 02 6e 05 b3 aa 3d 1f 9c 33 85 6f dd 1e 63 e5 14 a9 dd f7 8a a2 ff 95 34 06 27 a4 13 a9 b2 8c 77 37 71 58 13 7f e2 6f 5f e2 7d ee a2 39 cf 65 27 62 ca ef a2 be c9 41 19 14 12 f2 13 ed 28 cd 2b 4c 31 1a 4e b8 e1 5b f6 ae b2 cd 51 20 24 34 e3 5a e0 e1 c8 d9 36 e3 6e 8d d0 a2 c5 30 67 f4 12 ca a1 3d cc 76 6e bb c1 08 ae 26 1f 18 d6 35 c3 05 87 fa 0a 40 b0 cf 3e b8 99 1d fb 73 f4 9f 4e 57 0a a4 30 ab a5 35 84 88 36 71 89 b5 70 7d 0b 3c ff 00 b4 74 dc b6 3a e1 0c 00 d3 83 98 bc a7 d2 27 07 ed d9 28 e0 e6 f9 b1 91 44 f8 c7 0d dd f7 f3 8e 47 51 93 3a dd 4d a4 de 8d 50 12 95 a7 ec e8 fb 8c 4d 7d b9 01 bf 5c a1 79 6f 32 15 62 bd b0 bf f9 ea db 27 8e a0 f4 f2 f0 fa de 98 e6 dc 09 9e 9d 4e 1e 95 79 d6 40 dc f3 c6 0e e0 ca 7b 4c 23 d3 8e bb cc 0e a2 7e 38 4b ce ac 57 d2 59 b6 f6 09 a0 c1 35 80 da 8a a5 34 b0 67 03 d3 ba 38 33 0f 93 6f 46 e8 c9 f7 3c 79 0b d6 31 49 d2 8d 93 d4 b4 39 bb 9d fb 44 e7 ca de 38 bb 31 85 72 91 20 fd ca a7 d6 c6 66 65 b2 8e 36 e8 e2 f5 ba de 24 6b 9a 79 95 e0 14 4c 03 6b f3 3d ce c2 a4 75 e9 e7 6d 50 22 e7 74 5a 13 ec 40 c3 e6 bc 23 27 0d dc 86 a2 ce 5a 24 75 ae 8d b3 0c 34 4a 35 2d ab 6f 68 47 b8 46 69 bf 51 46 b5 11 44 d7 91 d3 f8 db 67 52 01 6a 44 d1 42 ce b6 bf 29 e4 4e f0 ad eb ca 08 e8 81 77 78 c4 14 82 32 be ab 5b 31 e7 a1 d8 2a 9b 83 24 1e fc 5c 9f a7 78 fb 7c b8 5a 24 c6 12 ca 3e 1e 5b 17 45 90 16 53 0e 7b 4e 93 81 b6 cb 46 d4 c4 5c 08 1f ff 00 3c 9b 51 80 d7 cf 5d d0 5a e9 fc cc e4 3b d1 0e cc fb e6 6e 85 02 38 54 93 17 03 03 00 5f 46 b6 36 35 93 25 4b 1c c6 b8 3b 94 ed dc a7 9b 76 bf 63 8c 46 33 3d e2 5c be dd 08 55 56 77 cd 3f 4a 5a 89 3d 1e a9 0b d0 48 9f 40 ad 10 2b 74 09 56 4a 2d 98 17 92 35 d4 66 fe 09 61 f0 a3 65 a9 6b 7f de af 9d ed 18 d0 d8 a6 ec bb 74 22 b4 00 dd 8f 39 68 de 3a c7 19 85 ad b7 34 c9 ca 17 03 03 00 45 0f 42 e9 63 55 32 59 db 0a 4a 9b 9b 51 70 8c cd 9e c5 dd b3 ea c3 b0 80 e4 17 0b 11 12 fb f3 98 87 ca c7 e3 43 4a 5c
DEBUG snap7.connection: Received TPKT: version=3 length=37 payload (33 bytes): 02 f0 80 45 78 eb 87 8b 15 58 bb f0 f6 5f dc 3f fd 55 3b f4 b5 ee f6 53 4b 47 89 dd 79 43 8d c2 cb
DEBUG snap7.connection: Sent 87 bytes: 03 00 00 57 02 f0 80 14 03 03 00 01 01 17 03 03 00 45 a0 fa f9 b9 82 f7 a2 03 85 ae 53 12 e7 d2 ce 60 87 82 90 67 c3 5b 0c af ad ab f8 13 8f df 97 04 e5 4d ab 41 e0 c6 87 7e ed af 7b 96 f9 3c 31 50 a6 01 62 13 09 a6 bb 30 8b d2 1c 8a 7f 49 e2 58 28 43 36 6a 14
WARNING s7.connection: Could not extract OMS exporter secret: 'SSLObject' object has no attribute 'export_keying_material'
INFO s7.connection: TLS 1.3 activated (tunneled inside COTP frames)
DEBUG s7.connection: === CreateObject === sending (66 bytes): 72 01 00 3a 31 00 00 04 ca 00 00 00 01 00 00 01 20 36 00 00 01 1d 00 04 00 00 00 00 00 a1 00 00 00 d3 82 1f 00 00 a3 82 2c 00 12 80 c3 c9 01 a1 00 00 00 d3 81 7f 00 00 a2 a2 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Sent 95 bytes: 03 00 00 5f 02 f0 80 17 03 03 00 53 01 50 cc c5 bc d2 bd 7a de 15 c8 3b 16 f3 55 2d ec 75 9a 1f 3c 08 6c 18 b1 85 08 51 2e 9a d8 37 13 3c 2c f8 a8 62 20 19 38 c6 4d 95 fe 6d ca 48 c4 4f 09 02 85 9e 4b 49 09 4a b9 0a b5 97 a8 55 9f 6e 23 1b 51 64 59 04 0b af a0 15 09 06 90 16 c7 a2 eb
DEBUG snap7.connection: Received TPKT: version=3 length=517 payload (513 bytes): 02 f0 80 17 03 03 00 fa c7 22 e7 f8 ab 52 74 29 ac c5 db 3b 67 5e 07 a9 64 38 99 dc 36 3f 5f 82 5e e4 f2 d2 0b 77 9d f0 ec bd a6 81 40 cd 9f a8 4b 6c e4 f6 5c f9 09 25 a0 f8 8f e1 d2 bb c4 95 8d a8 e2 a2 a5 85 c8 2b f7 28 3d 51 71 0e b3 ac ba 34 80 1a 19 2e ee 8d e0 10 cd 57 54 33 df 0a 76 d1 5e 81 d4 21 44 fc 0a 41 76 20 fe 0c 38 6b d3 35 65 3d ce 90 2e d0 99 70 3c 98 c0 20 bb 7a 24 94 7b c8 a7 1b 9d 38 97 ca ce 77 d0 c4 de f0 61 07 aa 4f 26 0b 9c 1a 89 4d 77 d2 9f d1 a9 fd 3e 82 e4 65 3f 99 1c d3 b1 60 16 18 d8 f4 ef 0d f3 a2 52 c2 f6 38 28 33 cf fd d1 e4 98 b5 86 5a 66 de f8 97 dd b9 f0 b9 42 ca 66 17 78 f1 fc 74 f7 ba 37 c6 28 5c b0 ca 0b 3c 44 64 4c 1d 0f b3 41 73 31 a0 6b 5d 20 21 a4 af c4 34 c4 1d 7c 50 b1 f4 92 8a 20 ca a1 21 fd 8b 1a d7 ec 1b 88 20 30 01 17 03 03 00 fa 2f 1a 39 2b fc 19 dc 36 38 c2 4c cc bd 35 39 da 78 62 79 c4 2b 88 71 b2 33 45 b2 f0 85 52 77 ec 9d 87 69 1a d3 60 67 48 f8 1f 91 d2 a3 b2 fd b7 c4 55 77 1d 95 b7 dc e5 d3 66 f9 0a 4c 12 16 07 4f e1 dc 3f 26 bc 4e dc a5 1c b6 c0 af c9 2e aa 3e df 9a 75 44 28 61 6a d2 9e bb 0c 0c c0 3d 78 00 dd 88 1c ec 81 07 51 90 f8 06 39 90 57 35 c5 3b cc 3c 99 7d 2f 84 19 88 2f 3b 73 7a 2b 6e 29 60 9f c6 59 9d c2 90 6e 35 17 41 a1 d7 01 5e de d9 ec 93 5d 19 75 2d cb 4e a8 1e 9e a1 cc 8f 27 ca 4d ed be cc ad 72 fd 29 a2 f8 81 3c 8c 68 f9 15 f4 cd 48 9b b8 cb 97 85 3c 4f 4d 57 fd 82 e2 b9 e0 53 0f c2 6f 88 6f 3b 58 58 74 94 67 42 33 e9 77 14 f2 32 ee 72 34 82 45 18 21 3a 32 e4 7f 89 eb 17 4b b4 89 87 45 76 30 ab 17 78 46 79 4d 3f 55 01 e6 dc c4 98 8d b1 38
DEBUG snap7.connection: Received TPKT: version=3 length=254 payload (250 bytes): 02 f0 80 17 03 03 00 f2 39 49 ea 7e 34 9a b9 db 00 7a ac 57 17 3d b0 e7 06 d3 b6 d6 5b 6a 14 59 4a f6 d7 3d ed 8e 64 35 82 fa 6f a6 d1 68 6e b3 23 f4 3c 8a 35 ec ee f2 08 9a 47 c0 06 d7 c1 16 12 8a 97 58 60 38 86 72 60 ac e1 51 41 8e 0f a1 0f 24 97 c8 4b 41 a0 9e d6 2c 53 e3 ac f6 25 d2 74 ab b0 9a 85 19 5f d0 34 c2 fb e6 6e b7 d1 15 ff a4 13 5a 00 06 70 da 9d 8c b8 95 ea fa 5e 3c 23 44 f5 d7 0b f3 c9 31 fa 22 4e 6e e5 ad 5d 82 1a 1b b3 87 6b 9c 64 26 40 71 06 f9 2e 68 40 88 5b 5d 90 0c 0b 97 46 e3 63 62 fa 03 0b 16 38 56 3b 9f 9a 78 36 29 d0 5c c3 37 ac bc 77 67 70 f7 47 8b eb e7 04 a7 85 9b 56 33 a1 7a 30 e9 c8 70 b6 27 bf 0e 75 d8 d2 39 19 2e 34 63 4c 88 dd 81 09 bc 91 7c 31 82 ff 3b c9 05 c1 09 cd 6a f9 5c ff af 53 98 05 b0 a0 f8 9f 11
DEBUG s7.connection: === CreateObject === received (225 bytes): 72 01 00 d9 32 00 00 04 ca 00 00 00 01 36 00 02 87 80 80 99 30 87 80 80 99 31 a1 00 00 01 20 82 1f 01 00 a3 81 69 00 15 13 30 30 3a 31 38 31 42 37 42 30 38 34 37 44 31 31 36 39 34 a3 82 2b 00 04 02 a3 82 2d 00 15 1c 4f 4d 53 50 5f 31 32 2e 30 30 2e 30 33 2e 31 39 5f 33 35 2e 31 39 2e 30 30 2e 30 31 a3 82 2f 10 02 14 ff 3e 4a 55 84 af 61 5a 0a cb d4 c5 42 e0 f9 90 49 a8 4c e8 a3 82 32 00 17 00 00 01 3a 82 3b 00 04 86 00 82 3c 00 04 85 40 82 3d 00 04 84 81 84 40 82 3e 00 04 84 81 84 40 82 3f 00 15 1a 31 3b 36 45 53 37 20 35 31 32 2d 31 43 4b 30 31 2d 30 41 42 30 3b 56 32 2e 39 82 40 00 15 0a 32 3b 33 34 33 36 36 32 34 37 82 41 00 03 00 03 00 a2 00 00 00 00 72 01 00 00
DEBUG s7.connection: CreateObject response: version=V1, data_length=217
DEBUG s7.connection: CreateObject response body (221 bytes): 32 00 00 04 ca 00 00 00 01 36 00 02 87 80 80 99 30 87 80 80 99 31 a1 00 00 01 20 82 1f 01 00 a3 81 69 00 15 13 30 30 3a 31 38 31 42 37 42 30 38 34 37 44 31 31 36 39 34 a3 82 2b 00 04 02 a3 82 2d 00 15 1c 4f 4d 53 50 5f 31 32 2e 30 30 2e 30 33 2e 31 39 5f 33 35 2e 31 39 2e 30 30 2e 30 31 a3 82 2f 10 02 14 ff 3e 4a 55 84 af 61 5a 0a cb d4 c5 42 e0 f9 90 49 a8 4c e8 a3 82 32 00 17 00 00 01 3a 82 3b 00 04 86 00 82 3c 00 04 85 40 82 3d 00 04 84 81 84 40 82 3e 00 04 84 81 84 40 82 3f 00 15 1a 31 3b 36 45 53 37 20 35 31 32 2d 31 43 4b 30 31 2d 30 41 42 30 3b 56 32 2e 39 82 40 00 15 0a 32 3b 33 34 33 36 36 32 34 37 82 41 00 03 00 03 00 a2 00 00 00 00 72 01 00 00
DEBUG s7.connection: CreateObject response header: opcode=0x32 function=0x04CA seq=1 session=0x00000CB1 transport=0x80
DEBUG s7.connection: CreateObject response payload: 80 99 30 87 80 80 99 31 a1 00 00 01 20 82 1f 01 00 a3 81 69 00 15 13 30 30 3a 31 38 31 42 37 42 30 38 34 37 44 31 31 36 39 34 a3 82 2b 00 04 02 a3 82 2d 00 15 1c 4f 4d 53 50 5f 31 32 2e 30 30 2e 30 33 2e 31 39 5f 33 35 2e 31 39 2e 30 30 2e 30 31 a3 82 2f 10 02 14 ff 3e 4a 55 84 af 61 5a 0a cb d4 c5 42 e0 f9 90 49 a8 4c e8 a3 82 32 00 17 00 00 01 3a 82 3b 00 04 86 00 82 3c 00 04 85 40 82 3d 00 04 84 81 84 40 82 3e 00 04 84 81 84 40 82 3f 00 15 1a 31 3b 36 45 53 37 20 35 31 32 2d 31 43 4b 30 31 2d 30 41 42 30 3b 56 32 2e 39 82 40 00 15 0a 32 3b 33 34 33 36 36 32 34 37 82 41 00 03 00 03 00 a2 00 00 00 00 72 01 00 00
DEBUG s7.connection: Session created: id=0x00000CB1 (3249), version=V1
DEBUG s7.connection: ServerSessionVersion not found in CreateObject response
WARNING s7.connection: PLC did not provide a scalar ServerSessionVersion attribute. This is the V1-initial S7-1200 firmware band (FW < 4.5 predating TLS) which sends a Struct(314) value and requires the proprietary SessionKey handshake — not yet implemented in python-snap7 (tracked in issue #710). Falling back to legacy PUT/GET: db_read/db_write will work, browse() will not.
INFO s7.connection: V2 IntegrityId tracking enabled
INFO s7.connection: S7CommPlus connected to 192.168.101.34:102, version=V2, session=3249, tls=True
DEBUG s7.client: S7CommPlus session setup not OK, disconnecting
DEBUG snap7.connection: Sent 55 bytes: 03 00 00 37 02 f0 80 17 03 03 00 2b 33 3a 2a 28 db dd 05 4c 49 11 87 36 6b 36 87 1d 61 ec 0d 60 0c 4d 48 d3 d4 f2 d1 c3 84 a1 1b d3 7f fb f6 4a 1a a2 5a b0 16 19 ca
INFO snap7.connection: Disconnected from 192.168.101.34:102
INFO s7.client: S7CommPlus not available, using legacy S7 for 192.168.101.34:102
INFO snap7.client: S7Client initialized (pure Python implementation)
DEBUG snap7.connection: TCP connected to 192.168.101.34:102
DEBUG snap7.connection: Sent COTP Connection Request
DEBUG snap7.connection: Negotiated PDU size: 1024
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc1, length=2
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc2, length=2
DEBUG snap7.connection: Received COTP Connection Confirm
INFO snap7.connection: Connected to 192.168.101.34:102, PDU size: 1024
DEBUG snap7.connection: Sent 25 bytes: 03 00 00 19 02 f0 80 32 01 00 00 00 01 00 08 00 00 f0 00 00 01 00 01 01 e0
DEBUG snap7.connection: Received TPKT: version=3 length=27 payload (23 bytes): 02 f0 80 32 03 00 00 00 01 00 08 00 00 00 00 f0 00 00 01 00 01 01 e0
INFO snap7.client: Negotiated PDU length: 480
INFO snap7.client: [192.168.101.34 R0/S1] Connected to 192.168.101.34:102 rack 0 slot 1
INFO snap7.client: Auto-tuned max_parallel=4 (PDU=480)
INFO s7.client: Legacy S7 connected to 192.168.101.34:102
Traceback (most recent call last):
  File "/Users/brunno.vanelli/Documents/git/python-snap7/example/s7commplus1_browse_sync.py", line 127, in <module>
    variables = client.browse()
  File "/Users/brunno.vanelli/Documents/git/python-snap7/s7/client.py", line 303, in browse
    raise RuntimeError("browse() requires S7CommPlus connection")
RuntimeError: browse() requires S7CommPlus connection
After my changes (partial, collapsed all browse calls)
DEBUG snap7.connection: TCP connected to 192.168.101.34:102
DEBUG snap7.connection: Sent COTP Connection Request
DEBUG snap7.connection: Negotiated PDU size: 1024
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc1, length=2
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc2, length=16
DEBUG snap7.connection: Received COTP Connection Confirm
INFO snap7.connection: Connected to 192.168.101.34:102, PDU size: 1024
DEBUG s7.connection: === InitSSL === sending (26 bytes): 72 01 00 12 31 00 00 05 b3 00 00 00 00 00 00 00 00 30 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Sent 33 bytes: 03 00 00 21 02 f0 80 72 01 00 12 31 00 00 05 b3 00 00 00 00 00 00 00 00 30 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Received TPKT: version=3 length=31 payload (27 bytes): 02 f0 80 72 01 00 10 32 00 00 05 b3 00 00 00 00 70 00 00 00 00 00 00 72 01 00 00
DEBUG s7.connection: === InitSSL === received (24 bytes): 72 01 00 10 32 00 00 05 b3 00 00 00 00 70 00 00 00 00 00 00 72 01 00 00
DEBUG s7.connection: InitSSL response: version=V1, data_length=16
DEBUG s7.connection: InitSSL response body (20 bytes): 32 00 00 05 b3 00 00 00 00 70 00 00 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Sent 228 bytes: 03 00 00 e4 02 f0 80 16 03 01 00 d8 01 00 00 d4 03 03 86 90 6f f5 a2 28 90 65 de fb 75 dd c2 48 01 c2 6d 5e 13 2b 28 76 69 08 6b 8f 54 e8 ae 92 ac 78 20 8a 37 6f 6c c9 fc cf d8 52 ef 69 98 cb f9 14 4c 40 d7 8b 98 2b 41 73 38 d6 2b 2e 70 c3 8a f3 7b 00 06 13 02 13 03 13 01 01 00 00 85 00 0b 00 04 03 00 01 02 00 0a 00 08 00 06 00 1d 00 17 00 18 00 23 00 00 00 16 00 00 00 17 00 00 00 0d 00 2a 00 28 09 05 09 06 09 04 04 03 05 03 06 03 08 07 08 08 08 1a 08 1b 08 1c 08 09 08 0a 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 00 2b 00 03 02 03 04 00 2d 00 02 01 01 00 33 00 26 00 24 00 1d 00 20 dd 98 cb ec ac ef 52 19 e4 a1 22 cf b2 cb bf 57 51 cc af c0 e0 47 8b a3 7b 5a 97 ce b6 75 ce 0a
DEBUG snap7.connection: Received TPKT: version=3 length=1024 payload (1020 bytes): 02 f0 80 16 03 03 00 7a 02 00 00 76 03 03 43 ab ec ef e6 37 c4 40 9c 46 3e bb e9 53 ea ab ce 82 0e 0c 27 3a 40 01 7d cf b2 55 3f c2 2c c4 20 8a 37 6f 6c c9 fc cf d8 52 ef 69 98 cb f9 14 4c 40 d7 8b 98 2b 41 73 38 d6 2b 2e 70 c3 8a f3 7b 13 02 00 00 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 f8 fa 64 a5 48 fb a0 3e 2f d7 7f d6 d2 bd 5c d4 4f 23 41 5a 26 ab d4 e6 79 92 e8 0b 3c d5 01 11 14 03 03 00 01 01 17 03 03 00 17 56 12 ab 68 2c b2 73 88 7f 28 9b 48 13 b2 30 81 1a aa 85 1e c2 05 24 17 03 03 02 c3 e0 9b fd 6c 97 63 6c a6 c9 9c e3 c9 84 3b 64 42 a5 88 50 79 a1 a5 b1 d0 81 f5 d0 6a b3 43 86 3f 7d e5 f5 d5 fa 2c ca d3 cb d6 2d 48 51 33 5b c0 2a 79 fa 00 52 c5 dd 35 7b 1e 9d c1 6b 47 27 4d d5 55 b8 25 5f 46 c6 17 9d d5 f2 ad 08 ef d6 0f d3 93 18 fa 0d 70 b2 af af 21 56 ee 44 57 a2 40 38 f9 fd e1 af da d5 86 c3 ac ef b7 94 3e 1c 1a f5 0d fa 4b 5e 2d 0f 88 b8 4d ba a9 05 15 38 0c 4f d8 ab c4 0a aa 22 21 0f af 2a 42 e1 9b 09 97 73 b2 e4 0c 08 20 c1 cf 24 ef 1c 07 a6 05 64 9d 98 91 61 c6 a5 0e 9c 79 a1 14 b4 17 a3 50 58 8e a7 ca ae f0 2c 60 3a 54 7c 63 65 b4 02 5a 6a b8 4d 9a 64 d8 3e dd 1f 82 90 0b e4 04 e0 35 27 a7 f4 18 8d 66 31 08 56 e8 fd 0b 95 90 4c de 9c 4c 6f 7b 05 1b ef 6d ee 61 e0 9d 9b f0 d2 c8 e8 80 3f a3 71 e9 af 7c d1 f8 f4 4b 27 7a 08 71 57 29 93 ae 07 56 f5 41 93 f5 da 98 44 21 87 b9 b4 49 b2 03 35 50 95 2b 85 61 c5 7b 9b 14 72 76 96 2d 2c 36 e6 06 85 90 8f 9c 01 3c c1 05 86 15 f1 eb 0f df 43 1c 27 93 77 d5 06 f8 9d 98 bf 5f 4a f9 e9 96 57 88 90 c2 a9 2a c7 cb 9e 63 e2 bd 7e 9d 58 b2 fe c4 00 9a d7 ad c2 62 ce 1d c7 f5 65 f2 2d 4d 4b 9d 33 db d3 95 1c d8 9b 30 9a 63 d6 25 55 9e 7d 04 4d b8 13 69 a3 ec 40 16 0c cf fb 77 5c dc f5 36 7a 31 f9 03 bb 51 84 f3 cc 4d 10 cc 42 42 1a 7e 59 e6 de d3 30 89 47 3f 85 4f cc a7 48 37 eb 1b 48 a3 11 65 08 fd 43 6d e4 f8 cf 27 a7 0d d4 51 c9 38 92 be 28 24 c8 5f 2b 20 10 50 fe a0 54 e9 2a ef f0 a1 af 25 c7 81 17 89 e2 5a 71 2e dd 11 19 c7 12 34 57 53 83 8c 6b 2a f0 dc 46 79 68 ba bb 84 db 95 66 31 09 cf c9 ad d8 ce d3 c8 bb 3c eb e4 50 49 3c 20 7e dc c4 9d 77 63 8f 3c 08 3c 30 53 de b8 93 50 ac d7 16 f1 69 6b d2 ba 20 e4 bd 84 46 8f 9f 55 2e 0d b2 65 1c 33 85 5c 32 6b 66 4c 62 13 68 5b 4a a7 53 20 91 2d c5 71 38 6b bb 61 7f 02 50 33 fe 80 90 07 8a 63 41 13 84 c1 3c df d3 66 78 20 94 03 89 ab e9 f1 0e 4e 7a c6 f5 ac 80 03 6f 4c 2e 6a d3 59 4f ef 4a cf 4d 17 d5 5c b6 36 8b 6d f7 9a 7f 5c 06 03 01 bd 5d d7 e5 89 02 4b 40 43 47 df 81 e5 73 a5 68 76 df 90 81 85 1f 84 95 e6 c8 e8 ad 4b 01 ec 0c 05 04 22 ac 98 19 16 69 bc 87 49 0d 6d a6 f6 3b 74 00 e3 6e 00 ba 6c aa 70 8e 96 67 69 7c f9 10 fc 3f 8f 0f f9 8b c1 a8 d4 ca 85 33 b9 0d e4 f6 15 f5 17 03 03 00 60 b7 d9 42 89 bd 39 af 33 73 d9 b2 da 88 3a dc e5 73 2f ac 9b 31 d8 0e 38 32 6f 25 56 fd 88 05 cc b6 81 b3 00 7e 22 95 3d 50 f4 f5 e0 70 06 75 b2 f8 6b 6d fa 45 b7 0b 6a 4b c5 cd c3 b2 0f 1e cf 55 01 cb 86 e9 70 61 51 86 8d 37 db d6 4d e6 0c a8 6b c7 d9 af dd 5c db ba 40 d6 f8 2c 53 a4 93 17 03 03 00 45 0b 90 58 c0 42 2f 6d e5 25 01 11 d3 30 fb 7a 4d ea 4f 41 cb 79 b4 55 64 8b c8 94 9f 2b 38 26 7c d8 84 f5 52 3d 72
DEBUG snap7.connection: Received TPKT: version=3 length=38 payload (34 bytes): 02 f0 80 52 cc fe b0 42 49 77 d6 c1 2f b6 29 0f fb 0f 10 ed 63 5a fb 6a db f8 69 de 61 ef d5 cc 69 70
DEBUG snap7.connection: Sent 87 bytes: 03 00 00 57 02 f0 80 14 03 03 00 01 01 17 03 03 00 45 91 8e 33 2e 33 4d 2a 25 7d 13 9b 41 a2 49 d1 09 9e 98 08 f6 06 8e 37 8c 21 e9 a6 a3 90 16 38 aa cb af c1 29 8b 30 a8 52 99 2e 07 cf a5 b1 25 8c 64 e7 3a 91 33 3a 33 5e 1a 18 71 13 82 00 52 f2 fa 18 b2 22 08
WARNING s7.connection: Could not extract OMS exporter secret: 'SSLObject' object has no attribute 'export_keying_material'
INFO s7.connection: TLS 1.3 activated (tunneled inside COTP frames)
DEBUG s7.connection: === CreateObject === sending (66 bytes): 72 01 00 3a 31 00 00 04 ca 00 00 00 01 00 00 01 20 36 00 00 01 1d 00 04 00 00 00 00 00 a1 00 00 00 d3 82 1f 00 00 a3 82 2c 00 12 80 c3 c9 01 a1 00 00 00 d3 81 7f 00 00 a2 a2 00 00 00 00 72 01 00 00
DEBUG snap7.connection: Sent 95 bytes: 03 00 00 5f 02 f0 80 17 03 03 00 53 00 d4 f7 8b 07 0e 8c 9f 74 b1 47 59 ab 89 6d 38 4c 24 cb e7 34 d8 dc cd bf 6d aa ad 83 a3 ab 47 e7 ec 26 e8 3d ba 3f fa 47 e0 1b 83 6b 67 8a d5 76 b6 be 53 46 de fb 46 e6 d5 91 fa 50 22 52 91 48 9f 8c 2c b4 39 45 19 fa 80 08 f9 ae 8e 96 b5 3f 3b 3d
DEBUG snap7.connection: Received TPKT: version=3 length=517 payload (513 bytes): 02 f0 80 17 03 03 00 fa 05 51 83 52 60 7e af f7 b6 7f 95 72 e1 1b 10 b1 64 9b 5f 31 36 22 f2 6c 68 a6 a0 58 18 ba 0e ec 92 66 22 e3 3a dc c0 3c 00 0a 5d fa 8f aa 20 bd 1b 39 0b 01 23 e3 2d 03 72 fc 00 1a 1d 32 90 b4 16 0c f6 f5 03 13 c7 3f 00 dc ec ea 59 35 5c 88 a6 80 ba 50 c6 ae c4 6a 00 db dd f1 15 58 4e 39 1e f0 84 02 dd b0 19 17 10 f0 bc 67 d3 d4 82 a1 f7 bf d2 0e c5 78 0a bf 82 2c 1e 9b 6b ec 7e 1a 7a 2b ab 06 99 dd 7c d6 e8 22 50 9f e5 e8 f5 44 df f2 7e 3e 9d 2d 32 53 fa 51 a2 13 5e e6 26 ce fa a2 b1 a6 96 76 33 91 d3 4f 63 f1 a6 35 39 54 a6 84 45 1f 79 a4 0c ea 38 bd 8a 1e 53 dc c9 82 5b 7e 64 96 21 96 41 f7 d2 ef 95 43 51 0a 82 0f 4e ac 1e 0a 06 11 7a cf 14 c8 88 32 21 04 2e 33 95 75 4b fc fe f5 1a db 1e 68 b6 17 a9 88 2f 5f 1e e5 af da 2a 14 6c c9 ac 95 17 03 03 00 fa 2e 5b cc 4c a7 55 03 c2 5e 65 64 72 27 fb 61 04 23 0a dc 2d 09 97 28 47 97 5f 78 39 c7 48 30 70 87 9a 01 28 cb 32 b6 44 30 27 20 d5 c6 19 10 50 f3 b1 d4 fb 61 d6 66 ec e1 26 f5 e2 19 c0 3b 15 74 e4 58 4d b0 b6 21 3b 67 82 2e 40 e2 c1 e7 16 a0 cd e2 bd ea e2 1e bb 18 67 dd e3 8d 73 d7 99 29 d9 7f 02 36 54 a3 12 e8 9e 9c 42 5a 84 33 2d 2e 34 3c c3 b8 dd 0c c7 a7 f7 cf 57 31 23 01 45 dc 81 cb f0 fa 3c 85 ed 16 54 54 ee 31 64 29 af 35 17 5a dc f3 7a 80 53 84 cf 01 1e 81 23 8c ef 25 5d e2 e1 7a 78 8a e7 ae c2 59 cd e0 44 bc f9 09 a2 f0 82 8a 3e 22 67 ea f1 19 ac 6e 74 b5 09 71 72 c8 3b a2 09 69 64 fb 3b 56 b2 e2 78 79 ac 90 3d c1 7d 50 01 59 0d ed 89 fa 6c eb a0 6c 02 63 88 f8 d5 a3 c7 61 e2 f5 4f 2e e3 ef 49 da 5c 5b 04 27 ed a9 23 bf 62 18 53
DEBUG snap7.connection: Received TPKT: version=3 length=254 payload (250 bytes): 02 f0 80 17 03 03 00 f2 cd ef c0 0d ce 43 16 68 1a 75 cc 4c 95 fe 11 b5 a9 d4 e1 5f 75 82 68 9c ae a4 eb 34 c1 8c 48 9c 4b 6d 9c ac ff c3 7d ff 52 1f 7f f4 57 65 58 83 c1 be fc 8f 89 ea b5 cb 11 f0 8c af a0 62 1a e7 33 4b a4 b3 e9 91 07 1e 30 b4 f6 7f 76 2c 1f b8 20 1f f2 37 58 a1 22 1e b6 5a 1e 30 81 fc 76 00 c2 43 40 66 a2 d9 71 b1 7b 4d fe d8 7a 4e 62 59 b1 9a c8 ab 91 e6 48 f4 46 82 55 c4 ae 16 68 ac b1 b0 61 98 86 d3 b8 0b 56 23 41 35 21 af 5e 8c 2b 20 f1 62 c7 eb 26 a4 92 80 d1 f2 e0 d4 cd ff 22 dd a2 70 cd 2b bb ff cf a8 14 36 f6 9c 01 84 65 9c e9 5b d8 54 d3 92 be c2 9b 83 83 54 aa 6f 83 3c 66 c0 f9 01 6b 5e a2 0d 12 cf eb 0a 7a 3b 7e 00 d7 68 68 a5 64 ad 4c 8b 5f b5 23 9b 6a 56 d5 78 6f bb c9 25 02 91 d3 af 6c 8d e2 38 64 16 95 5a
DEBUG s7.connection: === CreateObject === received (225 bytes): 72 01 00 d9 32 00 00 04 ca 00 00 00 01 36 00 02 87 80 80 99 30 87 80 80 99 31 a1 00 00 01 20 82 1f 01 00 a3 81 69 00 15 13 30 30 3a 31 38 31 42 37 42 30 38 34 37 44 31 31 36 39 34 a3 82 2b 00 04 02 a3 82 2d 00 15 1c 4f 4d 53 50 5f 31 32 2e 30 30 2e 30 33 2e 31 39 5f 33 35 2e 31 39 2e 30 30 2e 30 31 a3 82 2f 10 02 14 8b 03 cd a4 5c 6d 65 ce 18 9c a4 3a a9 4f 43 29 73 1d 91 28 a3 82 32 00 17 00 00 01 3a 82 3b 00 04 86 00 82 3c 00 04 85 40 82 3d 00 04 84 81 84 40 82 3e 00 04 84 81 84 40 82 3f 00 15 1a 31 3b 36 45 53 37 20 35 31 32 2d 31 43 4b 30 31 2d 30 41 42 30 3b 56 32 2e 39 82 40 00 15 0a 32 3b 33 34 33 36 36 32 34 37 82 41 00 03 00 03 00 a2 00 00 00 00 72 01 00 00
DEBUG s7.connection: CreateObject response: version=V1, data_length=217
DEBUG s7.connection: CreateObject response body (221 bytes): 32 00 00 04 ca 00 00 00 01 36 00 02 87 80 80 99 30 87 80 80 99 31 a1 00 00 01 20 82 1f 01 00 a3 81 69 00 15 13 30 30 3a 31 38 31 42 37 42 30 38 34 37 44 31 31 36 39 34 a3 82 2b 00 04 02 a3 82 2d 00 15 1c 4f 4d 53 50 5f 31 32 2e 30 30 2e 30 33 2e 31 39 5f 33 35 2e 31 39 2e 30 30 2e 30 31 a3 82 2f 10 02 14 8b 03 cd a4 5c 6d 65 ce 18 9c a4 3a a9 4f 43 29 73 1d 91 28 a3 82 32 00 17 00 00 01 3a 82 3b 00 04 86 00 82 3c 00 04 85 40 82 3d 00 04 84 81 84 40 82 3e 00 04 84 81 84 40 82 3f 00 15 1a 31 3b 36 45 53 37 20 35 31 32 2d 31 43 4b 30 31 2d 30 41 42 30 3b 56 32 2e 39 82 40 00 15 0a 32 3b 33 34 33 36 36 32 34 37 82 41 00 03 00 03 00 a2 00 00 00 00 72 01 00 00
DEBUG s7.connection: CreateObject response header: opcode=0x32 function=0x04CA seq=1 session=0x70000CB0 transport=0x36
DEBUG s7.connection: CreateObject response payload: 00 02 87 80 80 99 30 87 80 80 99 31 a1 00 00 01 20 82 1f 01 00 a3 81 69 00 15 13 30 30 3a 31 38 31 42 37 42 30 38 34 37 44 31 31 36 39 34 a3 82 2b 00 04 02 a3 82 2d 00 15 1c 4f 4d 53 50 5f 31 32 2e 30 30 2e 30 33 2e 31 39 5f 33 35 2e 31 39 2e 30 30 2e 30 31 a3 82 2f 10 02 14 8b 03 cd a4 5c 6d 65 ce 18 9c a4 3a a9 4f 43 29 73 1d 91 28 a3 82 32 00 17 00 00 01 3a 82 3b 00 04 86 00 82 3c 00 04 85 40 82 3d 00 04 84 81 84 40 82 3e 00 04 84 81 84 40 82 3f 00 15 1a 31 3b 36 45 53 37 20 35 31 32 2d 31 43 4b 30 31 2d 30 41 42 30 3b 56 32 2e 39 82 40 00 15 0a 32 3b 33 34 33 36 36 32 34 37 82 41 00 03 00 03 00 a2 00 00 00 00 72 01 00 00
DEBUG s7.connection: Session created: id=0x70000CB0 (1879051440), version=V1
INFO s7.connection: ServerSessionVersion captured: 87 bytes
DEBUG s7.connection: === SetupSession === sending (146 bytes): 72 02 00 8a 31 00 00 05 42 00 00 00 02 70 00 0c b0 36 70 00 0c b0 01 01 82 32 01 00 17 00 00 01 3a 82 3b 00 04 86 00 82 3c 00 04 85 40 82 3d 00 04 84 81 84 40 82 3e 00 04 84 81 84 40 82 3f 00 15 1a 31 3b 36 45 53 37 20 35 31 32 2d 31 43 4b 30 31 2d 30 41 42 30 3b 56 32 2e 39 82 40 00 15 0a 32 3b 33 34 33 36 36 32 34 37 82 41 00 03 00 03 00 00 00 00 04 e8 89 69 00 12 00 00 00 00 89 6a 00 13 00 89 6b 00 04 00 00 00 00 00 00 72 02 00 00
DEBUG snap7.connection: Sent 175 bytes: 03 00 00 af 02 f0 80 17 03 03 00 a3 18 0a 38 82 40 54 c0 28 44 6a 90 22 06 79 0a d6 bc d5 65 fd 60 5d 2c 42 c6 ba 24 23 4b 7a 15 28 94 53 58 24 ff bb 1b 2b 7b 4a 7e 5a cb a9 79 b3 b2 d7 58 36 27 63 09 23 ba af db e2 6c 43 96 cb d8 9b 9c 79 17 4a c9 8b e0 34 30 e4 d9 ea 56 71 58 e6 2a 79 d7 f2 9c 1f 27 da a9 70 78 55 8c 90 d0 03 f7 ae 39 bb 56 8c 46 ed 9f 3e 45 1a 6c 5b 07 bb 26 b3 81 41 4a d2 c9 47 4d 89 66 f5 ee a7 20 8f fd 3a 79 8e 92 92 5c 25 5e f7 82 f7 18 d2 b3 0b 47 75 29 60 ef 4f 8c 87 2e ca 07 bf f5 50 08 ed 0a
DEBUG snap7.connection: Received TPKT: version=3 length=54 payload (50 bytes): 02 f0 80 17 03 03 00 2a d7 6e a6 22 60 b1 83 cb ee 59 31 71 19 80 96 6d 6c 2f dc 45 e4 f8 0a 16 bb 2d 4f e9 03 01 a8 75 96 01 bb c4 3d 93 2b d4 81 dd
DEBUG s7.connection: === SetupSession === received (25 bytes): 72 02 00 11 32 00 00 05 42 00 00 00 02 34 00 00 00 00 00 00 00 72 02 00 00
DEBUG s7.connection: SetupSession response: function=0x0542
INFO s7.connection: Session setup completed successfully
INFO s7.connection: V2 IntegrityId tracking enabled
INFO s7.connection: S7CommPlus connected to 192.168.101.34:102, version=V2, session=1879051440, tls=True
INFO s7.client: Connected to 192.168.101.34:102 using S7CommPlus
INFO snap7.client: S7Client initialized (pure Python implementation)
DEBUG snap7.connection: TCP connected to 192.168.101.34:102
DEBUG snap7.connection: Sent COTP Connection Request
DEBUG snap7.connection: Negotiated PDU size: 1024
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc1, length=2
DEBUG snap7.connection: Unsupported COTP parameter: code=0xc2, length=2
DEBUG snap7.connection: Received COTP Connection Confirm
INFO snap7.connection: Connected to 192.168.101.34:102, PDU size: 1024
DEBUG snap7.connection: Sent 25 bytes: 03 00 00 19 02 f0 80 32 01 00 00 00 01 00 08 00 00 f0 00 00 01 00 01 01 e0
DEBUG snap7.connection: Received TPKT: version=3 length=27 payload (23 bytes): 02 f0 80 32 03 00 00 00 01 00 08 00 00 00 00 f0 00 00 01 00 01 01 e0
INFO snap7.client: Negotiated PDU length: 480
INFO snap7.client: [192.168.101.34 R0/S1] Connected to 192.168.101.34:102 rack 0 slot 1
INFO snap7.client: Auto-tuned max_parallel=4 (PDU=480)
INFO s7.client: Legacy S7 connected to 192.168.101.34:102
DEBUG s7.connection:   IntegrityId: read=0
DEBUG s7.connection: === SEND REQUEST === function_code=0x04BB seq=3 session=0x70000CB0
DEBUG s7.connection:   Request header (14 bytes): 31 00 00 04 bb 00 00 00 03 70 00 0c b0 34
DEBUG s7.connection:   IntegrityId (1 bytes): 00
DEBUG s7.connection:   Request payload (19 bytes): 00 00 00 03 00 01 01 00 00 02 81 69 93 59 00 00 00 00 00
DEBUG s7.connection:   Full frame (42 bytes): 72 02 00 22 31 00 00 04 bb 00 00 00 03 70 00 0c b0 34 00 00 00 03 00 01 01 00 00 02 81 69 93 59 00 00 00 00 00 00 72 02 00 00
DEBUG snap7.connection: Sent 71 bytes: 03 00 00 47 02 f0 80 17 03 03 00 3b 3c ca e9 b3 e9 4b 3b 01 7e cb 46 d7 80 50 7b 63 d3 81 a5 ec b5 51 b6 36 4e 5d 9a da b1 93 f8 52 ef 5b 28 52 46 ed 18 08 75 68 ba 6e da 3e fc bb 6f 64 72 4e e4 9f db be 58 f1 52
DEBUG snap7.connection: Received TPKT: version=3 length=1009 payload (1005 bytes): 02 f0 80 17 03 03 03 e5 9f 8b 0e 8e dd a9 a3 0a df 63 ac 81 df 46 99 1c 7c d2 31 3f a0 e2 64 0d 2e fa 12 cc 1d eb f8 5a ee 49 3f c5 ca 49 df 19 f7 a9 75 ee 02 0e cf 81 44 05 0d 05 fd 70 c3 31 fd f4 0f 11 21 72 e8 c0 16 07 1a ea 1d 0b b6 27 b2 0a a9 26 1b 10 b5 c1 4d af fa 51 51 7f 91 31 02 15 66 74 15 c3 42 40 f7 cd 15 3b f6 6d 13 be 01 be 7f ee e5 09 ba 55 1e 2f 81 0f 21 6f da 3d f3 2d 60 6a 52 d2 4f 25 fb 87 72 5c 8b da aa 76 f4 c0 64 b1 51 52 6c 1b cc 79 49 32 24 e7 b3 33 b2 7c c5 7f 06 90 4e 3c 50 d8 e7 b5 0a 03 4d 4d e6 dc 82 39 ec 6b fa 13 73 57 53 3b da ea 02 2b 34 e7 38 a6 e4 51 a0 6e 90 3e 9a 1b 19 98 66 ea 76 05 6b c7 2e e2 7f 45 ba 59 79 b7 dc e0 f1 fc b5 f4 61 ee 61 aa 74 00 36 9c 49 71 ca 19 77 9a f8 b7 3b b2 51 d0 9c 2d d8 21 08 1d 8e c4 af 1a e3 b6 26 5c fd fc ca 55 06 cb 83 66 12 59 19 4a 3b 69 cf 68 73 d1 dd 76 ed 1c b1 e8 5b 17 4b 40 0a 7e 36 3b c9 48 50 ca da ad d9 49 47 d9 d9 3d 1b 8f cc ad 04 fc 57 e5 95 89 e6 c3 75 f3 ad 04 31 fa 00 67 6e 64 51 73 d3 27 64 23 70 8c f8 bd f6 d3 6a 89 46 db 80 86 df d5 fc d5 8c 56 cd 75 54 1c e7 fc 26 62 5a 07 b0 6c 61 36 f2 97 e1 b6 54 05 7a bb 66 09 d6 c1 be c4 4a 57 82 67 a3 91 88 45 aa 4b 8c 5b c0 51 3b eb a0 e7 fe 83 6d 93 7f 94 b0 9e 4d 49 61 0d ef 20 e2 03 5f 84 ea ff 38 06 1a 9c 5f c8 8f 99 6d 29 37 17 82 ea f8 34 da 92 f9 05 6e 90 7e 91 72 08 f3 53 a1 ed fc a1 36 d8 3c 25 c3 c3 bc aa df 2c ec 11 13 13 43 d7 12 55 36 26 89 8b 19 50 74 59 6d 0c c0 35 53 cc 86 d8 65 ca 31 75 7c 9b 66 b2 49 9c e1 8c d7 7c a3 60 86 3e 75 9c 5d 22 3b 11 59 00 45 58 34 0e 07 26 e2 f8 ce 6d e7 1e 34 45 55 09 b3 9d d4 7c 99 b3 6a 1a 23 e7 91 23 d7 88 73 44 d1 b1 c2 a7 07 fb 07 68 6b 2d e4 b3 11 b7 d2 ed 70 3e 6f cc ae 16 1d f1 0b e4 fd 1e de c4 a4 7d 7e 7d d6 a6 d7 06 85 5d 56 8d 7f 07 d8 88 d5 c9 92 93 ec 6c 90 59 42 eb 82 cb 76 8f 36 03 ca 1b 7e 91 08 70 a3 08 2a a0 1d 18 fe 27 c7 4c 3b fa fb c3 cf c0 a0 13 ec 4c 29 f0 36 7a f7 ce fa 9c 53 c6 c4 02 ee fb 3f 9d bc a3 db a8 96 97 94 80 fa fc 6a d5 4e 98 82 a6 0e 74 15 5d 8a e2 2c a4 65 f3 89 f5 e1 47 04 1d ac 18 33 0f 58 84 6d 75 cd 55 b0 7c 95 9f 19 03 55 c5 b8 ca 4a 0f 64 e3 dc 2b 39 95 58 ab 20 11 12 a3 08 4f 3d cd 4e ce 5f 2f f0 c2 c2 6b 07 d4 4a 64 88 9d 85 3e c8 6f ee 85 36 6b 44 28 8e 46 68 a1 3d 1d 8f 78 5e ae bb 28 8f 96 2c 67 89 40 5d 3e e2 7c 67 02 4e 44 d4 6c 8d f0 fc 0d fe bd fa de d7 df 48 33 b1 ab 8a 6c 51 41 b2 45 ac 0d c2 c7 ce 41 e1 ae 0b 7d 9a 5d 2d 2d c6 d8 f9 5a 9b c7 d4 83 86 a1 13 b3 8c 5a ec d3 33 cc 4c 8f 7e 08 1d 44 9e 61 8b 5b ee 76 ee 41 e5 03 58 fc 26 1f e2 7a ad 6e d9 6b 1b da da 1e 0d 41 07 ce 7a 63 03 69 c6 21 23 0d 2a 5b 28 f8 7a 59 fa 1a 0c 8b 35 49 09 c1 45 15 9e c2 00 eb 5a 8c 1c c3 95 87 2e b0 88 7a 53 34 c2 45 62 f4 d3 bd 1e 74 8d 10 a2 cc 61 51 75 bb 0e 30 64 8a d2 2f 85 03 41 74 80 4b 4f dc df 81 ce 2c e7 70 63 55 5e 94 0f 3a 32 ee 4d 8b 33 60 4f c0 6c 69 68 e0 78 f1 eb fa 12 da 35 26 76 87 8c 8c cc 26 f1 8a d0 cb f8 b8 ce e8 e6 2c 81 a3 67 80 6f 82 26 f2 fc 75 7e 49 5f 2f 68 6f a6 fd 49 90 2f 60 57 0b 8b 8b 24 90 b2 cd d6 50 46 37 76
...

Found 20733 variables
DEBUG snap7.connection: Received TPKT: version=3 length=220 payload (216 bytes): 02 f0 80 17 03 03 00 d0 65 c5 4c 04 6d 93 26 4a ae 40 5d ef 36 26 0d d2 57 84 a5 30 28 8e be 2e 5d 3c 0c a1 df 6d 93 96 f1 d6 fc 87 9b 39 87 e2 0e 7b 7d 0f 7b a7 f8 38 98 60 dd 37 b7 59 40 10 8c 0e 61 87 c1 f3 c4 b8 c6 19 97 3a ba 80 94 dc d5 da 4b 88 cc 47 e1 b4 13 b5 24 86 70 de 1e 52 b0 69 c6 b1 00 ab 55 d9 45 ab 04 26 d9 43 7f 69 4d 88 d7 75 2e ae 57 71 fa e1 48 f6 a4 85 b0 d1 2e 1b 05 bd 5a 79 00 ce dc 0f a4 6e 4e 42 eb 5e 16 46 79 ec 68 b5 a6 95 af 8a 6a 49 59 72 2c 83 82 26 20 c2 7e a9 ca ab 99 a5 50 ff 03 1a 8a 5b c0 40 32 2d 8c 92 5e e3 bd 90 3d f5 22 7c 4a 70 c6 2b 21 22 c3 01 fc a0 d5 17 12 59 fb 2b c3 e2 3f 4a 26 1f 45 2d 2a 41
INFO snap7.connection: Disconnected from 192.168.101.34:102
INFO snap7.connection: Disconnected from 192.168.101.34:102
INFO snap7.client: Disconnected from 192.168.101.34:102
INFO snap7.client: Disconnected from 192.168.101.34:102

@bvanelli bvanelli marked this pull request as ready for review July 10, 2026 12:04
@EliTheCoder

EliTheCoder commented Jul 10, 2026

Copy link
Copy Markdown

Confirming this works on a second CPU model. Tested the sync path (a5a7508) against a 6ES7 515-2TM01-0AB0, FW V2.9 over TLS — same firmware band as @bvanelli's 1512, different CPU:

ServerSessionVersion captured: 88 bytes
Session setup completed successfully
S7CommPlus connected ..., version=V2, session=..., tls=True
protocol: Protocol.S7COMMPLUS
Found 5144 variable(s)

Browse returned 5144 tags with correct names/types/offsets (data_type, opt_address/nonopt_address all populated). So the 14→10 header fix + with_integrity=False combo works on the 1515-2TM too, sync client included.

Two notes for whoever picks up the follow-ups:

  1. export_keying_material isn't a per-environment issue — it can't work on stdlib ssl at all. CPython's ssl module never wrapped SSL_export_keying_material, so hasattr(ssl.SSLSocket, "export_keying_material") is False on any stock build (mine: Python 3.11.13, OpenSSL 3.0.13). The OMS-exporter-secret warning will fire for everyone; browse works anyway because it doesn't depend on legitimation. Wiring up the OMS/legitimation path will need a TLS backend that exposes the exporter (pyOpenSSL / cryptography FFI), not just a newer OpenSSL.

  2. Re: the IntegrityId increment TODO — happy to help test once someone implements it. Browsing 5144 symbols completed fine without it, but I haven't exercised anything that needs the incrementing counter yet.

@gijzelaerr gijzelaerr merged commit 6afa950 into gijzelaerr:master Jul 11, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants