CANBUSスピードコンバータ

Mary-Kate Olsen
リリース: 2024-10-06 06:08:31
オリジナル
388 人が閲覧しました

CANBUS Speed Converter

この Python スクリプトは、Tshark からエクスポートされた値で構成されるテキスト ファイルを使用します。このエクスポートされた列は、5 バイトの 16 進値である各 CANBUS ペイロードで厳密に構成されています。 (10 文字) このプログラムは、CANBUS 16 進数値を KPH または MPH に変換します。

これは、CanID589.pcap からこの情報を抽出するために使用したコマンドです。CanID589.pcap 自体は、特に速度を表す CANBUS ID 589 の Wireshark からエクスポートされた分析です。他に 32 の異なるタイプの CANBUS ID がありますが、現時点ではそれらの値を気にする必要はありません。


┌──(kali㉿Z3r0)-[/media/sf_Shared_Kali/NCL Doc/scanningrecon]
└─$ tshark -r CanID589.pcap -T fields -e data.data > Data_speed.txt



ログイン後にコピー

(-r) は既存の pcap ファイルを読み取りますが、(-T フィールド) は Tshark に特定のフィールド (完全なパケットの詳細、概要、生データではなく) を出力するよう指示します。これは、すべてのパケット データをダンプするのではなく、必要な情報のみを抽出して出力をカスタマイズする方法です。 -e オプションは、パケットから抽出するフィールドを指定するために使用されます。この場合、data.data は各パケットのデータ バイトを表します。 「data.data」は、16 進数形式の CANBUS フレームの実際のコンテンツ (ペイロード) を指します。正しいデータがテキスト ファイルにエクスポートされるまで、さまざまな値を試す必要がありました。

ここに、CAN プロトコルに関連するさまざまなフィールドのリストを示します。

  • can.id: CAN 識別子フィールド (CAN ID)
  • can.dlc: データ長コード (存在するデータバイト数)
  • can.data: ペイロード データ
  • can.errorframe: CAN エラー フレーム
  • data.data: 生のバイトデータ (これはこのスクリプトが使用しているものです)

これはパケットごとに個別に実行することもできますが、352 個の異なる Can.ID = "589" (速度) パケットを反復処理しました


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()




ログイン後にコピー

ご質問、コメント、追加、建設的な批判などございましたら、お気軽にご連絡ください。ありがとうございます

以上がCANBUSスピードコンバータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート