Les decoder sont terminés, celui à utiliser est decoderMain.py
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
parent
59efb94b27
commit
790a5a344c
@ -1,96 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
#https://scapy.readthedocs.io/en/latest/api/scapy.packet.html#scapy.packet.Packet
|
|
||||||
#https://scapy.readthedocs.io/en/latest/api/scapy.contrib.modbus.html
|
|
||||||
|
|
||||||
import getpass
|
|
||||||
import scapy.all as scapy
|
|
||||||
import scapy.contrib.modbus as mb
|
|
||||||
|
|
||||||
from triPacket import triPacket
|
|
||||||
|
|
||||||
def decode(pkt):
|
|
||||||
if "ModbusADU" in pkt:
|
|
||||||
global miniL
|
|
||||||
modpkt = pkt["ModbusADU"]
|
|
||||||
type_call = ""
|
|
||||||
|
|
||||||
if "Multiple" in modpkt.payload.name:
|
|
||||||
type_call += "m"
|
|
||||||
else:
|
|
||||||
type_call += "s"
|
|
||||||
|
|
||||||
if "Coil" in modpkt.payload.name:
|
|
||||||
type_call += "C"
|
|
||||||
else:
|
|
||||||
type_call += "R"
|
|
||||||
miniL[0] = type_call
|
|
||||||
|
|
||||||
|
|
||||||
if "Read" in modpkt.payload.name:
|
|
||||||
type_call += "r"
|
|
||||||
if "Response" in modpkt.payload.name:
|
|
||||||
byte_count = modpkt.payload.getfieldval("byteCount")
|
|
||||||
status = []
|
|
||||||
if "C" in type_call:
|
|
||||||
Value = modpkt.payload.getfieldval("coilStatus")
|
|
||||||
for j in range(byte_count):
|
|
||||||
val=str(bin(Value[j]))[2:].rjust(8,'0')[::-1]
|
|
||||||
status.extend(k for k in [*val])
|
|
||||||
else:
|
|
||||||
status = modpkt.payload.getfieldval("registerVal")
|
|
||||||
for j in range(len(status)):
|
|
||||||
#bigL.append([miniL[0],status[j],miniL[2]+j])
|
|
||||||
triPacket([miniL[0][1],miniL[2]+j,status[j]],connec)
|
|
||||||
miniL = [0,0,0]
|
|
||||||
else:
|
|
||||||
addr = modpkt.payload.getfieldval("startAddr")
|
|
||||||
miniL[2] = addr
|
|
||||||
else:
|
|
||||||
type_call += "w"
|
|
||||||
if "Response" in modpkt.payload.name:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
if "m" in type_call:
|
|
||||||
addr = modpkt.payload.getfieldval("startAddr")
|
|
||||||
#byte_count = modpkt.payload.getfieldval("quantityOutput")
|
|
||||||
output_value = modpkt.payload.getfieldval("outputsValue")
|
|
||||||
status = []
|
|
||||||
if "C" in type_call:
|
|
||||||
for j in range(len(output_value)):
|
|
||||||
val=str(bin(output_value[j]))[2:].rjust(8,'0')[::-1]
|
|
||||||
status.extend(k for k in [*val])
|
|
||||||
|
|
||||||
for j in range(len(status)):
|
|
||||||
#bigL.append([miniL[0],status[j],addr+j]) # changer 5 pour mettre l'adresse
|
|
||||||
triPacket([miniL[0][1],addr+j,status[j]],connec)
|
|
||||||
#print(bigL)
|
|
||||||
else:
|
|
||||||
if "C" in type_call:
|
|
||||||
addr = modpkt.payload.getfieldval("outputAddr")
|
|
||||||
output_value = modpkt.payload.getfieldval("outputValue")
|
|
||||||
else:
|
|
||||||
addr = modpkt.payload.getfieldval("registerAddr")
|
|
||||||
output_value = modpkt.payload.getfieldval("registerValue")
|
|
||||||
triPacket([miniL[0][1],addr,output_value],connec)
|
|
||||||
#bigL.append([miniL[0],output_value,addr])
|
|
||||||
|
|
||||||
#print(bigL)
|
|
||||||
bigL = []
|
|
||||||
print("In order for data sniffed to be stored inside the database, please register the following :")
|
|
||||||
DB_HOST = input('host of the database server : ')
|
|
||||||
if not DB_HOST:
|
|
||||||
DB_HOST = '192.168.128.141'
|
|
||||||
DB_NAME = input('name of the database : ')
|
|
||||||
if not DB_NAME:
|
|
||||||
DB_NAME = 'dblodufour1'
|
|
||||||
DB_USER = input('login of the user : ')
|
|
||||||
if not DB_USER:
|
|
||||||
DB_USER = 'lodufour1'
|
|
||||||
DB_PASSWORD = getpass.getpass('user password : ')
|
|
||||||
connec=[DB_HOST,DB_NAME,DB_USER,DB_PASSWORD]
|
|
||||||
|
|
||||||
|
|
||||||
miniL = [0,0,0]
|
|
||||||
scapy.sniff(iface="lo", prn=decode)
|
|
Loading…
Reference in new issue