.pkt スニファ キャプチャがあります。C アプリケーションからキャプチャ内のすべてのパケットを読み取ると、無線ヘッダーが追加されていることがわかります。無線ヘッダーには、すべてのパケットのエポック時間が含まれています。ミリ秒単位で 2 つのパケット間の時間差を調べたいと思います。2 つのエポック値を比較してミリ秒単位の時間差を見つける方法がわかりません。これで私を助けてください。
2 に答える
.pkt スニファ キャプチャがあります。
「.pkt スニファ キャプチャ」とは何ですか? Wireshark を使用してパケットをキャプチャしましたか? もしそうなら、それは pcap または pcap-ng キャプチャです。
無線ヘッダーには、すべてのパケットのエポック時間が含まれています。
ほとんどのスニファー形式では、パケットのタイム スタンプは「レコード ヘッダー」の一部であり、無線情報ヘッダーの一部ではありません。802.11 キャプチャの場合、一部のキャプチャ ファイル形式は、802.11 タイミング同期機能タイマーを含む無線情報ヘッダーを提供する場合がありますが、そのタイマーには指定されたエポックがありません。
パケットのタイム スタンプのエポックは、キャプチャ ファイルの形式によって異なります。pcap と pcap-ng は、1970 年 1 月 1 日 00:00:00 UTC の UN*X エポックを使用します。これは、pcap がもともと UN*X で使用され、pcap-ng が pcap の影響を受けているためです。他のファイル形式では、たとえば、1601 年 1 月 1 日 00:00:00 "UTC" の Windows FILETIME エポック (先発グレゴリオ暦を使用)、またはその他の時間の起源を使用する場合があります。
しかし、あなたが望むのは
2 つのパケット間の時間差をミリ秒単位で求める
その場合、エポックは無関係です - 時間が "あるエポックからX秒後) ( Xは必ずしも整数であるとは限りません。小数部を持つこともできます) として表される場合、エポックから " X秒" から "エポックからY秒」はX - Yであり、エポック自体はキャンセルされます。
したがって、大きな問題は、「あるエポックからの秒数」をどのように表現するかです。秒の整数カウント?{ナノ秒、マイクロ秒の 10 分の 1、マイクロ秒、ミリ秒など} の整数カウント? 秒と{ナノ秒、マイクロ秒など}の組み合わせ? そのため、これがファイル形式のタイム スタンプなのか 802.11 TSFT なのか、ファイル形式のタイム スタンプの場合はどのファイル形式なのかを知る必要があります。
あなたが示しているように、これがWiresharkキャプチャ(つまり、Wiresharkで作成されたキャプチャであり、Wiresharkがたまたま読み取れるキャプチャではなく、ネイティブのpcapまたはpcap-ng 形式) の場合、ファイル形式は pcap または pcap-ng (この場合、エポックはエポック、つまり 1970 年 1 月 1 日 00:00:00 UTS) であり、タイムスタンプは 32 ビット秒のいずれかです。 pcap の場合はその秒以降のエポックと 32 ビットのマイクロ秒、またはエポック以降の 64 ビットの単位数 (単位は、問題のパケットがキャプチャされたインターフェイスのインターフェイス記述ブロックによって指定されます。デフォルトはマイクロ秒)。
2 つの pcap パケットのタイム スタンプの差をマイクロ秒単位で計算するには、秒の値の差を取り、1,000,000 を掛けて、マイクロ秒の値の差を加算します (両方の差は符号付きです)。これをミリ秒に変換するには、1,000 で割ります。
2 つの pcap-ng パケットのタイム スタンプの差を計算するには、タイム スタンプ値の差をとります。これは、1 秒の端数のカウントです。端数は、Interface Description Block で指定された値によって定義されます。これをミリ秒に変換するには、端数に基づいて適切に調整します (たとえば、マイクロ秒の場合は 1,000 で割ります)。
2 つの 802.11 パケットの TSFT 値の差を計算するには、一方の値をもう一方の値から引きます。少なくともラジオタップの TSFT 値はマイクロ秒単位なので、ミリ秒に変換するには、1,000 で割ります。