avancée du décodeur bancal

master
Paul SQUIZZATO 2 years ago
parent b9d13fb270
commit 3f776cff81

Binary file not shown.

@ -17,6 +17,7 @@ def decode(pkt):
prt=1 prt=1
if prt==1: if prt==1:
print(i) print(i)
print("fini")
scapy.sniff(iface="lo", prn=decode) scapy.sniff(iface="lo", prn=decode)

@ -1,59 +0,0 @@
#!/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)

@ -9,64 +9,92 @@ def decode(pkt):
addr,value = "","" addr,value = "",""
bigL = [ ] bigL = [ ]
global miniL global miniL
f=open("truc.txt","w")
if "ModbusADU" in pkt: if "ModbusADU" in pkt:
grPkt=pkt["ModbusADU"].show(dump=True) grPkt=pkt["ModbusADU"].show(dump=True)
lPkt=grPkt.splitlines() lPkt=grPkt.splitlines()
for i in lPkt: for i in lPkt:
if "###" in i: if "###" in i:
#if addr!="" and value!="":
#print("addr=",addr,"value=",value)
prt=0 prt=0
typResp="" typResp=""
if "Coil" in i and "Read" in i: if "Coil" in i and "Read" in i:
prt=1 prt=1
miniL[0] = "cr" miniL[0] = "c"
if "Coil" in i and "Write" in i: if "Coil" in i and "Write" in i:
prt=1 prt=1
miniL[0]="cw" miniL[0]="cw"
elif "Register" in i: elif "Register" in i:
prt=2 prt=2
miniL[0] = "r" miniL[0] = "r"
#if prt==1: miniL[3]=1
#print(i)
elif "startAddr" in i or "outputAddr" in i or "registerAddr" in i: elif "startAddr" in i or "outputAddr" in i or "registerAddr" in i:
miniL[1] = i[i.find("=")+2:] miniL[1] = i[i.find("=")+2:]
#print(addr)
elif "coilStatus" in i or "registerVal=" in i or ("outputsValue" in i and miniL[0]=="r"): elif "coilStatus" in i or "registerVal=" in i or ("outputsValue" in i and miniL[0]=="r"):
value = i[i.find("[")+1:i.rfind("]")] value = i[i.find("[")+1:i.rfind("]")]
value = value.split(", ") value = value.split(", ")
miniL[2] = value miniL[2] = value
#print("value= ",value," addr= ",addr) elif "outputValue" in i or "registerValue" in i:
elif "outputValue" in i or "quantityOutput" in i or "registerValue" in i:
miniL[2] = i[i.find("=")+2:] miniL[2] = i[i.find("=")+2:]
elif "outputsValue" in i and miniL[0]=="c": miniL[3]=1
print("cest lui qui fait chier",miniL)
elif "quantity" in i and miniL[0]=="c":
miniL[3]=i[i.find("=")+2:]
print(miniL[3])
elif "quantityOutput" in i and miniL[0]=="cw":
miniL[3]=i[i.find("=")+2:]
print(miniL[3])
elif "outputsValue" in i and miniL[0]=="cw":
valInter=i[i.find("=")+2:] valInter=i[i.find("=")+2:]
valInter2=valInter[1:-1] valInter2=valInter[1:-1]
#miniL[2] = int(valInter2,16) miniL[2]=valInter2
miniL[2]=vaInter2
if miniL.count(0)==0: if miniL.count(0)==0:
if(type(miniL[2])==list): if(type(miniL[2])==list):
if miniL[0]=="r": if miniL[0]=="r":
for i in range(len(miniL[2])): for i in range(len(miniL[2])):
bigL.append([miniL[0],int(miniL[1],16)+i,int(miniL[2][i],16)]) if("0x" in miniL[2]):
if miniL[0]=="cr": miniL[2]=int(miniL[2],16)
print("hého:",miniL) if("0x" in str(miniL[1])):
miniL[1]=int(miniL[1],16)
bigL.append([miniL[0],miniL[1]+i,miniL[2][i]])
if miniL[0]=="c":
for i in range(len(miniL[2])): for i in range(len(miniL[2])):
byte=8*[0] byte=8*[0]
print("regarde ici",miniL[2][i])
convert=bin(int(miniL[2][i])) convert=bin(int(miniL[2][i]))
for j in range(len(convert)-2): for j in range(len(convert)-2):
byte[j]=convert[-(j+1)] byte[j]=convert[-(j+1)]
for j in range(8): for j in range(8):
bigL.append(["c",int(miniL[1],16)+i*8+j,byte[j]]) print(miniL[1],j)
if miniL[0]=="cw": bigL.append(["c",int(str(miniL[1]),16)+i*8+j,byte[j]])
print("salut:",miniL)
bigL.append(["c",int(miniL[1],16),0])
else: else:
if "0x" in str(miniL[1]):
miniL[1]=int(miniL[1],16)
if "0x" in str(miniL[2]):
miniL[2]=int(miniL[2],16)
if "0x" in str(miniL[3]):
miniL[3]=int(miniL[3],16)
if miniL[0]=="cw" and miniL[2]>1:
print("problem ?")
if miniL[3]>1:
valeurs=bin(miniL[2])[::-1][:-2]
while len(valeurs)<miniL[3]:
valeurs+='0'
nouvList=[]
for i in range(miniL[3]):
nouvList.append(["c",miniL[1]+i,valeurs[i]])
i+=1
print(nouvList,"coucou")
miniL=nouvList
else:
if miniL[2]==65280:
miniL[2]=1
if miniL[0]=="cw" and miniL[3]==1:
miniL=miniL[:3]
if miniL[0]=="r" and miniL[3]==1:
miniL=miniL[:3]
print("betise a reparer")
print("hého?")
bigL.append(miniL) bigL.append(miniL)
print(bigL) print(bigL)
miniL = [0,0,0] miniL = [0,0,0,0]
miniL = [0,0,0] miniL = [0,0,0,0]
scapy.sniff(iface="lo", prn=decode) scapy.sniff(iface="lo", prn=decode)

@ -0,0 +1,39 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import scapy.all as scapy
import scapy.contrib.modbus as mb
valeursPropres={}
valeursPasPropres=[]
machin=["","",""]
def decode(pkt):
prt=0
cle=["",""]
f=open("truc.txt","w")
if "ModbusADU" in pkt:
grPkt=pkt["ModbusADU"].show(dump=True)
lPkt=grPkt.splitlines()
for i in lPkt:
if "Addr" in i:
print(i)
addresse=i[17:]
cle[1]=addresse
machin[1]=addresse
if "Write" in i or "Read" in i:
print(i)
if "Coil" in i:
cle[0]="C"
machin[0]="C"
else:
cle[0]="R"
machin[0]="R"
if "Value" in i or "coilStatus" in i or "registerVal" in i:
print(i)
machin[2] = i[-5:]
if "" not in machin:
print(machin)
scapy.sniff(iface="lo", prn=decode)
Loading…
Cancel
Save