handles protobufs, better error handling
This commit is contained in:
parent
f9b7a046d6
commit
887ce6c81d
@ -11,7 +11,7 @@ import socket
|
||||
import zmq
|
||||
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
|
||||
from meshtastic import protocols, mesh_pb2
|
||||
|
||||
# SDR output example data: ffffffffb45463dab971aa8c6308000078aacf76587a5a4cf4a20e2c1d0349ab3f72
|
||||
# Use default key. Result should be: b'\x08\x01\x12\x0eTestingCLU1234'
|
||||
@ -41,8 +41,6 @@ parser.add_argument('-n', '--net', action='store',dest='net', help='Network TCP
|
||||
parser.add_argument('-p', '--port', action='store',dest='port', help='Network port')
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
|
||||
##### END PARSE COMMANDLINE INPUT #####
|
||||
|
||||
|
||||
@ -137,6 +135,30 @@ def dataDecryptor(meshPacketHex, aesKey):
|
||||
|
||||
##### END DECRYPTION PROCESS #####
|
||||
|
||||
|
||||
|
||||
##### START PROTOBUF DECODER #####
|
||||
|
||||
def decodeProtobuf(packetData):
|
||||
# print("Packet data:", packetData)
|
||||
data = mesh_pb2.Data()
|
||||
try:
|
||||
data.ParseFromString(packetData)
|
||||
|
||||
handler = protocols.get(data.portnum)
|
||||
if handler.protobufFactory is None:
|
||||
pass
|
||||
else:
|
||||
pb = handler.protobufFactory()
|
||||
pb.ParseFromString(data.payload)
|
||||
except:
|
||||
data = "INVALID PROTOBUF:"
|
||||
return data
|
||||
|
||||
##### END PROTOBUF DECODER #####
|
||||
|
||||
|
||||
|
||||
##### START OPTIONAL NETWORK PROCESS #####
|
||||
|
||||
def networkParse(ipAddr, port, aesKey):
|
||||
@ -151,22 +173,19 @@ def networkParse(ipAddr, port, aesKey):
|
||||
msg = socket.recv() # grab the message
|
||||
extractedData = dataExtractor(msg.hex())
|
||||
decryptedData = dataDecryptor(extractedData, aesKey)
|
||||
print(decryptedData)
|
||||
# print(decryptedData)
|
||||
print(decodeProtobuf(decryptedData))
|
||||
else:
|
||||
time.sleep(0.1) # wait 100ms and try again
|
||||
|
||||
##### START OPTIONAL NETWORK PROCESS #####
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
meshtasticFullKeyHex = parseAESKey(args.key)
|
||||
|
||||
# Network branch. Doesnt exit, so we need IP Port and AES key
|
||||
try:
|
||||
print("do we have ip and port?")
|
||||
if len(args.net) > 0 and len(args.port) > 0:
|
||||
print(args.net, args.port)
|
||||
networkParse(args.net, args.port, meshtasticFullKeyHex)
|
||||
@ -174,8 +193,12 @@ if __name__ == "__main__":
|
||||
# If we get a payload on commandline, decrypt and exit.
|
||||
meshPacketHex = dataExtractor(args.input)
|
||||
decryptedData = dataDecryptor(meshPacketHex, meshtasticFullKeyHex)
|
||||
print(decryptedData)
|
||||
|
||||
protobufMessage = decodeProtobuf(decryptedData)
|
||||
if(protobufMessage == "INVALID PROTOBUF:"):
|
||||
print("INVALID PROTOBUF: ", end = '')
|
||||
print(decryptedData)
|
||||
else:
|
||||
print(protobufMessage)
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user