Heim > Artikel > Backend-Entwicklung > CANBUS-Geschwindigkeitskonverter
Dieses Python-Skript verwendet eine Textdatei, die aus exportierten Werten von Tshark besteht. Diese exportierte Spalte besteht ausschließlich aus jeder CANBUS-Nutzlast, bei der es sich um einen 5-Byte-Hex-Wert handelt. (10 Zeichen) Dieses Programm wandelt CANBUS-Hex-Werte in KPH oder MPH um.
Hier ist der Befehl, den ich verwendet habe, um diese Informationen aus CanID589.pcap zu extrahieren, bei dem es sich selbst um eine von Wireshark exportierte Präparation speziell der CANBUS-ID 589 handelte, die sich auf die Geschwindigkeit bezieht. Es gibt 32 weitere unterschiedliche Arten von CANBUS-IDs, aber mit diesen Werten müssen wir uns im Moment nicht befassen.
┌──(kali㉿Z3r0)-[/media/sf_Shared_Kali/NCL Doc/scanningrecon] └─$ tshark -r CanID589.pcap -T fields -e data.data > Data_speed.txt
(-r) liest die vorhandene PCAP-Datei, während (-T Felder) Tshark anweist, bestimmte Felder auszugeben (anstelle vollständiger Paketdetails, Zusammenfassungen oder Rohdaten). Es ist eine Möglichkeit, die Ausgabe anzupassen und nur die gewünschten Informationen zu extrahieren, anstatt alle Paketdaten wegzuwerfen. Die Option -e wird verwendet, um anzugeben, welche Felder aus dem Paket extrahiert werden sollen. In diesem Fall repräsentiert data.data die Datenbytes jedes Pakets. „data.data“ bezieht sich auf den tatsächlichen Inhalt (Payload) der CANBUS-Frames in hexadezimaler Form. Ich musste mit verschiedenen Werten experimentieren, bis die richtigen Daten in die Textdatei exportiert wurden.
Hier ist eine Liste der verschiedenen Felder im Zusammenhang mit dem CAN-Protokoll.
Dies kann auch einzeln für jedes Paket durchgeführt werden, aber ich musste 352 verschiedene Can.ID = "589" (Geschwindigkeit) Pakete durchlaufen
def format_hex_value(hex_value): # Tshark exported specific packets to column data.data unformatted. return ' '.join(hex_value[i:i+2] for i in range(0, len(hex_value), 2)) def calculate_speed_from_hex_value(hex_value): # 5 byte check if len(hex_value) < 10: raise ValueError("Hex value must have at least 10 characters for 5 bytes") # Extract the relevant bytes from payload (the last two bytes) high_byte = int(hex_value[-4:-2], 16) low_byte = int(hex_value[-2:], 16) speed = (high_byte << 8) + low_byte # Example: 00 00 00 04 e1 - (04 << 8) + e1 = 1024 + 225 = 1249 # Convert speed from centi-KPH to KPH then to MPH speed_kph = speed / 100.0 # Assuming the value is in centi-KPH speed_mph = speed_kph * 0.621371 # Convert KPH to MPH return speed_mph def main(): speeds = [] with open('data_speed.txt', 'r') as file: for line in file: hex_value = line.strip() if hex_value: formatted_hex_value = format_hex_value(hex_value) print(f"Formatted Hex Value: {formatted_hex_value}") try: # Calculate speed and store it in the speeds list speed_mph = calculate_speed_from_hex_value(hex_value) speeds.append(speed_mph) print(f"Calculated Speed: {speed_mph:.2f} MPH") except ValueError as e: print(f"Error processing value '{hex_value}': {e}") speeds.sort() #Sort lowest to highest print("\nFinal Sorted Speeds (MPH):") for speed in speeds: print(f"{speed:.2f} MPH") if __name__ == "__main__": main()
Wenn jemand Fragen, Kommentare, Ergänzungen oder konstruktive Kritik hat, kann er sich gerne an mich wenden. Vielen Dank
Das obige ist der detaillierte Inhalt vonCANBUS-Geschwindigkeitskonverter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!