Rumah >pembangunan bahagian belakang >Tutorial Python >Penukar Kelajuan CANBUS
Skrip python ini menggunakan fail teks yang terdiri daripada nilai yang dieksport daripada Tshark. Lajur yang dieksport ini terdiri daripada setiap muatan CANBUS yang merupakan nilai Hex 5 bait. (10 aksara) Program ini menukar nilai heks CANBUS kepada KPH atau MPH.
Berikut ialah arahan yang saya gunakan untuk mengekstrak maklumat ini daripada CanID589.pcap yang sendiri merupakan pembedahan yang dieksport daripada Wireshark khususnya CANBUS ID 589 yang merujuk kepada kelajuan. Terdapat 32 jenis ID CANBUS yang berbeza tetapi kita tidak perlu bimbang dengan nilai tersebut pada masa ini.
┌──(kali㉿Z3r0)-[/media/sf_Shared_Kali/NCL Doc/scanningrecon] └─$ tshark -r CanID589.pcap -T fields -e data.data > Data_speed.txt
(-r) membaca fail pcap sedia ada manakala (medan-T) mengarahkan Tshark untuk mengeluarkan medan tertentu (bukannya butiran paket penuh, ringkasan atau data mentah). Ini adalah cara untuk menyesuaikan output, mengekstrak maklumat yang dikehendaki sahaja dan bukannya membuang semua data paket. Pilihan -e digunakan untuk menentukan medan mana dari paket untuk diekstrak. Dalam kes ini, data.data mewakili bait data setiap paket. "data.data" merujuk kepada kandungan sebenar (muatan) bingkai CANBUS dalam bentuk perenambelasan. Saya terpaksa bereksperimen dengan nilai yang berbeza sehingga data yang betul dieksport ke fail teks.
Berikut ialah senarai medan berbeza yang berkaitan dengan protokol CAN.
Ini juga boleh dilakukan secara individu untuk setiap paket tetapi saya mempunyai 352 paket Can.ID = "589" (kelajuan) yang berbeza untuk diulang melalui
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()
Jika sesiapa mempunyai sebarang pertanyaan, komen, penambahan atau kritikan membina, sila hubungi saya. Terima kasih
Atas ialah kandungan terperinci Penukar Kelajuan CANBUS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!