diff --git a/Pymodbus/decoder3bancal.py b/Pymodbus/decoder3bancal.py new file mode 100644 index 0000000..9eaa30a --- /dev/null +++ b/Pymodbus/decoder3bancal.py @@ -0,0 +1,72 @@ +#!/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 and "Read" in i: + prt=1 + miniL[0] = "cr" + if "Coil" in i and "Write" in i: + prt=1 + miniL[0]="cw" + 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 and miniL[0]=="r"): + 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:] + elif "outputsValue" in i and miniL[0]=="c": + valInter=i[i.find("=")+2:] + valInter2=valInter[1:-1] + #miniL[2] = int(valInter2,16) + miniL[2]=vaInter2 + 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,int(miniL[2][i],16)]) + if miniL[0]=="cr": + print("hého:",miniL) + for i in range(len(miniL[2])): + byte=8*[0] + print("regarde ici",miniL[2][i]) + 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(["c",int(miniL[1],16)+i*8+j,byte[j]]) + if miniL[0]=="cw": + print("salut:",miniL) + bigL.append(["c",int(miniL[1],16),0]) + else: + bigL.append(miniL) + print(bigL) + miniL = [0,0,0] +miniL = [0,0,0] +scapy.sniff(iface="lo", prn=decode) +