From 9a5f9d6e1117d919affc8517a0e2f34164b9e2b8 Mon Sep 17 00:00:00 2001 From: Paul SQUIZZATO Date: Mon, 6 Mar 2023 17:32:54 +0100 Subject: [PATCH] Ajouter 'src/decoderQuiMarchePourLinstant.py' --- src/decoderQuiMarchePourLinstant.py | 59 +++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/decoderQuiMarchePourLinstant.py diff --git a/src/decoderQuiMarchePourLinstant.py b/src/decoderQuiMarchePourLinstant.py new file mode 100644 index 0000000..bf871e7 --- /dev/null +++ b/src/decoderQuiMarchePourLinstant.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import scapy.all as scapy +import scapy.contrib.modbus as mb + +def decode(pkt): + prt=0 + addr,value = "","" + bigL = [ ] + global miniL + f=open("truc.txt","w") + if "ModbusADU" in pkt: + grPkt=pkt["ModbusADU"].show(dump=True) + lPkt=grPkt.splitlines() + for i in lPkt: + if "###" in i: + #if addr!="" and value!="": + #print("addr=",addr,"value=",value) + prt=0 + typResp="" + if "Coil" in i: + prt=1 + miniL[0] = "c" + elif "Register" in i: + prt=2 + miniL[0] = "r" + #if prt==1: + #print(i) + elif "startAddr" in i or "outputAddr" in i or "registerAddr" in i: + miniL[1] = i[i.find("=")+2:] + #print(addr) + elif "coilStatus" in i or "registerVal=" in i or "outputsValue" in i: + value = i[i.find("[")+1:i.rfind("]")] + value = value.split(", ") + miniL[2] = value + #print("value= ",value," addr= ",addr) + elif "outputValue" in i or "quantityOutput" in i or "registerValue" in i: + miniL[2] = i[i.find("=")+2:] + if miniL.count(0)==0: + if(type(miniL[2])==list): + if miniL[0]=="r": + for i in range(len(miniL[2])): + bigL.append([miniL[0],int(miniL[1],16)+i,miniL[2][i]]) + else: + for i in range(len(miniL[2])): + byte=8*[0] + convert=bin(int(miniL[2][i])) + for j in range(len(convert)-2): + byte[j]=convert[-(j+1)] + for j in range(8): + bigL.append([miniL[0],int(miniL[1],16)+i*8+j,byte[j]]) + else: + bigL.append(miniL) + print(bigL) + miniL = [0,0,0] +miniL = [0,0,0] +scapy.sniff(iface="lo", prn=decode) +