Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/50_dev2017/1330__canpy/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/50_dev2017/1330__canpy/transport.py

#    -*- coding: utf-8 -*-

import os
import re
import sys
import time
import random


#************************************************************************

class CAN (object):


    def __init__ (self,communication_matrix={}):

        """
        The communication matrix is a dictionary which maps message id s
        to lists of signals, example:

           {  "7a3": "SIGNAL_A,7,SIGNAL_B,1,SIGNAL_C,17",
              "e41": "SIGNAL_D,3,SIGNAL_E,1",
              ....
           }
           
        Sending of Signals then shall be translated into a list of messages
        """

        self.signals = 1
        #communication_matrix
        self.communication_matrix = communication_matrix

#***#*********************************************************************

    def open_canusb(self,serial_port,can_speed):

        """
        Opens the CAN Port via a CANUSB-Device
        """

        try:
            can_speed = { "10"   : 0,
                          "20"   : 1,
                          "50"   : 2,
                          "100"  : 3,
                          "125"  : 4,
                          "250"  : 5,
                          "500"  : 6,
                          "800"  : 7,
                          "1000" : 8 }[str(can_speed)]
        except:
           pass

        self.port = serial_port
        self.port.write("O\r")  #  open the can port
        self.port.write("S"+str(can_speed)+"\r")  #  open the can port

#*************************************************************************

    def msg_to_sig (self,msg):

        """
        Transforms a message into a dicitionary of consisting signals
        which point to their values.
        """

#   "t123e34f123"
        #msg = msg.split(",")
        message_id  = msg[1:4]
        #message_id  = msg[1:4]
        message_len = msg[4]
        data_field  = eval("0x" + msg[5:])   #  generates an int   example: 0xe3f123
        data_field  = format(data_field,"0"+str(int(message_len)*8)+"b")        #  transforms it to a string of the form  0b1010010101001.....
#        print "data field after binary conversion:",data_field
        #exit()
        sig_message = self.communication_matrix[message_id].split(",")
        result = {}
        
        zaehler = 0
        while (0 == 0):
            try:
                signal_bez = sig_message[zaehler]
                signal_len = int(sig_message[zaehler+1])
            except:
                break
#            print signal_bez
#            print signal_len
            #exit()
            signal_val = data_field[0:signal_len]   #   extract the leading bits for the content of the signal value   "1011010[0:3] -> 101, 1010
            data_field = data_field[signal_len:]    #   remove that bits in the data_field
            signal_val = eval("0b" + signal_val)  #   interpret the signal_val as a number in binary format
            #exit()
            if signal_val > 0:
                result[signal_bez] = signal_val
#                print "result:", result
                #exit()            
            zaehler = zaehler + 2

        return(result)
        
#*************************************************************************

    def sig_to_msg (self,signals):

        """
        Takes a dictionary of signals to be transmitted and translates it
        into one or more messages so that all signals are contained.
        """

        messages = []

        for sig_message_key in self.communication_matrix.keys():  #  run the entire communication matrix
           
            sig_message = self.communication_matrix[sig_message_key].split(",")        
            data_field = ""
            zaehler    = 0
            sig_message_needed = False
            while (0 == 0):
                try:
                    signal_bez = sig_message[zaehler]               
                    signal_len =sig_message[zaehler+1]
                except:
                    break
                
                signal_val = 0  # default value
                
                if signal_bez in signals:
                    signal_val = signals[signal_bez]   #  read out the overhanded signal value given from the origary signal dict
                    sig_message_needed = True          #  this sig_message is needed because a signal in it has to be transmitted
                    signal_val = format(signal_val,"0"+signal_len+"b")  #  transforms it to a string of the form  0b1010010101001.....
                    data_field = data_field + signal_val
                    zaehler    = zaehler + 2
                else:
                   signal_val = 0   #  read out the overhanded signal value given from the origary signal dict
                   signal_val = format(signal_val,"0"+signal_len+"b")  #  transforms it to a string of the form  0b1010010101001.....
                   data_field = data_field + signal_val
                   zaehler    = zaehler + 2  # added code  
            
            if not sig_message_needed:
                continue                
  
            data_field = data_field + "0000000"                   #  padding the datafield with 0 to make string of data bits multiple of 8 
            data_len   = int(len(data_field)/8)*8                 #  data length in number of bits 
            data_field = data_field[0:data_len]                   #  cut to a multple of 8 - so now we have a list of bytes
            data_field = int(data_field,2)
            data_field = hex(data_field)                          #  convert it to hex
            data_field = data_field[2:]                           #  strp off '0x'

#            print "data field :", data_field
            #exit()
            #print "signal message key:", sig_message_key
            #print "data length", str(data_len)
            #print "data field", data_field
            
            messages.append("t"+sig_message_key+str(data_len/8)+data_field)
        return(messages)
        

#****************************************************************

#  Test Modes:

    def t_make_communication_matrix (self,msgcount=10):
    
        self.communication_matrix = {}
        rand     = random.Random()

        zaehler = 0
        while zaehler < msgcount:
        
            msg_signals = ""
            msg_bits    = 0
            msg_bytes   = rand.randint(1,8)
            msg_name    = "%03x" % rand.randint(1,2047)

            while (0 == 0):
                signal_name = rand.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
                zaehler1 = 0
                zaehlmax = rand.randint(3,7)
                while (zaehler1 < zaehlmax):
                    signal_name = signal_name + rand.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789______")
                    zaehler1 = zaehler1 + 1
                signal_len = rand.choice([1,1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,28,19,20])
                msg_bits   = msg_bits + signal_len
                if msg_bits > msg_bytes * 8:
                    break
                msg_signals = msg_signals + "," + signal_name + "," + str(signal_len)
                
            if not msg_signals == "":
                self.communication_matrix[msg_name] = msg_signals[1:]
                zaehler = zaehler + 1
                

#****************************************************************

    def t_get_signals (self):
    
        signal_list = {}

        for msg in self.communication_matrix.keys():
            sig_str = self.communication_matrix[msg].split(",")
            zaehler = 0
            while (0 == 0):
                try:
                    signal_list[sig_str[zaehler]] = sig_str[zaehler+1]
                except:
                    break
                zaehler = zaehler + 2

        return(signal_list)

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net